mirror of https://github.com/ARMmbed/mbed-os.git
Remove flaky error_inject_test
parent
b9eaac4da0
commit
2ddd4069b6
|
@ -455,165 +455,6 @@ static void multi_set_test()
|
|||
delete tdbs;
|
||||
}
|
||||
|
||||
static void error_inject_test()
|
||||
{
|
||||
|
||||
#if !defined(TARGET_K64F) && !defined(TARGET_MCU_PSOC6)
|
||||
TEST_SKIP_MESSAGE("Kvstore API tests run only on K64F devices and PSoC 6");
|
||||
#endif
|
||||
|
||||
char *key;
|
||||
uint8_t *get_buf, *set_buf, *exists;
|
||||
size_t key_size = 8;
|
||||
size_t data_size = 16;
|
||||
size_t num_keys = 'Z' - 'A' + 1;
|
||||
size_t num_blocks = 4;
|
||||
size_t block_size = 1024;
|
||||
size_t actual_data_size;
|
||||
int result;
|
||||
uint8_t set_iters = 20;
|
||||
uint8_t i, key_ind;
|
||||
|
||||
key = new char[key_size + 1];
|
||||
get_buf = new uint8_t[data_size];
|
||||
set_buf = new uint8_t[data_size];
|
||||
exists = new uint8_t[num_keys];
|
||||
|
||||
uint8_t *dummy = new (std::nothrow) uint8_t[heap_alloc_threshold_size];
|
||||
TEST_SKIP_UNLESS_MESSAGE(dummy, "Not enough heap to run test");
|
||||
|
||||
// Don't use a non volatile BD here (won't work in this test)
|
||||
HeapBlockDevice bd(num_blocks * block_size, 1, 1, block_size);
|
||||
FlashSimBlockDevice flash_bd(&bd);
|
||||
|
||||
// Erase flash first, as we search the erase value later
|
||||
result = flash_bd.init();
|
||||
TEST_ASSERT_EQUAL_ERROR_CODE(MBED_SUCCESS, result);
|
||||
// We need to skip the test if we don't have enough memory for the heap block device.
|
||||
// However, this device allocates the erase units on the fly, so "erase" it via the flash
|
||||
// simulator. A failure here means we haven't got enough memory.
|
||||
result = flash_bd.erase(0, flash_bd.size());
|
||||
TEST_SKIP_UNLESS_MESSAGE(!result, "Not enough heap to run test");
|
||||
result = flash_bd.deinit();
|
||||
TEST_ASSERT_EQUAL_ERROR_CODE(MBED_SUCCESS, result);
|
||||
|
||||
delete[] dummy;
|
||||
|
||||
TDBStore *tdbs = new TDBStore(&flash_bd);
|
||||
|
||||
result = tdbs->init();
|
||||
TEST_ASSERT_EQUAL_ERROR_CODE(MBED_SUCCESS, result);
|
||||
|
||||
memset(exists, 0, num_keys);
|
||||
|
||||
for (i = 0; i < set_iters; i++) {
|
||||
for (key_ind = 0; key_ind < num_keys; key_ind++) {
|
||||
memset(key, 'A' + key_ind, key_size);
|
||||
key[key_size] = '\0';
|
||||
memset(set_buf, key_ind * i, data_size);
|
||||
if ((key_ind != (num_keys - 1)) && exists[key_ind] && !(rand() % 3)) {
|
||||
result = tdbs->remove(key);
|
||||
exists[key_ind] = 0;
|
||||
} else {
|
||||
result = tdbs->set(key, set_buf, data_size, 0);
|
||||
exists[key_ind] = 1;
|
||||
}
|
||||
TEST_ASSERT_EQUAL_ERROR_CODE(MBED_SUCCESS, result);
|
||||
}
|
||||
}
|
||||
|
||||
for (uint8_t get_iter = 0; get_iter < 2; get_iter++) {
|
||||
for (key_ind = 0; key_ind < num_keys; key_ind++) {
|
||||
memset(key, 'A' + key_ind, key_size);
|
||||
key[key_size] = '\0';
|
||||
if (key_ind == (num_keys - 1)) {
|
||||
// last key will hold the previous version at the second iteration (after being crippled)
|
||||
memset(set_buf, key_ind * (set_iters - get_iter - 1), data_size);
|
||||
} else {
|
||||
memset(set_buf, key_ind * (set_iters - 1), data_size);
|
||||
}
|
||||
result = tdbs->get(key, get_buf, data_size, &actual_data_size);
|
||||
if (exists[key_ind]) {
|
||||
TEST_ASSERT_EQUAL_ERROR_CODE(MBED_SUCCESS, result);
|
||||
TEST_ASSERT_EQUAL(data_size, actual_data_size);
|
||||
TEST_ASSERT_EQUAL_STRING_LEN(set_buf, get_buf, data_size);
|
||||
} else {
|
||||
TEST_ASSERT_EQUAL_ERROR_CODE(MBED_ERROR_ITEM_NOT_FOUND, result);
|
||||
}
|
||||
}
|
||||
|
||||
if (get_iter) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Cripple the last key in both areas
|
||||
uint8_t erase_val = (uint8_t) flash_bd.get_erase_value();
|
||||
uint8_t x;
|
||||
bd_addr_t addr = bd.size();
|
||||
|
||||
for (int area = 1; area >= 0; area--) {
|
||||
int j;
|
||||
bool found = false;
|
||||
|
||||
// look for last non blank
|
||||
while (addr && !found) {
|
||||
addr -= data_size;
|
||||
bd.read(get_buf, addr, data_size);
|
||||
for (j = data_size - 1; j >= 0; j--) {
|
||||
if (get_buf[j] != erase_val) {
|
||||
addr += j;
|
||||
x = get_buf[j] + 1;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Cripple last non blank in area
|
||||
bd.program(&x, addr, 1);
|
||||
addr -= j;
|
||||
|
||||
if ((area == 0) || !addr) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Skip at least one blank erase unit
|
||||
uint32_t num_blanks = 0;
|
||||
memset(set_buf, erase_val, data_size);
|
||||
while (addr && (num_blanks < block_size)) {
|
||||
bd.read(get_buf, addr, data_size);
|
||||
if (memcmp(get_buf, set_buf, data_size)) {
|
||||
num_blanks = 0;
|
||||
} else {
|
||||
num_blanks += data_size;
|
||||
}
|
||||
addr -= data_size;
|
||||
}
|
||||
}
|
||||
|
||||
result = tdbs->get(key, get_buf, data_size, &actual_data_size);
|
||||
TEST_ASSERT_EQUAL_ERROR_CODE(MBED_ERROR_INVALID_DATA_DETECTED, result);
|
||||
|
||||
result = tdbs->deinit();
|
||||
TEST_ASSERT_EQUAL_ERROR_CODE(MBED_SUCCESS, result);
|
||||
|
||||
result = tdbs->init();
|
||||
TEST_ASSERT_EQUAL_ERROR_CODE(MBED_SUCCESS, result);
|
||||
}
|
||||
|
||||
delete[] key;
|
||||
delete[] get_buf;
|
||||
delete[] set_buf;
|
||||
delete[] exists;
|
||||
|
||||
delete tdbs;
|
||||
}
|
||||
|
||||
|
||||
utest::v1::status_t greentea_failure_handler(const Case *const source, const failure_t reason)
|
||||
{
|
||||
greentea_case_failure_abort_handler(source, reason);
|
||||
|
@ -623,7 +464,6 @@ utest::v1::status_t greentea_failure_handler(const Case *const source, const fai
|
|||
Case cases[] = {
|
||||
Case("TDBStore: White box test", white_box_test, greentea_failure_handler),
|
||||
Case("TDBStore: Multiple set test", multi_set_test, greentea_failure_handler),
|
||||
Case("TDBStore: Error inject test", error_inject_test, greentea_failure_handler),
|
||||
};
|
||||
|
||||
utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
|
||||
|
|
Loading…
Reference in New Issue