Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-os by
add_del.cpp
00001 /* 00002 * mbed Microcontroller Library 00003 * Copyright (c) 2006-2016 ARM Limited 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); 00006 * you may not use this file except in compliance with the License. 00007 * You may obtain a copy of the License at 00008 * 00009 * http://www.apache.org/licenses/LICENSE-2.0 00010 * 00011 * Unless required by applicable law or agreed to in writing, software 00012 * distributed under the License is distributed on an "AS IS" BASIS, 00013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00014 * See the License for the specific language governing permissions and 00015 * limitations under the License. 00016 * 00017 */ 00018 00019 /** @file add_del.cpp Test cases to add and delete key-value pairs in the CFSTORE. 00020 * 00021 * Please consult the documentation under the test-case functions for 00022 * a description of the individual test case. 00023 */ 00024 00025 #include "mbed.h" 00026 #include "cfstore_config.h" 00027 #include "Driver_Common.h" 00028 #include "cfstore_debug.h" 00029 #include "cfstore_test.h" 00030 #include "configuration_store.h" 00031 #include "utest/utest.h" 00032 #include "unity/unity.h" 00033 #include "greentea-client/test_env.h" 00034 #include "cfstore_utest.h" 00035 00036 #ifdef YOTTA_CFG_CFSTORE_UVISOR 00037 #include "uvisor-lib/uvisor-lib.h" 00038 #include "cfstore_uvisor.h" 00039 #endif /* YOTTA_CFG_CFSTORE_UVISOR */ 00040 00041 #include <stdio.h> 00042 #include <stdlib.h> 00043 #include <string.h> 00044 #include <inttypes.h> 00045 00046 using namespace utest::v1; 00047 00048 #define CFSTORE_ADD_DEL_MALLOC_SIZE 1024 00049 00050 static char cfstore_add_del_utest_msg_g[CFSTORE_UTEST_MSG_BUF_SIZE]; 00051 00052 #ifdef YOTTA_CFG_CFSTORE_UVISOR 00053 /* Create the main box ACL list for the application. 00054 * The main ACL gets inherited by all the other boxes 00055 */ 00056 CFSTORE_UVISOR_MAIN_ACL(cfstore_acl_uvisor_box_add_del_g); 00057 00058 /* Enable uVisor. */ 00059 UVISOR_SET_MODE_ACL(UVISOR_ENABLED, cfstore_acl_uvisor_box_add_del_g); 00060 #endif /* YOTTA_CFG_CFSTORE_UVISOR */ 00061 00062 static cfstore_kv_data_t cfstore_add_del_test_07_data[] = { 00063 CFSTORE_INIT_1_TABLE_MID_NODE, 00064 { NULL, NULL}, 00065 }; 00066 00067 00068 /* report whether built/configured for flash sync or async mode */ 00069 static control_t cfstore_add_del_test_00(const size_t call_count) 00070 { 00071 int32_t ret = ARM_DRIVER_ERROR; 00072 00073 (void) call_count; 00074 ret = cfstore_test_startup(); 00075 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to perform test startup (ret=%d).\n", __func__, (int) ret); 00076 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00077 return CaseNext; 00078 } 00079 00080 /** @brief 00081 * 00082 * This test case does the following: 00083 * - creates a KV. 00084 * - deletes the KV. 00085 * - checks that the deleted KV can no longer be found in the store. 00086 * 00087 * @return on success returns CaseNext to continue to next test case, otherwise will assert on errors. 00088 */ 00089 control_t cfstore_add_del_test_01_end(const size_t call_count) 00090 { 00091 bool bfound = false; 00092 int32_t ret = ARM_DRIVER_ERROR; 00093 ARM_CFSTORE_SIZE len = 0; 00094 ARM_CFSTORE_DRIVER* drv = &cfstore_driver; 00095 ARM_CFSTORE_KEYDESC kdesc; 00096 ARM_CFSTORE_HANDLE_INIT(hkey); 00097 ARM_CFSTORE_FMODE flags; 00098 00099 CFSTORE_FENTRYLOG("%s:entered\n", __func__); 00100 (void) call_count; 00101 memset(&kdesc, 0, sizeof(kdesc)); 00102 memset(&flags, 0, sizeof(flags)); 00103 00104 kdesc.drl = ARM_RETENTION_WHILE_DEVICE_ACTIVE; 00105 len = strlen(cfstore_add_del_test_07_data[0].value); 00106 00107 ret = cfstore_test_create(cfstore_add_del_test_07_data[0].key_name, (char*) cfstore_add_del_test_07_data[0].value, &len, &kdesc); 00108 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to create KV in store (ret=%d).\n", __func__, (int) ret); 00109 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00110 00111 /* now delete KV*/ 00112 ret = drv->Open(cfstore_add_del_test_07_data[0].key_name, flags, hkey); 00113 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to Open() (ret=%d).\n", __func__, (int) ret); 00114 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00115 00116 if(hkey != NULL){ 00117 ret = drv->Delete(hkey); 00118 drv->Close(hkey); 00119 hkey = NULL; 00120 } 00121 /* check that the KV has been deleted */ 00122 /* revert to CFSTORE_LOG if more trace required */ 00123 CFSTORE_DBGLOG("LOG: WARNING: About to look for non-existent key (key_name=%s) (which will generate internal trace reporting errors if debug trace enabled).\n", cfstore_add_del_test_07_data[0].key_name); 00124 ret = cfstore_test_kv_is_found(cfstore_add_del_test_07_data[0].key_name, &bfound); 00125 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error failed to delete a key (ret=%d).\n", __func__, (int) ret); 00126 TEST_ASSERT_MESSAGE(ret == ARM_CFSTORE_DRIVER_ERROR_KEY_NOT_FOUND, cfstore_add_del_utest_msg_g); 00127 00128 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Test failed: found KV that was previously deleted (key_name=%s)\n", __func__, cfstore_add_del_test_07_data[0].key_name); 00129 TEST_ASSERT_MESSAGE(bfound == false, cfstore_add_del_utest_msg_g); 00130 00131 ret = drv->Uninitialize(); 00132 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: Uninitialize() call failed.\n", __func__); 00133 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00134 return CaseNext; 00135 } 00136 00137 00138 static cfstore_kv_data_t cfstore_add_del_test_08_data[] = { 00139 CFSTORE_INIT_1_TABLE_HEAD, 00140 CFSTORE_INIT_1_TABLE_MID_NODE, 00141 CFSTORE_INIT_1_TABLE_TAIL, 00142 { NULL, NULL}, 00143 }; 00144 00145 00146 /** @brief 00147 * 00148 * This test case adds a small number of KVs (~3), and then delete them. 00149 * - add key(s) 00150 * - delete key(s) 00151 * - make sure can't find key in cfstore 00152 * - loop over the above a number of times. 00153 * 00154 * @return on success returns CaseNext to continue to next test case, otherwise will assert on errors. 00155 */ 00156 control_t cfstore_add_del_test_02_end(const size_t call_count) 00157 { 00158 bool bResult = true; // We'll do "&=" cumulative checking. 00159 int32_t ret = ARM_DRIVER_ERROR; 00160 ARM_CFSTORE_SIZE len = 0; 00161 ARM_CFSTORE_KEYDESC kdesc; 00162 cfstore_kv_data_t* node = NULL; 00163 ARM_CFSTORE_DRIVER* drv = &cfstore_driver; 00164 00165 CFSTORE_FENTRYLOG("%s:entered\n", __func__); 00166 (void) call_count; 00167 memset(&kdesc, 0, sizeof(kdesc)); 00168 00169 /* create */ 00170 kdesc.drl = ARM_RETENTION_WHILE_DEVICE_ACTIVE; 00171 node = cfstore_add_del_test_08_data; 00172 while(node->key_name != NULL) 00173 { 00174 len = strlen(node->value); 00175 ret = cfstore_test_create(node->key_name, (char*) node->value, &len, &kdesc); 00176 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to create kv (key_name=%s.\n", __func__, node->key_name); 00177 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00178 /* revert CFSTORE_LOG for more trace */ 00179 CFSTORE_DBGLOG("Created KV successfully (key_name=\"%s\", value=\"%s\")\n", node->key_name, node->value); 00180 node++; 00181 } 00182 00183 /* test delete all */ 00184 ret = cfstore_test_delete_all(); 00185 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to delete all KVs.\n", __func__); 00186 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00187 00188 /* check there are no KVs present as expected */ 00189 node = cfstore_add_del_test_08_data; 00190 while(node->key_name != NULL) 00191 { 00192 ret = cfstore_test_kv_is_found(node->key_name, &bResult); 00193 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: found key when should not be present.\n", __func__); 00194 TEST_ASSERT_MESSAGE(ret == ARM_CFSTORE_DRIVER_ERROR_KEY_NOT_FOUND && bResult == false, cfstore_add_del_utest_msg_g); 00195 /* revert CFSTORE_LOG for more trace */ 00196 CFSTORE_DBGLOG("Found KV successfully (key_name=\"%s\")\n", node->key_name); 00197 node++; 00198 } 00199 ret = drv->Uninitialize(); 00200 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: Uninitialize() call failed.\n", __func__); 00201 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00202 return CaseNext; 00203 } 00204 00205 /** @brief 00206 * 00207 * This test case adds ~50 KVs, and then delete entries at the start, 00208 * middle and end of list. 00209 * 00210 * @return on success returns CaseNext to continue to next test case, otherwise will assert on errors. 00211 */ 00212 control_t cfstore_add_del_test_03_end(const size_t call_count) 00213 { 00214 bool bfound = false; 00215 int32_t ret = ARM_DRIVER_ERROR; 00216 ARM_CFSTORE_FMODE flags; 00217 cfstore_kv_data_t *node; 00218 ARM_CFSTORE_DRIVER* drv = &cfstore_driver; 00219 00220 CFSTORE_FENTRYLOG("%s:entered\n", __func__); 00221 (void) call_count; 00222 memset(&flags, 0, sizeof(flags)); 00223 00224 ret = cfstore_test_init_1(); 00225 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to initialise cfstore area with entries\n", __func__); 00226 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00227 00228 /* delete some keys */ 00229 node = cfstore_add_del_test_08_data; 00230 while(node->key_name != NULL) 00231 { 00232 CFSTORE_DBGLOG("%s:about to delete key (key_name=%s).\n", __func__, node->key_name); 00233 cfstore_test_delete(node->key_name); 00234 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error failed to delete a key (ret=%d).\n", __func__, (int) ret); 00235 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00236 /* revert CFSTORE_LOG for more trace */ 00237 CFSTORE_DBGLOG("Deleted KV successfully (key_name=\"%s\")\n", node->key_name); 00238 node++; 00239 } 00240 /* check the keys have been deleted */ 00241 node = cfstore_add_del_test_08_data; 00242 while(node->key_name != NULL) 00243 { 00244 ret = cfstore_test_kv_is_found(node->key_name, &bfound); 00245 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to delete a key (ret=%d).\n", __func__, (int) ret); 00246 TEST_ASSERT_MESSAGE(ret == ARM_CFSTORE_DRIVER_ERROR_KEY_NOT_FOUND, cfstore_add_del_utest_msg_g); 00247 00248 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Test failed: found KV that was previously deleted (key_name=%s)\n", __func__, node->key_name); 00249 TEST_ASSERT_MESSAGE(bfound == false, cfstore_add_del_utest_msg_g); 00250 node++; 00251 } 00252 00253 /* clean up by deleting all remaining KVs. this is not part of the test */ 00254 ret = cfstore_test_delete_all(); 00255 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error failed to delete a all KVs (ret=%d).\n", __func__, (int) ret); 00256 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00257 00258 ret = drv->Uninitialize(); 00259 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to initialize CFSTORE (ret=%d)\n", __func__, (int) ret); 00260 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00261 return CaseNext; 00262 } 00263 00264 00265 /** @brief 00266 * 00267 * This test case is as per test_03 but using delete_all() on all init_1 data. 00268 * This test case is yet to be implemented. 00269 * 00270 * @return on success returns CaseNext to continue to next test case, otherwise will assert on errors. 00271 */ 00272 control_t cfstore_add_del_test_04(const size_t call_count) 00273 { 00274 (void) call_count; 00275 /*todo: implement test */ 00276 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Warn: Not implemented\n", __func__); 00277 CFSTORE_DBGLOG("%s: WARN: requires implementation\n", __func__); 00278 TEST_ASSERT_MESSAGE(true, cfstore_add_del_utest_msg_g); 00279 return CaseNext; 00280 } 00281 00282 /** @brief Delete an attribute after an internal realloc of the cfstore memory area 00283 * 00284 * This test case goes through the following steps: 00285 * 1. Creates attribute att_1 of size x, and write some data. This causes an internal 00286 * cfstore realloc to allocate heap memory for the attribute. 00287 * 2. Allocates some memory on the heap. Typically, this will be immediately after the 00288 * memory used by cfstore for the KV area. This means that if any cfstore reallocs are 00289 * made to increase size the memory area will have to move. 00290 * 3. Creates attribute att_2 of size y. This causes an internal cfstore realloc to move 00291 * the KV memory area to a new location. 00292 * 4. Delete att_1. This causes an internal realloc to shrink the area and tests that the 00293 * internal data structures that contain pointers to different parts of the KV area 00294 * are updated correctly. 00295 * 5. Allocates some memory on the heap. If the heap has been corrupted, this will likely trigger 00296 * a crash 00297 * 00298 * @return on success returns CaseNext to continue to next test case, otherwise will assert on errors. 00299 */ 00300 control_t cfstore_add_del_test_05_end(const size_t call_count) 00301 { 00302 char data[] = "some test data"; 00303 char filename[] = "file1"; 00304 char filename2[] = "file2"; 00305 int32_t ret = ARM_DRIVER_ERROR; 00306 void *test_buf1 = NULL; 00307 void *test_buf2 = NULL; 00308 ARM_CFSTORE_DRIVER *cfstoreDriver = &cfstore_driver; 00309 ARM_CFSTORE_KEYDESC keyDesc1; 00310 ARM_CFSTORE_HANDLE_INIT(hkey1); 00311 ARM_CFSTORE_KEYDESC keyDesc2; 00312 ARM_CFSTORE_HANDLE_INIT(hkey2); 00313 ARM_CFSTORE_SIZE count = sizeof(data); 00314 00315 CFSTORE_FENTRYLOG("%s:entered\n", __func__); 00316 (void) call_count; 00317 00318 /* step 1 */ 00319 memset(&keyDesc1, 0, sizeof(keyDesc1)); 00320 keyDesc1.drl = ARM_RETENTION_NVM; 00321 keyDesc1.flags.read = true; 00322 keyDesc1.flags.write = true; 00323 ret = cfstoreDriver->Create(filename, 1024, &keyDesc1, hkey1); 00324 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to create attribute 1 (ret=%d)\n", __func__, (int) ret); 00325 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00326 00327 /* Write data to file */ 00328 ret = cfstoreDriver->Write(hkey1, (const char *)data, &count); 00329 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to write to attribute 1 (ret=%d)\n", __func__, (int) ret); 00330 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00331 00332 /* step 2 */ 00333 test_buf1 = malloc(CFSTORE_ADD_DEL_MALLOC_SIZE); 00334 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to allocate memory (test_buf1=%p)\n", __func__, test_buf1); 00335 TEST_ASSERT_MESSAGE(test_buf1 != NULL, cfstore_add_del_utest_msg_g); 00336 00337 /* step 3 */ 00338 memset(&keyDesc2, 0, sizeof(keyDesc2)); 00339 keyDesc2.drl = ARM_RETENTION_NVM; 00340 keyDesc2.flags.read = true; 00341 keyDesc2.flags.write = true; 00342 ret = cfstoreDriver->Create(filename2, 1024, &keyDesc2, hkey2); 00343 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to create attribute 2 (ret=%d)\n", __func__, (int) ret); 00344 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00345 00346 /* Write data to file */ 00347 count = sizeof(data); 00348 ret = cfstoreDriver->Write(hkey2, (const char *)data, &count); 00349 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to write to attribute 2 (ret=%d)\n", __func__, (int) ret); 00350 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00351 00352 /* step 4 */ 00353 ret = cfstoreDriver->Delete(hkey1); 00354 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to delete to attribute 1 (ret=%d)\n", __func__, (int) ret); 00355 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00356 00357 ret = cfstoreDriver->Close(hkey1); 00358 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to close to attribute 1 (ret=%d)\n", __func__, (int) ret); 00359 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00360 00361 /* step 5 */ 00362 test_buf2 = malloc(CFSTORE_ADD_DEL_MALLOC_SIZE); 00363 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to allocate memory (test_buf2=%p)\n", __func__, test_buf2); 00364 TEST_ASSERT_MESSAGE(test_buf2 != NULL, cfstore_add_del_utest_msg_g); 00365 00366 /* clean up */ 00367 ret = cfstoreDriver->Close(hkey2); 00368 CFSTORE_TEST_UTEST_MESSAGE(cfstore_add_del_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to close to attribute 2 (ret=%d)\n", __func__, (int) ret); 00369 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_add_del_utest_msg_g); 00370 free(test_buf2); 00371 free(test_buf1); 00372 00373 return CaseNext; 00374 } 00375 00376 /// @cond CFSTORE_DOXYGEN_DISABLE 00377 utest::v1::status_t greentea_setup(const size_t number_of_cases) 00378 { 00379 GREENTEA_SETUP(300, "default_auto"); 00380 return greentea_test_setup_handler(number_of_cases); 00381 } 00382 00383 Case cases[] = { 00384 /* 1 2 3 4 5 6 7 */ 00385 /* 1234567890123456789012345678901234567890123456789012345678901234567890 */ 00386 Case("ADD_DEL_test_00", cfstore_add_del_test_00), 00387 Case("ADD_DEL_test_01_start", cfstore_utest_default_start), 00388 Case("ADD_DEL_test_01_end", cfstore_add_del_test_01_end), 00389 Case("ADD_DEL_test_02_start", cfstore_utest_default_start), 00390 Case("ADD_DEL_test_02_end", cfstore_add_del_test_02_end), 00391 Case("ADD_DEL_test_03_start", cfstore_utest_default_start), 00392 Case("ADD_DEL_test_03_end", cfstore_add_del_test_03_end), 00393 Case("ADD_DEL_test_04", cfstore_add_del_test_04), 00394 Case("ADD_DEL_test_05_start", cfstore_utest_default_start), 00395 Case("ADD_DEL_test_05_end", cfstore_add_del_test_05_end), 00396 }; 00397 00398 00399 /* Declare your test specification with a custom setup handler */ 00400 Specification specification(greentea_setup, cases); 00401 00402 int main() 00403 { 00404 return !Harness::run(specification); 00405 } 00406 /// @endcond
Generated on Tue Jul 12 2022 13:15:13 by
