diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/spi25.c | 59 | ||||
-rw-r--r-- | tests/tests.c | 1 | ||||
-rw-r--r-- | tests/tests.h | 1 |
3 files changed, 61 insertions, 0 deletions
diff --git a/tests/spi25.c b/tests/spi25.c index f57251ea..f1019104 100644 --- a/tests/spi25.c +++ b/tests/spi25.c @@ -67,6 +67,65 @@ int __wrap_spi_send_command(const struct flashctx *flash, return 0; } +static void spi_read_progress_cb(struct flashrom_flashctx *flashctx) +{ + struct flashrom_progress *progress_state = flashctx->progress_state; + uint32_t *cnt = (uint32_t *) progress_state->user_data; + assert_int_equal(0x300, progress_state->total); + switch (*cnt) { + case 0: + assert_int_equal(0x100, progress_state->current); + break; + case 1: + assert_int_equal(0x200, progress_state->current); + break; + case 2: + assert_int_equal(0x300, progress_state->current); + break; + case 3: + assert_int_equal(0x300, progress_state->current); + break; + case 4: + assert_int_equal(0x300, progress_state->current); + break; + default: + fail(); + } + (*cnt)++; +} + +void spi_read_chunked_test_success(void **state) +{ + (void) state; /* unused */ + uint8_t buf[0x400] = { 0x0 }; + uint32_t cnt = 0; + const unsigned int max_data_read = 0x100; + const unsigned int offset = 0x100; + struct registered_master mst = { + .spi.read = default_spi_read, + .spi.max_data_read = max_data_read + }; + + /* setup initial test state */ + struct flashctx flashctx = { + .chip = &mock_chip, + .mst = &mst + }; + struct flashrom_progress progress_state = { + .user_data = (void *) &cnt, + }; + flashrom_set_progress_callback(&flashctx, spi_read_progress_cb, &progress_state); + for (int i = 0; i < 4; i++) { + expect_memory(__wrap_spi_send_command, flash, + &flashctx, sizeof(flashctx)); + will_return(__wrap_spi_send_command, JEDEC_WRDI); + will_return(__wrap_spi_send_command, JEDEC_READ); + will_return(__wrap_spi_send_command, max_data_read); + } + assert_int_equal(0, spi_chip_read(&flashctx, buf, offset, sizeof(buf))); + assert_int_equal(5, cnt); +} + void spi_write_enable_test_success(void **state) { (void) state; /* unused */ diff --git a/tests/tests.c b/tests/tests.c index 2f955ff4..a719a8fd 100644 --- a/tests/tests.c +++ b/tests/tests.c @@ -391,6 +391,7 @@ int main(void) const struct CMUnitTest spi25_tests[] = { cmocka_unit_test(spi_write_enable_test_success), cmocka_unit_test(spi_write_disable_test_success), + cmocka_unit_test(spi_read_chunked_test_success), cmocka_unit_test(probe_spi_rdid_test_success), cmocka_unit_test(probe_spi_rdid4_test_success), cmocka_unit_test(probe_spi_rems_test_success), diff --git a/tests/tests.h b/tests/tests.h index e2b22113..5ffc1456 100644 --- a/tests/tests.h +++ b/tests/tests.h @@ -31,6 +31,7 @@ void flashbuses_to_text_test_success(void **state); /* spi25.c */ void spi_write_enable_test_success(void **state); void spi_write_disable_test_success(void **state); +void spi_read_chunked_test_success(void **state); void probe_spi_rdid_test_success(void **state); void probe_spi_rdid4_test_success(void **state); void probe_spi_rems_test_success(void **state); |