@@ -455,165 +455,6 @@ static void multi_set_test()
455455 delete tdbs;
456456}
457457
458- static void error_inject_test ()
459- {
460-
461- #if !defined(TARGET_K64F) && !defined(TARGET_MCU_PSOC6)
462- TEST_SKIP_MESSAGE (" Kvstore API tests run only on K64F devices and PSoC 6" );
463- #endif
464-
465- char *key;
466- uint8_t *get_buf, *set_buf, *exists;
467- size_t key_size = 8 ;
468- size_t data_size = 16 ;
469- size_t num_keys = ' Z' - ' A' + 1 ;
470- size_t num_blocks = 4 ;
471- size_t block_size = 1024 ;
472- size_t actual_data_size;
473- int result;
474- uint8_t set_iters = 20 ;
475- uint8_t i, key_ind;
476-
477- key = new char [key_size + 1 ];
478- get_buf = new uint8_t [data_size];
479- set_buf = new uint8_t [data_size];
480- exists = new uint8_t [num_keys];
481-
482- uint8_t *dummy = new (std::nothrow) uint8_t [heap_alloc_threshold_size];
483- TEST_SKIP_UNLESS_MESSAGE (dummy, " Not enough heap to run test" );
484-
485- // Don't use a non volatile BD here (won't work in this test)
486- HeapBlockDevice bd (num_blocks * block_size, 1 , 1 , block_size);
487- FlashSimBlockDevice flash_bd (&bd);
488-
489- // Erase flash first, as we search the erase value later
490- result = flash_bd.init ();
491- TEST_ASSERT_EQUAL_ERROR_CODE (MBED_SUCCESS, result);
492- // We need to skip the test if we don't have enough memory for the heap block device.
493- // However, this device allocates the erase units on the fly, so "erase" it via the flash
494- // simulator. A failure here means we haven't got enough memory.
495- result = flash_bd.erase (0 , flash_bd.size ());
496- TEST_SKIP_UNLESS_MESSAGE (!result, " Not enough heap to run test" );
497- result = flash_bd.deinit ();
498- TEST_ASSERT_EQUAL_ERROR_CODE (MBED_SUCCESS, result);
499-
500- delete[] dummy;
501-
502- TDBStore *tdbs = new TDBStore (&flash_bd);
503-
504- result = tdbs->init ();
505- TEST_ASSERT_EQUAL_ERROR_CODE (MBED_SUCCESS, result);
506-
507- memset (exists, 0 , num_keys);
508-
509- for (i = 0 ; i < set_iters; i++) {
510- for (key_ind = 0 ; key_ind < num_keys; key_ind++) {
511- memset (key, ' A' + key_ind, key_size);
512- key[key_size] = ' \0 ' ;
513- memset (set_buf, key_ind * i, data_size);
514- if ((key_ind != (num_keys - 1 )) && exists[key_ind] && !(rand () % 3 )) {
515- result = tdbs->remove (key);
516- exists[key_ind] = 0 ;
517- } else {
518- result = tdbs->set (key, set_buf, data_size, 0 );
519- exists[key_ind] = 1 ;
520- }
521- TEST_ASSERT_EQUAL_ERROR_CODE (MBED_SUCCESS, result);
522- }
523- }
524-
525- for (uint8_t get_iter = 0 ; get_iter < 2 ; get_iter++) {
526- for (key_ind = 0 ; key_ind < num_keys; key_ind++) {
527- memset (key, ' A' + key_ind, key_size);
528- key[key_size] = ' \0 ' ;
529- if (key_ind == (num_keys - 1 )) {
530- // last key will hold the previous version at the second iteration (after being crippled)
531- memset (set_buf, key_ind * (set_iters - get_iter - 1 ), data_size);
532- } else {
533- memset (set_buf, key_ind * (set_iters - 1 ), data_size);
534- }
535- result = tdbs->get (key, get_buf, data_size, &actual_data_size);
536- if (exists[key_ind]) {
537- TEST_ASSERT_EQUAL_ERROR_CODE (MBED_SUCCESS, result);
538- TEST_ASSERT_EQUAL (data_size, actual_data_size);
539- TEST_ASSERT_EQUAL_STRING_LEN (set_buf, get_buf, data_size);
540- } else {
541- TEST_ASSERT_EQUAL_ERROR_CODE (MBED_ERROR_ITEM_NOT_FOUND, result);
542- }
543- }
544-
545- if (get_iter) {
546- break ;
547- }
548-
549- // Cripple the last key in both areas
550- uint8_t erase_val = (uint8_t ) flash_bd.get_erase_value ();
551- uint8_t x;
552- bd_addr_t addr = bd.size ();
553-
554- for (int area = 1 ; area >= 0 ; area--) {
555- int j;
556- bool found = false ;
557-
558- // look for last non blank
559- while (addr && !found) {
560- addr -= data_size;
561- bd.read (get_buf, addr, data_size);
562- for (j = data_size - 1 ; j >= 0 ; j--) {
563- if (get_buf[j] != erase_val) {
564- addr += j;
565- x = get_buf[j] + 1 ;
566- found = true ;
567- break ;
568- }
569- }
570- }
571-
572- if (!found) {
573- break ;
574- }
575-
576- // Cripple last non blank in area
577- bd.program (&x, addr, 1 );
578- addr -= j;
579-
580- if ((area == 0 ) || !addr) {
581- break ;
582- }
583-
584- // Skip at least one blank erase unit
585- uint32_t num_blanks = 0 ;
586- memset (set_buf, erase_val, data_size);
587- while (addr && (num_blanks < block_size)) {
588- bd.read (get_buf, addr, data_size);
589- if (memcmp (get_buf, set_buf, data_size)) {
590- num_blanks = 0 ;
591- } else {
592- num_blanks += data_size;
593- }
594- addr -= data_size;
595- }
596- }
597-
598- result = tdbs->get (key, get_buf, data_size, &actual_data_size);
599- TEST_ASSERT_EQUAL_ERROR_CODE (MBED_ERROR_INVALID_DATA_DETECTED, result);
600-
601- result = tdbs->deinit ();
602- TEST_ASSERT_EQUAL_ERROR_CODE (MBED_SUCCESS, result);
603-
604- result = tdbs->init ();
605- TEST_ASSERT_EQUAL_ERROR_CODE (MBED_SUCCESS, result);
606- }
607-
608- delete[] key;
609- delete[] get_buf;
610- delete[] set_buf;
611- delete[] exists;
612-
613- delete tdbs;
614- }
615-
616-
617458utest::v1::status_t greentea_failure_handler (const Case *const source, const failure_t reason)
618459{
619460 greentea_case_failure_abort_handler (source, reason);
@@ -623,7 +464,6 @@ utest::v1::status_t greentea_failure_handler(const Case *const source, const fai
623464Case cases[] = {
624465 Case (" TDBStore: White box test" , white_box_test, greentea_failure_handler),
625466 Case (" TDBStore: Multiple set test" , multi_set_test, greentea_failure_handler),
626- Case (" TDBStore: Error inject test" , error_inject_test, greentea_failure_handler),
627467};
628468
629469utest::v1::status_t greentea_test_setup (const size_t number_of_cases)
0 commit comments