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); | 
