Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers test_ns_nvm_helper.c Source File

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 }