summaryrefslogtreecommitdiff
path: root/test/flash.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/flash.c')
-rw-r--r--test/flash.c87
1 files changed, 38 insertions, 49 deletions
diff --git a/test/flash.c b/test/flash.c
index c5a9c4ebd1..2bf6ee9925 100644
--- a/test/flash.c
+++ b/test/flash.c
@@ -17,18 +17,13 @@
#include "timer.h"
#include "util.h"
-static int last_write_offset;
-static int last_write_size;
-static char last_write_data[64];
-
-static int last_erase_offset;
-static int last_erase_size;
-
static int mock_wp = -1;
static int mock_flash_op_fail = EC_SUCCESS;
-const char *testdata = "TestData0000000"; /* 16 bytes */
+const char *testdata = "TestData00000000"; /* 16 bytes excluding NULL end */
+
+char flash_recorded_data[128];
#define BOOT_WP_MASK TEST_STATE_MASK(TEST_STATE_STEP_2)
@@ -50,23 +45,9 @@ void host_send_response(struct host_cmd_handler_args *args)
/* Do nothing */
}
-int flash_write(int offset, int size, const char *data)
+int flash_pre_op(void)
{
- if (mock_flash_op_fail != EC_SUCCESS)
- return mock_flash_op_fail;
- last_write_offset = offset;
- last_write_size = size;
- memcpy(last_write_data, data, size);
- return EC_SUCCESS;
-}
-
-int flash_erase(int offset, int size)
-{
- if (mock_flash_op_fail != EC_SUCCESS)
- return mock_flash_op_fail;
- last_erase_offset = offset;
- last_erase_size = size;
- return EC_SUCCESS;
+ return mock_flash_op_fail;
}
int gpio_get_level(enum gpio_signal signal)
@@ -88,23 +69,34 @@ int gpio_get_level(enum gpio_signal signal)
/*****************************************************************************/
/* Test utilities */
-static void begin_verify(void)
+static void record_flash(int offset, int size)
{
- last_write_offset = -1;
- last_write_size = -1;
- last_write_data[0] = '\0';
- last_erase_offset = -1;
- last_erase_size = -1;
+ memcpy(flash_recorded_data, __host_flash + offset, size);
+}
+
+static int verify_flash(int offset, int size)
+{
+ TEST_ASSERT_ARRAY_EQ(flash_recorded_data, __host_flash + offset, size);
+ return EC_SUCCESS;
}
static int verify_write(int offset, int size, const char *data)
{
int i;
- if (offset != last_write_offset || size != last_write_size)
- return EC_ERROR_UNKNOWN;
for (i = 0; i < size; ++i)
- if (data[i] != last_write_data[i])
+ if (__host_flash[offset + i] != data[i])
+ return EC_ERROR_UNKNOWN;
+
+ return EC_SUCCESS;
+}
+
+static int verify_erase(int offset, int size)
+{
+ int i;
+
+ for (i = 0; i < size; ++i)
+ if ((__host_flash[offset + i] & 0xff) != 0xff)
return EC_ERROR_UNKNOWN;
return EC_SUCCESS;
@@ -113,31 +105,28 @@ static int verify_write(int offset, int size, const char *data)
#define VERIFY_NO_WRITE(off, sz, d) \
do { \
- begin_verify(); \
+ record_flash(off, sz); \
TEST_ASSERT(host_command_write(off, sz, d) != EC_SUCCESS); \
- TEST_ASSERT(last_write_offset == -1 && last_write_size == -1); \
+ TEST_ASSERT(verify_flash(off, sz) == EC_SUCCESS); \
} while (0)
#define VERIFY_NO_ERASE(off, sz) \
do { \
- begin_verify(); \
+ record_flash(off, sz); \
TEST_ASSERT(host_command_erase(off, sz) != EC_SUCCESS); \
- TEST_ASSERT(last_erase_offset == -1 && last_erase_size == -1); \
+ TEST_ASSERT(verify_flash(off, sz) == EC_SUCCESS); \
} while (0)
#define VERIFY_WRITE(off, sz, d) \
do { \
- begin_verify(); \
TEST_ASSERT(host_command_write(off, sz, d) == EC_SUCCESS); \
TEST_ASSERT(verify_write(off, sz, d) == EC_SUCCESS); \
} while (0)
#define VERIFY_ERASE(off, sz) \
do { \
- begin_verify(); \
TEST_ASSERT(host_command_erase(off, sz) == EC_SUCCESS); \
- TEST_ASSERT(last_erase_offset == off && \
- last_erase_size == sz); \
+ TEST_ASSERT(verify_erase(off, sz) == EC_SUCCESS); \
} while (0)
#define SET_WP_FLAGS(m, f) \
@@ -288,10 +277,10 @@ static int test_overwrite_current(void)
mock_is_running_img = 1;
#endif
- VERIFY_NO_ERASE(offset, sizeof(testdata));
- VERIFY_NO_ERASE(offset + size - sizeof(testdata), sizeof(testdata));
- VERIFY_NO_WRITE(offset, sizeof(testdata), testdata);
- VERIFY_NO_WRITE(offset + size - sizeof(testdata), sizeof(testdata),
+ VERIFY_NO_ERASE(offset, strlen(testdata));
+ VERIFY_NO_ERASE(offset + size - strlen(testdata), strlen(testdata));
+ VERIFY_NO_WRITE(offset, strlen(testdata), testdata);
+ VERIFY_NO_WRITE(offset + size - strlen(testdata), strlen(testdata),
testdata);
return EC_SUCCESS;
@@ -314,10 +303,10 @@ static int test_overwrite_other(void)
mock_is_running_img = 0;
#endif
- VERIFY_ERASE(offset, sizeof(testdata));
- VERIFY_ERASE(offset + size - sizeof(testdata), sizeof(testdata));
- VERIFY_WRITE(offset, sizeof(testdata), testdata);
- VERIFY_WRITE(offset + size - sizeof(testdata), sizeof(testdata),
+ VERIFY_ERASE(offset, strlen(testdata));
+ VERIFY_ERASE(offset + size - strlen(testdata), strlen(testdata));
+ VERIFY_WRITE(offset, strlen(testdata), testdata);
+ VERIFY_WRITE(offset + size - strlen(testdata), strlen(testdata),
testdata);
return EC_SUCCESS;