BA
/
BaBoRo1
Embed:
(wiki syntax)
Show/hide line numbers
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 12:22:24 by
