Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-os by
test_ns_nvm_helper.c
00001 /* 00002 * Copyright (c) 2016 ARM Limited. All rights reserved. 00003 */ 00004 00005 #include <inttypes.h> 00006 #include "test_ns_nvm_helper.h" 00007 #include "ns_nvm_helper.h" 00008 #include "nsdynmemLIB_stub.h" 00009 #include "platform/arm_hal_nvm.h" 00010 00011 #define TEST_NS_NVM_HELPER_CONTEXT1 0x01 00012 #define TEST_NS_NVM_HELPER_CONTEXT2 0x02 00013 #define TEST_NS_NVM_HELPER_CONTEXT3 0x03 00014 00015 const char *key1 = "ns_nvm_test_key1"; 00016 #define BUF_LEN 1000 00017 static uint8_t buf[BUF_LEN]; 00018 uint16_t buf_len = BUF_LEN; 00019 00020 static int read_callback_status = 0; 00021 static void *read_callback_context = NULL; 00022 static int write_callback_status = 0; 00023 static void *write_callback_context = NULL; 00024 static int delete_callback_status = 0; 00025 static void *delete_callback_context = NULL; 00026 00027 extern void test_platform_nvm_api_set_retval(platform_nvm_status return_value); 00028 00029 void test_ns_nvm_helper_write_callback(int status, void *context) 00030 { 00031 write_callback_status = status; 00032 write_callback_context = context; 00033 } 00034 00035 void test_ns_nvm_helper_read_callback(int status, void *context) 00036 { 00037 read_callback_status = status; 00038 read_callback_context = context; 00039 } 00040 00041 void test_ns_nvm_helper_delete_callback(int status, void *context) 00042 { 00043 delete_callback_status = status; 00044 delete_callback_context = context; 00045 } 00046 00047 bool test_ns_nvm_helper_write() 00048 { 00049 int ret_val; 00050 00051 write_callback_status = -1; 00052 write_callback_context = 0; 00053 00054 // test with invalid parameters - callback NULL 00055 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00056 ret_val = ns_nvm_data_write(NULL, key1, &buf, &buf_len, TEST_NS_NVM_HELPER_CONTEXT1); 00057 if (ret_val == NS_NVM_OK) { 00058 return false; 00059 } 00060 00061 // test with invalid parameters - key NULL 00062 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00063 ret_val = ns_nvm_data_write(test_ns_nvm_helper_write_callback, NULL, &buf, &buf_len, TEST_NS_NVM_HELPER_CONTEXT1); 00064 if (ret_val == NS_NVM_OK) { 00065 return false; 00066 } 00067 00068 // test with invalid parameters - buf NULL 00069 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00070 ret_val = ns_nvm_data_write(test_ns_nvm_helper_write_callback, key1, NULL, &buf_len, TEST_NS_NVM_HELPER_CONTEXT1); 00071 if (ret_val == NS_NVM_OK) { 00072 return false; 00073 } 00074 00075 // test with invalid parameters - buf_len NULL 00076 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00077 ret_val = ns_nvm_data_write(test_ns_nvm_helper_write_callback, key1, &buf, NULL, TEST_NS_NVM_HELPER_CONTEXT1); 00078 if (ret_val == NS_NVM_OK) { 00079 return false; 00080 } 00081 00082 // test with valid parameters - memory allocation fails 1 00083 test_platform_nvm_api_set_retval(PLATFORM_NVM_OK); 00084 nsdynmemlib_stub.returnCounter = 0; 00085 ret_val = ns_nvm_data_write(test_ns_nvm_helper_write_callback, key1, &buf, &buf_len, TEST_NS_NVM_HELPER_CONTEXT1); 00086 if (ret_val != NS_NVM_MEMORY) { 00087 return false; 00088 } 00089 00090 // test with valid parameters - memory allocation fails 2 00091 test_platform_nvm_api_set_retval(PLATFORM_NVM_OK); 00092 nsdynmemlib_stub.returnCounter = 1; 00093 ret_val = ns_nvm_data_write(test_ns_nvm_helper_write_callback, key1, &buf, &buf_len, TEST_NS_NVM_HELPER_CONTEXT1); 00094 if (ret_val != NS_NVM_MEMORY) { 00095 return false; 00096 } 00097 00098 // test with valid parameters - platform_init fails 00099 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00100 nsdynmemlib_stub.returnCounter = 2; 00101 ret_val = ns_nvm_data_write(test_ns_nvm_helper_write_callback, key1, &buf, &buf_len, TEST_NS_NVM_HELPER_CONTEXT1); 00102 if (ret_val != NS_NVM_ERROR) { 00103 return false; 00104 } 00105 00106 // test with valid parameters - OK 00107 test_platform_nvm_api_set_retval(PLATFORM_NVM_OK); 00108 nsdynmemlib_stub.returnCounter = 2; 00109 ret_val = ns_nvm_data_write(test_ns_nvm_helper_write_callback, key1, &buf, &buf_len, TEST_NS_NVM_HELPER_CONTEXT1); 00110 if (ret_val != NS_NVM_OK) { 00111 return false; 00112 } 00113 00114 // make initialize callback 00115 test_platform_nvm_api_callback(); 00116 00117 // make create callback 00118 test_platform_nvm_api_callback(); 00119 00120 // make write callback 00121 test_platform_nvm_api_callback(); 00122 00123 // make flush callback 00124 test_platform_nvm_api_callback(); 00125 00126 if (write_callback_status != NS_NVM_OK || write_callback_context != TEST_NS_NVM_HELPER_CONTEXT1) { 00127 return false; 00128 } 00129 00130 return true; 00131 } 00132 00133 bool test_ns_nvm_helper_read() 00134 { 00135 int ret_val; 00136 00137 read_callback_status = -1; 00138 read_callback_context = NULL; 00139 00140 // test with invalid parameters - callback NULL 00141 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00142 ret_val = ns_nvm_data_read(NULL, key1, &buf, &buf_len, TEST_NS_NVM_HELPER_CONTEXT2); 00143 if (ret_val == NS_NVM_OK) { 00144 return false; 00145 } 00146 00147 // test with invalid parameters - key NULL 00148 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00149 ret_val = ns_nvm_data_read(test_ns_nvm_helper_read_callback, NULL, &buf, &buf_len, TEST_NS_NVM_HELPER_CONTEXT2); 00150 if (ret_val == NS_NVM_OK) { 00151 return false; 00152 } 00153 00154 // test with invalid parameters - buf NULL 00155 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00156 ret_val = ns_nvm_data_read(test_ns_nvm_helper_read_callback, key1, NULL, &buf_len, TEST_NS_NVM_HELPER_CONTEXT2); 00157 if (ret_val == NS_NVM_OK) { 00158 return false; 00159 } 00160 00161 // test with invalid parameters - buf_len NULL 00162 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00163 ret_val = ns_nvm_data_read(test_ns_nvm_helper_read_callback, key1, &buf, NULL, TEST_NS_NVM_HELPER_CONTEXT2); 00164 if (ret_val == NS_NVM_OK) { 00165 return false; 00166 } 00167 00168 // test with valid parameters - memory allocation fails 1 00169 test_platform_nvm_api_set_retval(PLATFORM_NVM_OK); 00170 nsdynmemlib_stub.returnCounter = 0; 00171 ret_val = ns_nvm_data_read(test_ns_nvm_helper_read_callback, key1, &buf, &buf_len, TEST_NS_NVM_HELPER_CONTEXT2); 00172 if (ret_val != NS_NVM_MEMORY) { 00173 return false; 00174 } 00175 00176 // test with valid parameters - read ok 00177 test_platform_nvm_api_set_retval(PLATFORM_NVM_OK); 00178 nsdynmemlib_stub.returnCounter = 1; 00179 ret_val = ns_nvm_data_read(test_ns_nvm_helper_read_callback, key1, &buf, &buf_len, TEST_NS_NVM_HELPER_CONTEXT2); 00180 if (ret_val != NS_NVM_OK) { 00181 return false; 00182 } 00183 00184 // make read callback 00185 test_platform_nvm_api_callback(); 00186 00187 if (read_callback_status != NS_NVM_OK || read_callback_context != TEST_NS_NVM_HELPER_CONTEXT2) { 00188 return false; 00189 } 00190 00191 return true; 00192 } 00193 00194 bool test_ns_nvm_helper_delete() 00195 { 00196 int ret_val; 00197 00198 delete_callback_status = -1; 00199 delete_callback_context = NULL; 00200 00201 // test with invalid parameters - callback NULL 00202 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00203 ret_val = ns_nvm_key_delete(NULL, key1, TEST_NS_NVM_HELPER_CONTEXT3); 00204 if (ret_val == NS_NVM_OK) { 00205 return false; 00206 } 00207 00208 // test with invalid parameters - key NULL 00209 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00210 ret_val = ns_nvm_key_delete(test_ns_nvm_helper_delete_callback, NULL, TEST_NS_NVM_HELPER_CONTEXT3); 00211 if (ret_val == NS_NVM_OK) { 00212 return false; 00213 } 00214 00215 // test with valid parameters - memory allocation fails 00216 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00217 nsdynmemlib_stub.returnCounter = 0; 00218 ret_val = ns_nvm_key_delete(test_ns_nvm_helper_delete_callback, key1, TEST_NS_NVM_HELPER_CONTEXT3); 00219 if (ret_val != NS_NVM_MEMORY) { 00220 return false; 00221 } 00222 00223 // test with valid parameters - OK 00224 test_platform_nvm_api_set_retval(PLATFORM_NVM_OK); 00225 nsdynmemlib_stub.returnCounter = 1; 00226 ret_val = ns_nvm_key_delete(test_ns_nvm_helper_delete_callback, key1, TEST_NS_NVM_HELPER_CONTEXT3); 00227 if (ret_val != NS_NVM_OK) { 00228 return false; 00229 } 00230 00231 // make delete callback 00232 test_platform_nvm_api_callback(); 00233 00234 // make flush callback 00235 test_platform_nvm_api_callback(); 00236 00237 if (delete_callback_status != NS_NVM_OK || delete_callback_context != TEST_NS_NVM_HELPER_CONTEXT3) { 00238 return false; 00239 } 00240 00241 return true; 00242 } 00243 00244 bool test_ns_nvm_helper_concurrent_requests() 00245 { 00246 int ret_val; 00247 00248 write_callback_status = -1; 00249 write_callback_context = NULL; 00250 read_callback_status = -1; 00251 read_callback_context = NULL; 00252 delete_callback_status = -1; 00253 delete_callback_context = NULL; 00254 00255 // read ok 00256 test_platform_nvm_api_set_retval(PLATFORM_NVM_OK); 00257 nsdynmemlib_stub.returnCounter = 1; 00258 ret_val = ns_nvm_data_read(test_ns_nvm_helper_read_callback, key1, &buf, &buf_len, TEST_NS_NVM_HELPER_CONTEXT1); 00259 if (ret_val != NS_NVM_OK) { 00260 return false; 00261 } 00262 00263 // write ok 00264 test_platform_nvm_api_set_retval(PLATFORM_NVM_OK); 00265 nsdynmemlib_stub.returnCounter = 2; 00266 ret_val = ns_nvm_data_write(test_ns_nvm_helper_write_callback, key1, &buf, &buf_len, TEST_NS_NVM_HELPER_CONTEXT2); 00267 if (ret_val != NS_NVM_OK) { 00268 return false; 00269 } 00270 00271 // delete ok 00272 nsdynmemlib_stub.returnCounter = 1; 00273 ret_val = ns_nvm_key_delete(test_ns_nvm_helper_delete_callback, key1, TEST_NS_NVM_HELPER_CONTEXT3); 00274 if (ret_val != NS_NVM_OK) { 00275 return false; 00276 } 00277 00278 // Read - should complete first, make callback 00279 test_platform_nvm_api_callback(); 00280 00281 if (read_callback_status != NS_NVM_OK || read_callback_context != TEST_NS_NVM_HELPER_CONTEXT1) { 00282 return false; 00283 } 00284 00285 // Write - should complete second, make create callback 00286 test_platform_nvm_api_callback(); 00287 00288 // make write callback 00289 test_platform_nvm_api_callback(); 00290 00291 // make write-flush callback with error status, note also delete will be given same error as pending request is triggered 00292 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00293 test_platform_nvm_api_callback(); 00294 00295 if (write_callback_status != NS_NVM_ERROR || write_callback_context != TEST_NS_NVM_HELPER_CONTEXT2) { 00296 return false; 00297 } 00298 00299 // delete callback is called after write because write was failing 00300 if (delete_callback_status != NS_NVM_ERROR || delete_callback_context != TEST_NS_NVM_HELPER_CONTEXT3) { 00301 return false; 00302 } 00303 00304 return true; 00305 } 00306 00307 bool test_ns_nvm_helper_platform_error() 00308 { 00309 int ret_val; 00310 00311 write_callback_status = -1; 00312 write_callback_context = NULL; 00313 read_callback_status = -1; 00314 read_callback_context = NULL; 00315 delete_callback_status = -1; 00316 delete_callback_context = NULL; 00317 00318 // read request fails directly in platform_nvm_api 00319 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00320 nsdynmemlib_stub.returnCounter = 1; 00321 ret_val = ns_nvm_data_read(test_ns_nvm_helper_read_callback, key1, &buf, &buf_len, TEST_NS_NVM_HELPER_CONTEXT1); 00322 if (ret_val != NS_NVM_ERROR) { 00323 return false; 00324 } 00325 00326 // read request fails in platform_nvm_api callback 00327 test_platform_nvm_api_set_retval(PLATFORM_NVM_OK); 00328 nsdynmemlib_stub.returnCounter = 1; 00329 ret_val = ns_nvm_data_read(test_ns_nvm_helper_read_callback, key1, &buf, &buf_len, TEST_NS_NVM_HELPER_CONTEXT1); 00330 if (ret_val != NS_NVM_OK) { 00331 return false; 00332 } 00333 // make read callback 00334 test_platform_nvm_api_set_retval(PLATFORM_NVM_KEY_NOT_FOUND); 00335 test_platform_nvm_api_callback(); 00336 if (read_callback_status != NS_NVM_DATA_NOT_FOUND || read_callback_context != TEST_NS_NVM_HELPER_CONTEXT1) { 00337 return false; 00338 } 00339 00340 // delete fails in platform api callback 00341 test_platform_nvm_api_set_retval(PLATFORM_NVM_OK); 00342 nsdynmemlib_stub.returnCounter = 1; 00343 ret_val = ns_nvm_key_delete(test_ns_nvm_helper_delete_callback, key1, TEST_NS_NVM_HELPER_CONTEXT3); 00344 if (ret_val != NS_NVM_OK) { 00345 return false; 00346 } 00347 00348 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00349 // make delete callback 00350 test_platform_nvm_api_callback(); 00351 if (delete_callback_status != NS_NVM_ERROR || delete_callback_context != TEST_NS_NVM_HELPER_CONTEXT3) { 00352 return false; 00353 } 00354 00355 return true; 00356 } 00357 00358 00359 bool test_ns_nvm_helper_platform_error_in_write() 00360 { 00361 int ret_val; 00362 00363 write_callback_status = -1; 00364 write_callback_context = NULL; 00365 00366 // create callback fails 00367 test_platform_nvm_api_set_retval(PLATFORM_NVM_OK); 00368 nsdynmemlib_stub.returnCounter = 2; 00369 ret_val = ns_nvm_data_write(test_ns_nvm_helper_write_callback, key1, &buf, &buf_len, TEST_NS_NVM_HELPER_CONTEXT1); 00370 if (ret_val != NS_NVM_OK) { 00371 return false; 00372 } 00373 00374 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00375 test_platform_nvm_api_callback(); 00376 if (write_callback_status != NS_NVM_ERROR || write_callback_context != TEST_NS_NVM_HELPER_CONTEXT1) { 00377 return false; 00378 } 00379 00380 write_callback_status = -1; 00381 write_callback_context = NULL; 00382 00383 // write calback fails 00384 test_platform_nvm_api_set_retval(PLATFORM_NVM_OK); 00385 nsdynmemlib_stub.returnCounter = 2; 00386 ret_val = ns_nvm_data_write(test_ns_nvm_helper_write_callback, key1, &buf, &buf_len, TEST_NS_NVM_HELPER_CONTEXT1); 00387 if (ret_val != NS_NVM_OK) { 00388 return false; 00389 } 00390 00391 // make create callback 00392 test_platform_nvm_api_callback(); 00393 00394 // make write callback with error 00395 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00396 test_platform_nvm_api_callback(); 00397 if (write_callback_status != NS_NVM_ERROR || write_callback_context != TEST_NS_NVM_HELPER_CONTEXT1) { 00398 return false; 00399 } 00400 00401 write_callback_status = -1; 00402 write_callback_context = NULL; 00403 00404 // flush calback fails 00405 test_platform_nvm_api_set_retval(PLATFORM_NVM_OK); 00406 nsdynmemlib_stub.returnCounter = 2; 00407 ret_val = ns_nvm_data_write(test_ns_nvm_helper_write_callback, key1, &buf, &buf_len, TEST_NS_NVM_HELPER_CONTEXT1); 00408 if (ret_val != NS_NVM_OK) { 00409 return false; 00410 } 00411 00412 // make create callback 00413 test_platform_nvm_api_callback(); 00414 00415 // make write callback 00416 test_platform_nvm_api_callback(); 00417 00418 // make flush callback with error 00419 test_platform_nvm_api_set_retval(PLATFORM_NVM_ERROR); 00420 test_platform_nvm_api_callback(); 00421 if (write_callback_status != NS_NVM_ERROR || write_callback_context != TEST_NS_NVM_HELPER_CONTEXT1) { 00422 return false; 00423 } 00424 00425 return true; 00426 }
Generated on Tue Jul 12 2022 13:16:15 by
