Marco Zecchini
/
Example_RTOS
Rtos API example
Embed:
(wiki syntax)
Show/hide line numbers
flush3.cpp
Go to the documentation of this file.
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 /** @file flush3.cpp Test cases to flush KVs in the CFSTORE using the drv->Flush() interface. 00019 * 00020 * Please consult the documentation under the test-case functions for 00021 * a description of the individual test case. 00022 * 00023 * CFSTORE flash-journal sync mode test for github issue Heap Corruption by Jenia Kogan: 00024 * https://github.com/ARMmbed/configuration-store/issues/17 00025 * No evidence of heap corruption has been found but the test case put together to 00026 * investiage that problem did result in a bug being found, that being that 00027 * when the last attribute was deleted from CFSTORE, this was not properly committed to 00028 * flash, so that CFSTORE was re-initialised, the old attribute was read back from 00029 * flash into the store. This has now been fixed. 00030 */ 00031 00032 #include "mbed.h" 00033 #include "cfstore_config.h" 00034 #include "Driver_Common.h" 00035 #include "cfstore_debug.h" 00036 #include "cfstore_test.h" 00037 #include "configuration_store.h" 00038 #include "utest/utest.h" 00039 #include "unity/unity.h" 00040 #include "greentea-client/test_env.h" 00041 00042 #ifdef YOTTA_CFG_CFSTORE_UVISOR 00043 #include "uvisor-lib/uvisor-lib.h" 00044 #include "cfstore_uvisor.h" 00045 #endif /* YOTTA_CFG_CFSTORE_UVISOR */ 00046 00047 #include <stdio.h> 00048 #include <stdlib.h> 00049 #include <string.h> 00050 #include <inttypes.h> 00051 00052 using namespace utest::v1; 00053 00054 static char cfstore_flush3_utest_msg_g[CFSTORE_UTEST_MSG_BUF_SIZE]; 00055 00056 #ifdef YOTTA_CFG_CFSTORE_UVISOR 00057 /* Create the main box ACL list for the application. 00058 * The main ACL gets inherited by all the other boxes 00059 */ 00060 CFSTORE_UVISOR_MAIN_ACL(cfstore_acl_uvisor_box_flush3_g); 00061 00062 /* Enable uVisor. */ 00063 UVISOR_SET_MODE_ACL(UVISOR_ENABLED, cfstore_acl_uvisor_box_flush3_g); 00064 #endif /* YOTTA_CFG_CFSTORE_UVISOR */ 00065 00066 /// @cond CFSTORE_DOXYGEN_DISABLE 00067 #ifdef CFSTORE_DEBUG 00068 #define CFSTORE_FLUSH3_GREENTEA_TIMEOUT_S 1000 00069 #else 00070 #define CFSTORE_FLUSH3_GREENTEA_TIMEOUT_S 100 00071 #endif 00072 /// @endcond 00073 00074 /* used for sync mode build only */ 00075 #if defined STORAGE_DRIVER_CONFIG_HARDWARE_MTD_ASYNC_OPS && STORAGE_DRIVER_CONFIG_HARDWARE_MTD_ASYNC_OPS==0 00076 00077 #define CFSTORE_UNUSED_PARAM(param) (void)(param) 00078 00079 int32_t cfstore_flush3_end(void) 00080 { 00081 int32_t cfsStatus; 00082 ARM_CFSTORE_DRIVER *cfstoreDriver = &cfstore_driver; 00083 00084 CFSTORE_DBGLOG("%s:IN\n", __func__); 00085 cfsStatus = cfstoreDriver->Uninitialize(); 00086 if(cfsStatus < ARM_DRIVER_OK){ 00087 CFSTORE_DBGLOG("CFStore Finalization failed (err %ld)\n", cfsStatus); 00088 return ARM_DRIVER_ERROR; 00089 } 00090 CFSTORE_DBGLOG("%s:OUT:returning ARM_DRIVER_OK\n", __func__); 00091 return ARM_DRIVER_OK; 00092 } 00093 00094 00095 int32_t cfstore_flush3_delete_file(const char *fileDir, size_t maxFilePathSize, const char *fileName) 00096 { 00097 int32_t cfsStatus; 00098 int32_t status = ARM_DRIVER_OK; 00099 00100 ARM_CFSTORE_DRIVER *cfstoreDriver = &cfstore_driver; 00101 ARM_CFSTORE_FMODE flags; 00102 ARM_CFSTORE_HANDLE_INIT(hkey); 00103 00104 CFSTORE_DBGLOG("%s:IN. File name %s\n", __func__, fileName); 00105 00106 CFSTORE_UNUSED_PARAM(fileDir); 00107 CFSTORE_UNUSED_PARAM(maxFilePathSize); 00108 00109 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Uninitialize Cfstore\n", __func__); 00110 TEST_ASSERT_MESSAGE(cfstoreDriver != NULL, cfstore_flush3_utest_msg_g); 00111 00112 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Invalid file name\n", __func__); 00113 TEST_ASSERT_MESSAGE(fileName != NULL, cfstore_flush3_utest_msg_g); 00114 00115 memset(&flags, 0, sizeof(flags)); 00116 flags.write = true; 00117 cfsStatus = cfstoreDriver->Open(fileName, flags, hkey); 00118 if (cfsStatus == ARM_CFSTORE_DRIVER_ERROR_KEY_NOT_FOUND) { 00119 /* printf added: modification to original code supplied by Jenia Kogan. */ 00120 CFSTORE_DBGLOG("%s: cfsStatus == ARM_CFSTORE_DRIVER_ERROR_KEY_NOT_FOUND. returning success\n", __func__); 00121 return ARM_DRIVER_OK; 00122 } 00123 if(cfsStatus < ARM_DRIVER_OK){ 00124 CFSTORE_DBGLOG("Open failed (err %ld)\n", cfsStatus); 00125 return ARM_DRIVER_ERROR; 00126 } 00127 cfsStatus = cfstoreDriver->Delete(hkey); 00128 if(cfsStatus < ARM_DRIVER_OK){ 00129 CFSTORE_DBGLOG("Failed deleting (%s) failed (err %ld)\n", fileName, cfsStatus); 00130 status = ARM_DRIVER_ERROR; 00131 goto out; 00132 } 00133 out: 00134 cfsStatus = cfstoreDriver->Close(hkey); 00135 if(cfsStatus < ARM_DRIVER_OK){ 00136 CFSTORE_DBGLOG("Close failed (err %ld)\n", cfsStatus); 00137 return ARM_DRIVER_ERROR; 00138 } 00139 /* Flash-to-flash only on success */ 00140 if (status == ARM_DRIVER_OK) { 00141 cfsStatus = cfstoreDriver->Flush(); 00142 if(cfsStatus < ARM_DRIVER_OK){ 00143 CFSTORE_DBGLOG("Flush to flash failed (err %ld)\n", cfsStatus); 00144 return ARM_DRIVER_ERROR; 00145 } 00146 } 00147 CFSTORE_DBGLOG("%s:OUT: status=%d\n", __func__, (int) status); 00148 return status; 00149 } 00150 00151 00152 int32_t cfstore_flush3_read_file(const char *fileDir, size_t maxFilePathSize, const char *fileName, uint8_t *buff, size_t buffSize) 00153 { 00154 int32_t cfsStatus; 00155 int32_t status = ARM_DRIVER_OK; 00156 00157 ARM_CFSTORE_DRIVER *cfstoreDriver = &cfstore_driver; 00158 ARM_CFSTORE_FMODE flags; 00159 ARM_CFSTORE_SIZE readCount = buffSize; 00160 ARM_CFSTORE_HANDLE_INIT(hkey); 00161 00162 CFSTORE_DBGLOG("%s:IN. File name %s, buffer %p, buffsize %d\n", __func__, fileName, buff, buffSize); 00163 00164 CFSTORE_UNUSED_PARAM(fileDir); 00165 CFSTORE_UNUSED_PARAM(maxFilePathSize); 00166 00167 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Uninitialize Cfstore\n", __func__); 00168 TEST_ASSERT_MESSAGE(cfstoreDriver != NULL, cfstore_flush3_utest_msg_g); 00169 00170 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Invalid file name\n", __func__); 00171 TEST_ASSERT_MESSAGE(fileName != NULL, cfstore_flush3_utest_msg_g); 00172 00173 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Invalid buff\n", __func__); 00174 TEST_ASSERT_MESSAGE(buff != NULL, cfstore_flush3_utest_msg_g); 00175 00176 memset(&flags, 0, sizeof(flags)); 00177 flags.read = true; 00178 00179 cfsStatus = cfstoreDriver->Open(fileName, flags, hkey); 00180 if(cfsStatus == ARM_CFSTORE_DRIVER_ERROR_KEY_NOT_FOUND){ 00181 CFSTORE_DBGLOG("File (%s) not found (err %ld)\n", fileName, cfsStatus); 00182 return ARM_CFSTORE_DRIVER_ERROR_KEY_NOT_FOUND; 00183 00184 } 00185 if(cfsStatus < ARM_DRIVER_OK){ 00186 CFSTORE_DBGLOG("Open failed (err %ld)\n", cfsStatus); 00187 return ARM_DRIVER_ERROR; 00188 } 00189 cfsStatus = cfstoreDriver->Read(hkey, buff, &readCount); 00190 if(cfsStatus < ARM_DRIVER_OK){ 00191 CFSTORE_DBGLOG("Read failed (err %ld)\n", cfsStatus); 00192 status = ARM_DRIVER_ERROR; 00193 goto out; 00194 } 00195 if(readCount < buffSize){ 00196 CFSTORE_DBGLOG("Read failed, amount is %zu while requested %zu\n", readCount, buffSize); 00197 status = ARM_DRIVER_ERROR; 00198 goto out; 00199 } 00200 out: 00201 cfsStatus = cfstoreDriver->Close(hkey); 00202 if(cfsStatus < ARM_DRIVER_OK){ 00203 CFSTORE_DBGLOG("Close failed (err %ld)\n", cfsStatus); 00204 return ARM_DRIVER_ERROR; 00205 } 00206 CFSTORE_DBGLOG("%s:OUT: status=%d\n", __func__, (int) status); 00207 return status; 00208 } 00209 00210 int32_t cfstore_flush3_write_file(const char *fileDir, size_t maxFilePathSize, const char *fileName, const uint8_t *buff, size_t buffSize) 00211 { 00212 int32_t cfsStatus; 00213 int32_t status = ARM_DRIVER_ERROR; 00214 00215 ARM_CFSTORE_DRIVER *cfstoreDriver = &cfstore_driver; 00216 ARM_CFSTORE_SIZE writeCount = buffSize; 00217 ARM_CFSTORE_KEYDESC keyDesc; 00218 ARM_CFSTORE_HANDLE_INIT(hkey); 00219 00220 CFSTORE_DBGLOG("%s:IN. File name %s, buffer %p, buffsize %d\n", __func__, fileName, buff, buffSize); 00221 00222 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Uninitialize Cfstore\n", __func__); 00223 TEST_ASSERT_MESSAGE(cfstoreDriver != NULL, cfstore_flush3_utest_msg_g); 00224 00225 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Invalid file name\n", __func__); 00226 TEST_ASSERT_MESSAGE(fileName != NULL, cfstore_flush3_utest_msg_g); 00227 00228 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Invalid buff\n", __func__); 00229 TEST_ASSERT_MESSAGE(buff != NULL, cfstore_flush3_utest_msg_g); 00230 00231 /* We always deleting the old file and recreating a new one to preserve simplicity */ 00232 CFSTORE_DBGLOG("Before delete%s", "\n"); 00233 00234 /* Delete the old file */ 00235 status = cfstore_flush3_delete_file(fileDir, maxFilePathSize, fileName); 00236 if(status != ARM_DRIVER_OK){ 00237 CFSTORE_DBGLOG("Failed deleting (%s)\n", fileName); 00238 return status; 00239 } 00240 00241 CFSTORE_DBGLOG("After delete%s", "\n"); 00242 /* Create a new file */ 00243 memset(&keyDesc, 0, sizeof(keyDesc)); 00244 keyDesc.drl = ARM_RETENTION_NVM; 00245 keyDesc.flags.read = true; 00246 keyDesc.flags.write = true; 00247 cfsStatus = cfstoreDriver->Create(fileName, buffSize, &keyDesc, hkey); 00248 if(cfsStatus < ARM_DRIVER_OK){ 00249 CFSTORE_DBGLOG("Fail creating (%s) key-store (%ld)\n", fileName, cfsStatus); 00250 return ARM_DRIVER_ERROR; 00251 } 00252 CFSTORE_DBGLOG("After create%s", "\n"); 00253 cfsStatus = cfstoreDriver->Write(hkey, (const char *)buff, &writeCount); 00254 if(cfsStatus < ARM_DRIVER_OK){ 00255 CFSTORE_DBGLOG("Write failed (err %ld)\n", cfsStatus); 00256 status = ARM_DRIVER_ERROR; 00257 goto out; 00258 } 00259 if(writeCount != buffSize){ 00260 CFSTORE_DBGLOG("Write failed, amount is %d while requested is %d\n", (int)writeCount, (int)buffSize); 00261 status = ARM_DRIVER_ERROR; 00262 goto out; 00263 } 00264 CFSTORE_DBGLOG("After write%s", "\n"); 00265 out: 00266 cfsStatus = cfstoreDriver->Close(hkey); 00267 if(cfsStatus < ARM_DRIVER_OK){ 00268 CFSTORE_DBGLOG("Close failed (err %ld)\n", cfsStatus); 00269 return ARM_DRIVER_ERROR; 00270 } 00271 CFSTORE_DBGLOG("After close%s", "\n"); 00272 /* Flash-to-flash only on success */ 00273 if (status == ARM_DRIVER_OK) { 00274 cfsStatus = cfstoreDriver->Flush(); 00275 if(cfsStatus < ARM_DRIVER_OK){ 00276 CFSTORE_DBGLOG("Flush to flash failed(err %ld)\n", cfsStatus); 00277 return ARM_DRIVER_ERROR; 00278 } 00279 CFSTORE_DBGLOG("After flush%s", "\n"); 00280 } 00281 CFSTORE_DBGLOG("%s:OUT: status=%d\n", __func__, (int) status); 00282 return status; 00283 } 00284 00285 00286 int32_t cfstore_flush3_start(void) 00287 { 00288 int32_t status = ARM_DRIVER_OK; 00289 int32_t cfsStatus; 00290 ARM_CFSTORE_DRIVER *cfstoreDriver = &cfstore_driver; 00291 ARM_CFSTORE_CAPABILITIES caps; 00292 00293 CFSTORE_DBGLOG("%s:IN\n", __func__); 00294 00295 /* Initialize configuration store */ 00296 cfsStatus = cfstoreDriver->Initialize(NULL, NULL); 00297 if(cfsStatus < ARM_DRIVER_OK){ 00298 CFSTORE_DBGLOG("CFStore Initialization failed (err %lu)\n", cfsStatus); 00299 return ARM_DRIVER_ERROR; 00300 } 00301 /* Get capabilities */ 00302 memset(&caps, 0, sizeof(caps)); 00303 caps = cfstoreDriver->GetCapabilities(); 00304 if(caps.asynchronous_ops == true){ 00305 CFSTORE_DBGLOG("%s:Please configure CFstore to work in synchronous mode. This can be change in config.json file.\n", __func__); 00306 status = ARM_DRIVER_ERROR; 00307 goto out; 00308 } 00309 if(caps.uvisor_support_enabled == true){ 00310 CFSTORE_DBGLOG("%s:Please enable uvisor spv box.\n", __func__); 00311 status = ARM_DRIVER_ERROR; 00312 goto out; 00313 } 00314 CFSTORE_DBGLOG("%s:OUT: returning ARM_DRIVER_OK\n", __func__); 00315 return ARM_DRIVER_OK; /* init succeeded */ 00316 00317 out: 00318 /* init failed */ 00319 (void) cfstore_flush3_end(); 00320 CFSTORE_DBGLOG("%s:OUT: status=%d\n", __func__, (int) status); 00321 return status; 00322 } 00323 00324 int32_t cfstore_flush3_check_data(uint8_t* data, int32_t len, uint8_t val) 00325 { 00326 int i; 00327 for(i = 0; i < len; i++) { 00328 if(data[i] != val){ 00329 /* found byte which doesnt have the expected data value */ 00330 return ARM_DRIVER_ERROR; 00331 } 00332 } 00333 return ARM_DRIVER_OK; 00334 } 00335 00336 /* @brief test case to recreate the transactions documented in the 00337 * issue 17 trace log. 00338 * 00339 * the test case was created by recreating the entries found in the 00340 * log report grepped from the trace log attached to githug issue 17: 00341 * 20160622_1321_grep_pv_configuration_store_issue_17_heap_corruption.txt 00342 * 00343 * This is what the test is intended to do: 00344 * - A (setup) 00345 * - cfstore_flush3_start 00346 * - cfstore_flush3_write_file(com.arm.mbed.spv.sst.meta, len: 2280) to create KV 00347 * - cfstore_flush3_write_file(com.arm.mbed.spv.sst.node.0, len: 220) to create KV 00348 * - cfstore_flush3_end 00349 * - B (setup?) 00350 * - cfstore_flush3_start 00351 * - cfstore_flush3_read_file(com.arm.mbed.spv.sst.meta) 00352 * - cfstore_flush3_read_file(com.arm.mbed.spv.sst.node.0) 00353 * - cfstore_flush3_end 00354 * - C (delete everything) 00355 * - cfstore_flush3_start 00356 * - cfstore_flush3_delete_file(com.arm.mbed.spv.sst.node.0). this will work as the KV is present 00357 * - cfstore_flush3_delete_file(com.arm.mbed.spv.sst.node.x) where x = {1..29} 00358 * - cfstore_flush3_delete_file(name com.arm.mbed.spv.sst.meta). 00359 * - this should work as the KV is present 00360 * - however, its is seen to fail in the trace log for the issue. 00361 * - cfstore_flush3_end 00362 * - D 00363 * - cfstore_flush3_start 00364 * - cfstore_flush3_read_file(com.arm.mbed.spv.sst.meta). readd 2280 bytes and check correct 00365 * - this should fail as the kv has been deleted. 00366 * - cfstore_flush3_write_file(com.arm.mbed.spv.sst.node.0, len: 220) to create KV 00367 * - cfstore_flush3_write_file(com.arm.mbed.spv.sst.meta, len: 2280) to create KV 00368 * - cfstore_flush3_end 00369 * - E 00370 * - run C-D again, to delete everything 00371 * - F 00372 * - cfstore_flush3_start 00373 * - cfstore_flush3_read_file(com.arm.mbed.spv.sst.meta). readd 2280 bytes and check correct 00374 * - this should fail as the kv has been deleted. 00375 * - cfstore_flush3_write_file(com.arm.mbed.spv.sst.node.0, len: 220) to create KV 00376 * - cfstore_flush3_write_file(com.arm.mbed.spv.sst.meta, len: 2280) to create KV 00377 * - cfstore_flush3_write_file(com.arm.mbed.spv.sst.node.0, len: 816) to create KV 00378 * - cfstore_flush3_write_file(com.arm.mbed.spv.sst.meta, len: 2280) to create KV 00379 * - cfstore_flush3_write_file(com.arm.mbed.spv.sst.node.1, len: 217) to create KV 00380 * - cfstore_flush3_write_file(com.arm.mbed.spv.sst.meta, len: 2280) to create KV 00381 * - cfstore_flush3_write_file(com.arm.mbed.spv.sst.node.0, len: 818) to create KV 00382 * - cfstore_flush3_write_file(com.arm.mbed.spv.sst.meta, len: 2280) to create KV 00383 * - cfstore_flush3_end 00384 * - G 00385 * - cfstore_flush3_start 00386 * - cfstore_flush3_read_file(com.arm.mbed.spv.sst.meta) 2280 bytes should be read 00387 * - cfstore_flush3_read_file(com.arm.mbed.spv.sst.node.0) 818 bytes should be read 00388 * - cfstore_flush3_read_file(com.arm.mbed.spv.sst.node.1) 217 bytes should be read 00389 * - cfstore_flush3_read_file(com.arm.mbed.spv.sst.node.1) 217 bytes should be read 00390 * - cfstore_flush3_read_file(com.arm.mbed.spv.sst.node.1) 217 bytes should be read 00391 * - cfstore_flush3_read_file(com.arm.mbed.spv.sst.node.1) 217 bytes should be read 00392 * - cfstore_flush3_write_file(com.arm.mbed.spv.sst.node.2, len: 235) to create KV 00393 * - cfstore_flush3_write_file(com.arm.mbed.spv.sst.meta, len: 2280) to create KV 00394 * - cfstore_flush3_end 00395 * 00396 * The issue reported heap corruption. To this end, a heap buffer 00397 * is allocated and checked as a canary against heap corruption 00398 */ 00399 00400 #define CFSTORE_FLUSH3_TEST_DATA_CHAR 'A' /* 0b1010 bit pattern */ 00401 #define CFSTORE_FLUSH3_HEAP_DATA_CHAR 'Z' 00402 #define CFSTORE_FLUSH3_TEST_DATA_BUF_LEN 3000 /* 2280 was the largest buffer used*/ 00403 00404 #ifdef TARGET_K64F 00405 #define CFSTORE_FLUSH3_TEST_HEAP_BUF_LEN 87500 /* alloc a heap buffer to use up some memory: value tuned to K64F */ 00406 #else 00407 #define CFSTORE_FLUSH3_TEST_HEAP_BUF_LEN 1000 /* alloc a heap buffer to use up some memory (minimal for non-k64f targets until tuned */ 00408 #endif /* TARGET_K64F */ 00409 00410 static control_t cfstore_flush3_test_01(const size_t call_count) 00411 { 00412 int32_t i; 00413 int32_t ret = ARM_DRIVER_ERROR; 00414 const char* kv_name_root = "com.arm.mbed.spv.sst"; 00415 const char* kv_name_node= "node"; 00416 const char* kv_name_meta= "meta"; 00417 char kv_name[CFSTORE_KEY_NAME_MAX_LENGTH+1]; 00418 uint8_t data[CFSTORE_FLUSH3_TEST_DATA_BUF_LEN]; 00419 void* heap_buf = NULL; 00420 00421 (void) call_count; 00422 heap_buf = malloc(CFSTORE_FLUSH3_TEST_HEAP_BUF_LEN); 00423 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: malloc() failed .\n", __func__); 00424 TEST_ASSERT_MESSAGE(heap_buf != NULL, cfstore_flush3_utest_msg_g); 00425 memset(heap_buf, CFSTORE_FLUSH3_HEAP_DATA_CHAR, CFSTORE_FLUSH3_TEST_HEAP_BUF_LEN); 00426 00427 CFSTORE_DBGLOG("%s: - A (setup)\n", __func__); 00428 CFSTORE_DBGLOG("%s: - cfstore_flush3_start\n", __func__); 00429 ret = cfstore_flush3_start(); 00430 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: A.1 cfstore_flush3_start() failed (ret=%d).\n", __func__, (int) ret); 00431 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00432 00433 CFSTORE_DBGLOG("%s: cfstore_flush3_write_file(com.arm.mbed.spv.sst.meta, len: 2280) to create KV\n", __func__); 00434 memset(data, CFSTORE_FLUSH3_TEST_DATA_CHAR, CFSTORE_FLUSH3_TEST_DATA_BUF_LEN); 00435 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s", (char*) kv_name_root, kv_name_meta); 00436 ret = cfstore_flush3_write_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, (const uint8_t*) data, 2280); 00437 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: A.2 cfstore_flush3_write_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00438 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00439 00440 CFSTORE_DBGLOG("%s: cfstore_flush3_write_file(com.arm.mbed.spv.sst.node.0, len: 220) to create KV\n", __func__); 00441 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s.0", (char*) kv_name_root, (char*) kv_name_node); 00442 ret = cfstore_flush3_write_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, (const uint8_t*) data, 220); 00443 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: A.3 cfstore_flush3_write_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00444 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00445 00446 CFSTORE_DBGLOG("%s: - cfstore_flush3_end\n", __func__); 00447 ret = cfstore_flush3_end(); 00448 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: A.4 cfstore_flush3_end() failed (ret=%d).\n", __func__, (int) ret); 00449 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00450 00451 CFSTORE_DBGLOG("%s: check for heap corruption\n", __func__); 00452 ret = cfstore_flush3_check_data((uint8_t*) heap_buf, CFSTORE_FLUSH3_TEST_HEAP_BUF_LEN, CFSTORE_FLUSH3_HEAP_DATA_CHAR); 00453 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: A.5 cfstore_flush3_check_data() failed for heap (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00454 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00455 00456 CFSTORE_DBGLOG("%s: - B\n", __func__); 00457 CFSTORE_DBGLOG("%s: - cfstore_flush3_start\n", __func__); 00458 ret = cfstore_flush3_start(); 00459 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: B.1 cfstore_flush3_start() failed (ret=%d).\n", __func__, (int) ret); 00460 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00461 00462 CFSTORE_DBGLOG("%s: cfstore_flush3_read_file(com.arm.mbed.spv.sst.meta). read 2280\n", __func__); 00463 memset(data, 0, CFSTORE_FLUSH3_TEST_DATA_BUF_LEN); 00464 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s", (char*) kv_name_root, (char*) kv_name_meta); 00465 ret = cfstore_flush3_read_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, data, 2280); 00466 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: B.2 cfstore_flush3_read_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00467 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00468 00469 ret = cfstore_flush3_check_data(data, 2280, CFSTORE_FLUSH3_TEST_DATA_CHAR); 00470 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: B.3 cfstore_flush3_check_data() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00471 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00472 00473 CFSTORE_DBGLOG("%s: cfstore_flush3_read_file(com.arm.mbed.spv.sst.node.0). read 220\n", __func__); 00474 memset(data, 0, CFSTORE_FLUSH3_TEST_DATA_BUF_LEN); 00475 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s.0", (char*) kv_name_root, (char*) kv_name_node); 00476 ret = cfstore_flush3_read_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, data, 220); 00477 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: B.4 cfstore_flush3_read_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00478 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00479 00480 ret = cfstore_flush3_check_data(data, 220, CFSTORE_FLUSH3_TEST_DATA_CHAR); 00481 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: B.5 cfstore_flush3_check_data() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00482 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00483 00484 CFSTORE_DBGLOG("%s: - cfstore_flush3_end\n", __func__); 00485 ret = cfstore_flush3_end(); 00486 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: B.6 cfstore_flush3_end() failed (ret=%d).\n", __func__, (int) ret); 00487 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00488 00489 CFSTORE_DBGLOG("%s: check for heap corruption\n", __func__); 00490 ret = cfstore_flush3_check_data((uint8_t*) heap_buf, CFSTORE_FLUSH3_TEST_HEAP_BUF_LEN, CFSTORE_FLUSH3_HEAP_DATA_CHAR); 00491 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: B.7 cfstore_flush3_check_data() failed for heap (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00492 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00493 00494 CFSTORE_DBGLOG("%s: - C (delete everything)\n", __func__); 00495 CFSTORE_DBGLOG("%s: - cfstore_flush3_start\n", __func__); 00496 ret = cfstore_flush3_start(); 00497 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: C.1 cfstore_flush3_start() failed (ret=%d).\n", __func__, (int) ret); 00498 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00499 00500 CFSTORE_DBGLOG("%s: cfstore_flush3_delete_file(com.arm.mbed.spv.sst.node.0). this will work as the KV is present\n", __func__); 00501 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s.0", (char*) kv_name_root, (char*) kv_name_node); 00502 ret = cfstore_flush3_delete_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name); 00503 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: C.2 cfstore_flush3_delete_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00504 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00505 00506 CFSTORE_DBGLOG("%s: cfstore_flush3_delete_file(com.arm.mbed.spv.sst.node.x) where x = {1..29}, each of which should fail\n", __func__); 00507 for(i = 1; i <= 29; i++){ 00508 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s.%d", (char*) kv_name_root, (char*) kv_name_node, (int) i); 00509 ret = cfstore_flush3_delete_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name); 00510 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: C.%d cfstore_flush3_delete_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) i+2, (int) ret, kv_name); 00511 /* The delete operations are expected to fail as the keys dont exist 00512 * but cfstore_flush3_delete_file() returns ARM_DRIVER_OK when key isnt found, so cant test the return code. 00513 */ 00514 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00515 } 00516 00517 CFSTORE_DBGLOG("%s: cfstore_flush3_delete_file(name com.arm.mbed.spv.sst.meta). this is expected to succeed as the KV is present\n", __func__); 00518 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s", (char*) kv_name_root, (char*) kv_name_meta); 00519 ret = cfstore_flush3_delete_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name); 00520 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: C.32 cfstore_flush3_delete_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00521 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00522 00523 #ifdef CFSTORE_DEBUG 00524 CFSTORE_DBGLOG("%s: cfstore_test_dump: dump here contents of CFSTORE so we know whats present\n", __func__); 00525 ret = cfstore_test_dump(); 00526 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: D.1.1 cfstore_test_dump failed (ret=%d).\n", __func__, (int) ret); 00527 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00528 #endif /* CFSTORE_DEBUG */ 00529 00530 CFSTORE_DBGLOG("%s: - cfstore_flush3_end\n", __func__); 00531 ret = cfstore_flush3_end(); 00532 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: C.33 cfstore_flush3_end() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00533 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00534 00535 CFSTORE_DBGLOG("%s: check for heap corruption\n", __func__); 00536 ret = cfstore_flush3_check_data((uint8_t*) heap_buf, CFSTORE_FLUSH3_TEST_HEAP_BUF_LEN, CFSTORE_FLUSH3_HEAP_DATA_CHAR); 00537 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: C.34 cfstore_flush3_check_data() failed for heap (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00538 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00539 00540 CFSTORE_DBGLOG("%s: - D\n", __func__); 00541 CFSTORE_DBGLOG("%s: - cfstore_flush3_start\n", __func__); 00542 ret = cfstore_flush3_start(); 00543 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: D.1 cfstore_flush3_start() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00544 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00545 00546 #ifdef CFSTORE_DEBUG 00547 CFSTORE_DBGLOG("%s: cfstore_test_dump: dump here contents of CFSTORE so we know whats present\n", __func__); 00548 ret = cfstore_test_dump(); 00549 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: D.1.1 cfstore_test_dump failed (ret=%d).\n", __func__, (int) ret); 00550 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00551 #endif /* CFSTORE_DEBUG */ 00552 00553 CFSTORE_DBGLOG("%s: cfstore_flush3_read_file(com.arm.mbed.spv.sst.meta). this should fail as the kv has been deleted.\n", __func__); 00554 memset(data, 0, CFSTORE_FLUSH3_TEST_DATA_BUF_LEN); 00555 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s", (char*) kv_name_root, (char*) kv_name_meta); 00556 ret = cfstore_flush3_read_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, data, 2280); 00557 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: D.2 cfstore_flush3_read_file() succeeded when expected to fail (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00558 TEST_ASSERT_MESSAGE(ret < ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00559 00560 CFSTORE_DBGLOG("%s: cfstore_flush3_write_file(com.arm.mbed.spv.sst.node.0, len: 220) to create KV.\n", __func__); 00561 memset(data, CFSTORE_FLUSH3_TEST_DATA_CHAR, CFSTORE_FLUSH3_TEST_DATA_BUF_LEN); 00562 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s.0", (char*) kv_name_root, (char*) kv_name_node); 00563 ret = cfstore_flush3_write_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, (const uint8_t*) data, 220); 00564 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: D.3 cfstore_flush3_write_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00565 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00566 00567 CFSTORE_DBGLOG("%s: cfstore_flush3_write_file(com.arm.mbed.spv.sst.meta, len: 2280) to create KV.\n", __func__); 00568 memset(data, CFSTORE_FLUSH3_TEST_DATA_CHAR, CFSTORE_FLUSH3_TEST_DATA_BUF_LEN); 00569 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s", (char*) kv_name_root, (char*) kv_name_meta); 00570 ret = cfstore_flush3_write_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, (const uint8_t*) data, 2280); 00571 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: D.4 cfstore_flush3_write_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00572 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00573 00574 CFSTORE_DBGLOG("%s: - cfstore_flush3_end\n", __func__); 00575 ret = cfstore_flush3_end(); 00576 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: D.5 cfstore_flush3_end() failed (ret=%d).\n", __func__, (int) ret); 00577 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00578 00579 CFSTORE_DBGLOG("%s: check for heap corruption\n", __func__); 00580 ret = cfstore_flush3_check_data((uint8_t*) heap_buf, CFSTORE_FLUSH3_TEST_HEAP_BUF_LEN, CFSTORE_FLUSH3_HEAP_DATA_CHAR); 00581 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: D.6 cfstore_flush3_check_data() failed for heap (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00582 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00583 00584 CFSTORE_DBGLOG("%s: - E: run C-D again, to delete everything\n", __func__); 00585 CFSTORE_DBGLOG("%s: - cfstore_flush3_start\n", __func__); 00586 ret = cfstore_flush3_start(); 00587 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: E.1 cfstore_flush3_start() failed (ret=%d).\n", __func__, (int) ret); 00588 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00589 00590 CFSTORE_DBGLOG("%s: cfstore_flush3_delete_file(com.arm.mbed.spv.sst.node.0). this will work as the KV is present.\n", __func__); 00591 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s.0", (char*) kv_name_root, (char*) kv_name_node); 00592 ret = cfstore_flush3_delete_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name); 00593 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: E.2 cfstore_flush3_delete_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00594 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00595 00596 CFSTORE_DBGLOG("%s: cfstore_flush3_delete_file(com.arm.mbed.spv.sst.node.x) where x = {1..29}, each of which should fail.\n", __func__); 00597 for(i = 1; i <= 29; i++){ 00598 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s.%d", (char*) kv_name_root, (char*) kv_name_node, (int) i); 00599 ret = cfstore_flush3_delete_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name); 00600 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: E.%d cfstore_flush3_delete_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) i+2, (int) ret, kv_name); 00601 /* The delete operations are expected to fail as the keys dont exist 00602 * but cfstore_flush3_delete_file() returns ARM_DRIVER_OK when key isnt found, so cant test the return code. 00603 */ 00604 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00605 } 00606 00607 CFSTORE_DBGLOG("%s: cfstore_flush3_delete_file(name com.arm.mbed.spv.sst.meta). this is expected to succeed as the KV is present.\n", __func__); 00608 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s", (char*) kv_name_root, (char*) kv_name_meta); 00609 ret = cfstore_flush3_delete_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name); 00610 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: E.32 cfstore_flush3_delete_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00611 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00612 00613 CFSTORE_DBGLOG("%s: - cfstore_flush3_end\n", __func__); 00614 ret = cfstore_flush3_end(); 00615 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: E.33 cfstore_flush3_end() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00616 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00617 00618 CFSTORE_DBGLOG("%s: check for heap corruption\n", __func__); 00619 ret = cfstore_flush3_check_data((uint8_t*) heap_buf, CFSTORE_FLUSH3_TEST_HEAP_BUF_LEN, CFSTORE_FLUSH3_HEAP_DATA_CHAR); 00620 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: E.34 cfstore_flush3_check_data() failed for heap (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00621 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00622 00623 CFSTORE_DBGLOG("%s: - F\n", __func__); 00624 CFSTORE_DBGLOG("%s: - cfstore_flush3_start\n", __func__); 00625 ret = cfstore_flush3_start(); 00626 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: F.1 cfstore_flush3_start() failed (ret=%d).\n", __func__, (int) ret); 00627 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00628 00629 CFSTORE_DBGLOG("%s: cfstore_flush3_read_file(com.arm.mbed.spv.sst.meta). this should fail as the kv has been deleted.\n", __func__); 00630 memset(data, 0, CFSTORE_FLUSH3_TEST_DATA_BUF_LEN); 00631 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s", (char*) kv_name_root, (char*) kv_name_meta); 00632 ret = cfstore_flush3_read_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, data, 2280); 00633 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: F.2 cfstore_flush3_read_file() succeeded when expected to fail (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00634 TEST_ASSERT_MESSAGE(ret < ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00635 00636 memset(data, CFSTORE_FLUSH3_TEST_DATA_CHAR, CFSTORE_FLUSH3_TEST_DATA_BUF_LEN); 00637 /* cfstore_flush3_write_file(com.arm.mbed.spv.sst.node.0, len: 220) to create KV */ 00638 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s.0", (char*) kv_name_root, (char*) kv_name_node); 00639 ret = cfstore_flush3_write_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, (const uint8_t*) data, 220); 00640 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: F.3 cfstore_flush3_write_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00641 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00642 00643 CFSTORE_DBGLOG("%s: cfstore_flush3_write_file(com.arm.mbed.spv.sst.meta, len: 2280) to create KV.\n", __func__); 00644 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s", (char*) kv_name_root, (char*) kv_name_meta); 00645 ret = cfstore_flush3_write_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, (const uint8_t*) data, 2280); 00646 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: F.4 cfstore_flush3_write_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00647 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00648 00649 CFSTORE_DBGLOG("%s: cfstore_flush3_write_file(com.arm.mbed.spv.sst.node.0, len: 816) to create KV.\n", __func__); 00650 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s.0", (char*) kv_name_root, (char*) kv_name_node); 00651 ret = cfstore_flush3_write_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, (const uint8_t*) data, 816); 00652 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: F.5 cfstore_flush3_write_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00653 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00654 00655 CFSTORE_DBGLOG("%s: cfstore_flush3_write_file(com.arm.mbed.spv.sst.meta, len: 2280) to create KV.\n", __func__); 00656 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s", (char*) kv_name_root, (char*) kv_name_meta); 00657 ret = cfstore_flush3_write_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, (const uint8_t*) data, 2280); 00658 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: F.6 cfstore_flush3_write_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00659 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00660 00661 CFSTORE_DBGLOG("%s: cfstore_flush3_write_file(com.arm.mbed.spv.sst.node.1, len: 217) to create KV.\n", __func__); 00662 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s.1", (char*) kv_name_root, (char*) kv_name_node); 00663 ret = cfstore_flush3_write_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, (const uint8_t*) data, 217); 00664 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: F.7 cfstore_flush3_write_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00665 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00666 00667 CFSTORE_DBGLOG("%s: cfstore_flush3_write_file(com.arm.mbed.spv.sst.meta, len: 2280) to create KV.\n", __func__); 00668 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s", (char*) kv_name_root, (char*) kv_name_meta); 00669 ret = cfstore_flush3_write_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, (const uint8_t*) data, 2280); 00670 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: F.8 cfstore_flush3_write_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00671 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00672 00673 CFSTORE_DBGLOG("%s: cfstore_flush3_write_file(com.arm.mbed.spv.sst.node.0, len: 818) to create KV.\n", __func__); 00674 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s.0", (char*) kv_name_root, (char*) kv_name_node); 00675 ret = cfstore_flush3_write_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, (const uint8_t*) data, 818); 00676 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: F.9 cfstore_flush3_write_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00677 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00678 00679 CFSTORE_DBGLOG("%s: cfstore_flush3_write_file(com.arm.mbed.spv.sst.meta, len: 2280) to create KV.\n", __func__); 00680 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s", (char*) kv_name_root, (char*) kv_name_meta); 00681 ret = cfstore_flush3_write_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, (const uint8_t*) data, 2280); 00682 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: F.10 cfstore_flush3_write_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00683 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00684 00685 CFSTORE_DBGLOG("%s: - cfstore_flush3_end\n", __func__); 00686 ret = cfstore_flush3_end(); 00687 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: F.11 cfstore_flush3_end() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00688 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00689 00690 CFSTORE_DBGLOG("%s: check for heap corruption\n", __func__); 00691 ret = cfstore_flush3_check_data((uint8_t*) heap_buf, CFSTORE_FLUSH3_TEST_HEAP_BUF_LEN, CFSTORE_FLUSH3_HEAP_DATA_CHAR); 00692 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: F.12 cfstore_flush3_check_data() failed for heap (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00693 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00694 00695 CFSTORE_DBGLOG("%s: - G\n", __func__); 00696 CFSTORE_DBGLOG("%s: - cfstore_flush3_start\n", __func__); 00697 ret = cfstore_flush3_start(); 00698 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: G.1 cfstore_flush3_start() failed (ret=%d).\n", __func__, (int) ret); 00699 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00700 00701 CFSTORE_DBGLOG("%s: cfstore_flush3_read_file(com.arm.mbed.spv.sst.meta) 2280 bytes should be read.\n", __func__); 00702 memset(data, 0, CFSTORE_FLUSH3_TEST_DATA_BUF_LEN); 00703 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s", (char*) kv_name_root, (char*) kv_name_meta); 00704 ret = cfstore_flush3_read_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, data, 2280); 00705 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: G.2 cfstore_flush3_read_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00706 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00707 00708 ret = cfstore_flush3_check_data(data, 2280, CFSTORE_FLUSH3_TEST_DATA_CHAR); 00709 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: G.3 cfstore_flush3_check_data() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00710 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00711 00712 CFSTORE_DBGLOG("%s: cfstore_flush3_read_file(com.arm.mbed.spv.sst.node.0) 818 bytes should be read.\n", __func__); 00713 memset(data, 0, CFSTORE_FLUSH3_TEST_DATA_BUF_LEN); 00714 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s.0", (char*) kv_name_root, (char*) kv_name_node); 00715 ret = cfstore_flush3_read_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, data, 818); 00716 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: G.4 cfstore_flush3_read_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00717 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00718 00719 ret = cfstore_flush3_check_data(data, 818, CFSTORE_FLUSH3_TEST_DATA_CHAR); 00720 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: G.5 cfstore_flush3_check_data() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00721 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00722 00723 CFSTORE_DBGLOG("%s: cfstore_flush3_read_file(com.arm.mbed.spv.sst.node.1) 217 bytes should be read. repeat 4 times.\n", __func__); 00724 for(i = 0; i < 4; i++){ 00725 memset(data, 0, CFSTORE_FLUSH3_TEST_DATA_BUF_LEN); 00726 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s.1", (char*) kv_name_root, (char*) kv_name_node); 00727 ret = cfstore_flush3_read_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, data, 217); 00728 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: G.%d.1 cfstore_flush3_read_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) i+6, (int) ret, kv_name); 00729 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00730 00731 ret = cfstore_flush3_check_data(data, 217, CFSTORE_FLUSH3_TEST_DATA_CHAR); 00732 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: G.%d.2 cfstore_flush3_check_data() failed (ret=%d, kv_name=%s).\n", __func__, (int) i+6, (int) ret, kv_name); 00733 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00734 } 00735 00736 memset(data, CFSTORE_FLUSH3_TEST_DATA_CHAR, CFSTORE_FLUSH3_TEST_DATA_BUF_LEN); 00737 CFSTORE_DBGLOG("%s: cfstore_flush3_write_file(com.arm.mbed.spv.sst.node.2, len: 235) to create KV.\n", __func__); 00738 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s.0", (char*) kv_name_root, (char*) kv_name_node); 00739 ret = cfstore_flush3_write_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, (const uint8_t*) data, 235); 00740 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: F.3 cfstore_flush3_write_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00741 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00742 00743 CFSTORE_DBGLOG("%s: cfstore_flush3_write_file(com.arm.mbed.spv.sst.meta, len: 2280) to create KV.\n", __func__); 00744 memset(data, CFSTORE_FLUSH3_TEST_DATA_CHAR, CFSTORE_FLUSH3_TEST_DATA_BUF_LEN); 00745 snprintf(kv_name, CFSTORE_KEY_NAME_MAX_LENGTH, "%s.%s", (char*) kv_name_root, (char*) kv_name_meta); 00746 ret = cfstore_flush3_write_file(NULL, CFSTORE_KEY_NAME_MAX_LENGTH, (const char*) kv_name, (const uint8_t*) data, 2280); 00747 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: A.2 cfstore_flush3_write_file() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00748 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00749 00750 CFSTORE_DBGLOG("%s: - cfstore_flush3_end\n", __func__); 00751 ret = cfstore_flush3_end(); 00752 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: F.11 cfstore_flush3_end() failed (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00753 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00754 00755 CFSTORE_DBGLOG("%s: check for heap corruption\n", __func__); 00756 ret = cfstore_flush3_check_data((uint8_t*) heap_buf, CFSTORE_FLUSH3_TEST_HEAP_BUF_LEN, CFSTORE_FLUSH3_HEAP_DATA_CHAR); 00757 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: A.5 cfstore_flush3_check_data() failed for heap (ret=%d, kv_name=%s).\n", __func__, (int) ret, kv_name); 00758 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00759 00760 if(heap_buf){ 00761 free(heap_buf); 00762 } 00763 00764 return CaseNext; 00765 } 00766 00767 00768 /* @brief simple flush test */ 00769 static control_t cfstore_flush3_test_02(const size_t call_count) 00770 { 00771 int32_t cfsStatus = ARM_DRIVER_ERROR; 00772 ARM_CFSTORE_KEYDESC kdesc; 00773 ARM_CFSTORE_FMODE flags; 00774 ARM_CFSTORE_SIZE len = strlen("key0"); 00775 ARM_CFSTORE_HANDLE_INIT(hkey); 00776 ARM_CFSTORE_DRIVER* drv = &cfstore_driver; 00777 00778 (void) call_count; 00779 memset(&kdesc, 0, sizeof(kdesc)); 00780 memset(&flags, 0, sizeof(flags)); 00781 00782 CFSTORE_DBGLOG("%s:Initialize()\n", __func__); 00783 cfsStatus = drv->Initialize(NULL, NULL); 00784 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error:%d:cfsStatus=%d", __func__, __LINE__, (int) cfsStatus); 00785 TEST_ASSERT_MESSAGE(cfsStatus >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00786 00787 CFSTORE_DBGLOG("%s:Create()\n", __func__); 00788 cfsStatus = drv->Create("key0", len, &kdesc, hkey); 00789 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error:%d:cfsStatus=%d", __func__, __LINE__, (int) cfsStatus); 00790 TEST_ASSERT_MESSAGE(cfsStatus >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00791 00792 len = strlen("some-value"); 00793 CFSTORE_DBGLOG("%s:Write()\n", __func__); 00794 cfsStatus = drv->Write(hkey, "some-value", &len); 00795 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error:%d:cfsStatus=%d", __func__, __LINE__, (int) cfsStatus); 00796 TEST_ASSERT_MESSAGE(cfsStatus >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00797 00798 CFSTORE_DBGLOG("%s:Close()\n", __func__); 00799 cfsStatus = drv->Close(hkey); 00800 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error:%d:cfsStatus=%d", __func__, __LINE__, (int) cfsStatus); 00801 TEST_ASSERT_MESSAGE(cfsStatus >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00802 00803 CFSTORE_DBGLOG("%s:Flush()\n", __func__); 00804 cfsStatus = drv->Flush(); 00805 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error:%d:cfsStatus=%d", __func__, __LINE__, (int) cfsStatus); 00806 TEST_ASSERT_MESSAGE(cfsStatus >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00807 00808 CFSTORE_DBGLOG("%s:Open()\n", __func__); 00809 cfsStatus = drv->Open("key0", flags, hkey); 00810 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error:%d:cfsStatus=%d", __func__, __LINE__, (int) cfsStatus); 00811 TEST_ASSERT_MESSAGE(cfsStatus >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00812 00813 CFSTORE_DBGLOG("%s:Delete()\n", __func__); 00814 cfsStatus = drv->Delete(hkey); 00815 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error:%d:cfsStatus=%d", __func__, __LINE__, (int) cfsStatus); 00816 TEST_ASSERT_MESSAGE(cfsStatus >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00817 00818 CFSTORE_DBGLOG("%s:Close()\n", __func__); 00819 cfsStatus = drv->Close(hkey); /////// <--- cfsStatus = ARM_CFSTORE_DRIVER_ERROR_PREEXISTING_KEY 00820 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error:%d:cfsStatus=%d", __func__, __LINE__, (int) cfsStatus); 00821 TEST_ASSERT_MESSAGE(cfsStatus >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00822 00823 CFSTORE_DBGLOG("%s:got status = %d\n", __func__, (int) cfsStatus); 00824 00825 CFSTORE_DBGLOG("%s:Uninitialize()\n", __func__); 00826 cfsStatus = drv->Uninitialize(); 00827 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error:%d:cfsStatus=%d", __func__, __LINE__, (int) cfsStatus); 00828 TEST_ASSERT_MESSAGE(cfsStatus >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00829 00830 return CaseNext; 00831 } 00832 00833 #endif /* STORAGE_DRIVER_CONFIG_HARDWARE_MTD_ASYNC_OPS && STORAGE_DRIVER_CONFIG_HARDWARE_MTD_ASYNC_OPS==0 */ 00834 00835 00836 static control_t cfstore_flush3_test_00(const size_t call_count) 00837 { 00838 int32_t ret = ARM_DRIVER_ERROR; 00839 ARM_CFSTORE_CAPABILITIES caps;; 00840 ARM_CFSTORE_DRIVER* drv = &cfstore_driver; 00841 00842 (void) call_count; 00843 00844 /* initialise the context */ 00845 caps = drv->GetCapabilities(); 00846 CFSTORE_LOG("%s:INITIALIZING: caps.asynchronous_ops=%lu\n", __func__, caps.asynchronous_ops); 00847 if(caps.asynchronous_ops == 1){ 00848 /* This is a sync mode only test. If this test is not built for sync mode, then skip testing return true 00849 * This means the test will conveniently pass when run in CI as part of async mode testing */ 00850 CFSTORE_LOG("*** Skipping test as binary built for flash journal async mode, and this test is sync-only%s", "\n"); 00851 return CaseNext; 00852 } 00853 ret = cfstore_test_startup(); 00854 CFSTORE_TEST_UTEST_MESSAGE(cfstore_flush3_utest_msg_g, CFSTORE_UTEST_MSG_BUF_SIZE, "%s:Error: failed to perform test startup (ret=%d).\n", __func__, (int) ret); 00855 TEST_ASSERT_MESSAGE(ret >= ARM_DRIVER_OK, cfstore_flush3_utest_msg_g); 00856 return CaseNext; 00857 } 00858 00859 /// @cond CFSTORE_DOXYGEN_DISABLE 00860 utest::v1::status_t greentea_setup(const size_t number_of_cases) 00861 { 00862 GREENTEA_SETUP(CFSTORE_FLUSH3_GREENTEA_TIMEOUT_S, "default_auto"); 00863 return greentea_test_setup_handler(number_of_cases); 00864 } 00865 00866 Case cases[] = { 00867 /* 1 2 3 4 5 6 7 */ 00868 /* 1234567890123456789012345678901234567890123456789012345678901234567890 */ 00869 Case("FLUSH3_test_00", cfstore_flush3_test_00), 00870 #if defined STORAGE_DRIVER_CONFIG_HARDWARE_MTD_ASYNC_OPS && STORAGE_DRIVER_CONFIG_HARDWARE_MTD_ASYNC_OPS==0 00871 Case("FLUSH3_test_01", cfstore_flush3_test_01), 00872 Case("FLUSH3_test_02", cfstore_flush3_test_02), 00873 #endif // STORAGE_DRIVER_CONFIG_HARDWARE_MTD_ASYNC_OPS 00874 }; 00875 00876 00877 /* Declare your test specification with a custom setup handler */ 00878 Specification specification(greentea_setup, cases); 00879 00880 /* mbedosV3++*/ 00881 int main() 00882 { 00883 return !Harness::run(specification); 00884 } 00885 /// @cond 00886
Generated on Sun Jul 17 2022 08:25:23 by 1.7.2