Remove flaky error_inject_test

pull/11987/head
Seppo Takalo 2019-11-21 14:08:54 +02:00
parent b9eaac4da0
commit 2ddd4069b6
1 changed files with 0 additions and 160 deletions

View File

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