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.
flush3.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 /** @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 Tue Jul 12 2022 13:30:04 by
