]>
git.ipfire.org Git - thirdparty/u-boot.git/blob - test/cmd/rw.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Tests for read and write commands
10 #include <test/test.h>
13 static int setup_partitions(struct unit_test_state
*uts
, struct blk_desc
**mmc_dev_desc
)
15 char str_disk_guid
[UUID_STR_LEN
+ 1];
16 struct disk_partition parts
[2] = {
18 .start
= 48, /* GPT data takes up the first 34 blocks or so */
29 ut_asserteq(2, blk_get_device_by_str("mmc", "2", mmc_dev_desc
));
30 if (CONFIG_IS_ENABLED(RANDOM_UUID
)) {
31 gen_rand_uuid_str(parts
[0].uuid
, UUID_STR_FORMAT_STD
);
32 gen_rand_uuid_str(parts
[1].uuid
, UUID_STR_FORMAT_STD
);
33 gen_rand_uuid_str(str_disk_guid
, UUID_STR_FORMAT_STD
);
35 ut_assertok(gpt_restore(*mmc_dev_desc
, str_disk_guid
, parts
,
40 /* Fill the write buffer with pseudo-random data, clear the read buffer. */
41 static void init_buffers(char *rb
, char *wb
, size_t size
, unsigned seed
)
51 static int dm_test_read_write(struct unit_test_state
*uts
)
53 struct blk_desc
*dev_desc
;
54 char wbuf
[1024], rbuf
[1024];
57 #define INIT_BUFFERS() init_buffers(rbuf, wbuf, sizeof(rbuf), __LINE__)
59 ut_assertok(setup_partitions(uts
, &dev_desc
));
61 wa
= map_to_sysmem(wbuf
);
62 ra
= map_to_sysmem(rbuf
);
64 /* Simple test, write to/read from same partition. */
66 ut_assertok(run_commandf("write mmc 2:1 0x%lx 0 2", wa
));
67 ut_assertok(run_commandf("read mmc 2:1 0x%lx 0 2", ra
));
68 ut_assertok(memcmp(wbuf
, rbuf
, sizeof(wbuf
)));
69 ut_assertok(run_commandf("read mmc 2:1 0x%lx 1 1", ra
));
70 ut_assertok(memcmp(&wbuf
[512], rbuf
, 512));
72 /* Use name for write, number for read. */
74 ut_assertok(run_commandf("write mmc 2#log 0x%lx 0 2", wa
));
75 ut_assertok(run_commandf("read mmc 2:2 0x%lx 0 2", ra
));
76 ut_assertok(memcmp(wbuf
, rbuf
, sizeof(wbuf
)));
78 /* Use full device for write, name for read. */
80 ut_assertok(run_commandf("write mmc 2:0 0x%lx 0x30 2", wa
));
81 ut_assertok(run_commandf("read mmc 2#data 0x%lx 0 2", ra
));
82 ut_assertok(memcmp(wbuf
, rbuf
, sizeof(wbuf
)));
84 /* Use name for write, full device for read */
86 ut_assertok(run_commandf("write mmc 2#log 0x%lx 1 2", wa
));
87 ut_assertok(run_commandf("read mmc 2:0 0x%lx 0x35 2", ra
));
88 ut_assertok(memcmp(wbuf
, rbuf
, sizeof(wbuf
)));
90 /* Read/write outside partition bounds should be rejected upfront. */
91 console_record_reset_enable();
92 ut_asserteq(1, run_commandf("read mmc 2#data 0x%lx 3 2", ra
));
93 ut_assert_nextlinen("read out of range");
94 ut_assert_console_end();
96 console_record_reset_enable();
97 ut_asserteq(1, run_commandf("write mmc 2#log 0x%lx 9 2", wa
));
98 ut_assert_nextlinen("write out of range");
99 ut_assert_console_end();
104 DM_TEST(dm_test_read_write
, UT_TESTF_SCAN_FDT
| UT_TESTF_CONSOLE_REC
);