mirror of https://github.com/wolfSSL/wolfBoot.git
parent
25c0aaa8bd
commit
eaa6af2b66
|
|
@ -118,7 +118,7 @@ int ext_flash_read(uintptr_t address, uint8_t *data, int len)
|
|||
}
|
||||
for (i = 0; i < len; i++) {
|
||||
if (uart_rx_timeout(&data[i]) != 0)
|
||||
return 0;
|
||||
return -1;
|
||||
uart_tx(CMD_ACK);
|
||||
}
|
||||
return i;
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ endif
|
|||
|
||||
|
||||
TESTS:=unit-parser unit-fdt unit-extflash unit-string unit-spi-flash unit-aes128 \
|
||||
unit-uart-flash \
|
||||
unit-aes256 unit-chacha20 unit-pci unit-mock-state unit-sectorflags \
|
||||
unit-max-space \
|
||||
unit-image unit-image-rsa unit-nvm unit-nvm-flagshome unit-enc-nvm \
|
||||
|
|
@ -156,6 +157,9 @@ unit-spi-flash: ../../include/target.h unit-spi-flash.c
|
|||
unit-qspi-flash: ../../include/target.h unit-qspi-flash.c
|
||||
gcc -o $@ $^ $(CFLAGS) $(LDFLAGS)
|
||||
|
||||
unit-uart-flash: ../../include/target.h unit-uart-flash.c ../../src/uart_flash.c
|
||||
gcc -o $@ unit-uart-flash.c $(CFLAGS) $(LDFLAGS)
|
||||
|
||||
unit-tpm-rsa-exp: ../../include/target.h unit-tpm-rsa-exp.c ../../src/string.c
|
||||
gcc -o $@ $^ $(CFLAGS) -I$(WOLFBOOT_LIB_WOLFTPM) -DWOLFBOOT_TPM \
|
||||
-DWOLFTPM_USER_SETTINGS -DWOLFBOOT_TPM_VERIFY -DWOLFBOOT_SIGN_RSA2048 \
|
||||
|
|
|
|||
|
|
@ -0,0 +1,92 @@
|
|||
/* unit-uart-flash.c
|
||||
*
|
||||
* Unit tests for the UART flash transport.
|
||||
*/
|
||||
|
||||
#define UART_FLASH
|
||||
|
||||
#include <check.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
static const uint8_t CMD_ACK = 0x06;
|
||||
|
||||
static uint8_t rx_script[16];
|
||||
static int rx_script_len;
|
||||
static int rx_script_pos;
|
||||
static uint8_t tx_log[32];
|
||||
static int tx_log_len;
|
||||
|
||||
uint32_t wolfBoot_current_firmware_version(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int uart_tx(const uint8_t c)
|
||||
{
|
||||
ck_assert_int_lt(tx_log_len, (int)sizeof(tx_log));
|
||||
tx_log[tx_log_len++] = c;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int uart_rx(uint8_t *c)
|
||||
{
|
||||
if (rx_script_pos >= rx_script_len)
|
||||
return 0;
|
||||
|
||||
*c = rx_script[rx_script_pos++];
|
||||
return 1;
|
||||
}
|
||||
|
||||
#include "../../src/uart_flash.c"
|
||||
|
||||
static void reset_uart_script(const uint8_t *script, int len)
|
||||
{
|
||||
memset(rx_script, 0, sizeof(rx_script));
|
||||
memcpy(rx_script, script, len);
|
||||
rx_script_len = len;
|
||||
rx_script_pos = 0;
|
||||
memset(tx_log, 0, sizeof(tx_log));
|
||||
tx_log_len = 0;
|
||||
}
|
||||
|
||||
START_TEST(test_ext_flash_read_timeout_returns_error)
|
||||
{
|
||||
uint8_t data[2] = {0};
|
||||
uint8_t script[11];
|
||||
int ret;
|
||||
|
||||
memset(script, CMD_ACK, 10);
|
||||
script[10] = 0x5a;
|
||||
reset_uart_script(script, sizeof(script));
|
||||
|
||||
ret = ext_flash_read(0x12345678, data, sizeof(data));
|
||||
|
||||
ck_assert_int_eq(ret, -1);
|
||||
ck_assert_uint_eq(data[0], 0x5a);
|
||||
ck_assert_uint_eq(data[1], 0x00);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
Suite *wolfboot_suite(void)
|
||||
{
|
||||
Suite *s = suite_create("wolfBoot");
|
||||
TCase *uart_flash = tcase_create("UART flash");
|
||||
|
||||
tcase_add_test(uart_flash, test_ext_flash_read_timeout_returns_error);
|
||||
tcase_set_timeout(uart_flash, 20);
|
||||
suite_add_tcase(s, uart_flash);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int fails;
|
||||
Suite *s = wolfboot_suite();
|
||||
SRunner *sr = srunner_create(s);
|
||||
srunner_run_all(sr, CK_NORMAL);
|
||||
fails = srunner_ntests_failed(sr);
|
||||
srunner_free(sr);
|
||||
return fails;
|
||||
}
|
||||
Loading…
Reference in New Issue