psa_its_status_t psa_its_remove_impl(int32_t pid, uint32_t uid) { KVStore *kvstore = get_kvstore_instance(); MBED_ASSERT(kvstore); // Generate KVStore key char kv_key[PSA_ITS_FILENAME_MAX_LEN] = {'\0'}; generate_fn(kv_key, PSA_ITS_FILENAME_MAX_LEN, uid, pid); int status = kvstore->remove(kv_key); return convert_status(status); }
void doWritesOnSameObjects(int tid){ const int iter = 5000; auto t1 = high_resolution_clock::now(); KVStore<int,string> k; //SocketAddress,TableName k.bind("127.1.1.1:8090","ShreeGanesh"); //Exactly once for each KVStore object for(int i=0;i<iter;i++){ k.put(i,"Om Nama Shivay "+to_string(i)); } auto t2 = high_resolution_clock::now(); double dur = duration_cast<microseconds>(t2 -t1).count(); cout<<"doWritesOnSameObjects TID:"<<tid<<" duration "<<dur<<" microsecond for "<<iter<<" iterrations."<<endl; }
void doReadsOnSameObject(int tid){ const int iter = 5000; auto t1 = high_resolution_clock::now(); KVStore<int,string> k; //SocketAddress,TableName k.bind("127.1.1.1:8090","ShreeGanesh"); //Exactly once for each KVStore object for(int i=0;i<iter;i++){ auto kd = k.get(i); if(kd.ierr==-1){ cout<<"doReadsOnSameObject Error in thread "<<tid<<" at i="<<i<<endl;//" Got data:"<<kd.value<<endl; } } auto t2 = high_resolution_clock::now(); double dur = duration_cast<microseconds>(t2 -t1).count(); cout<<"doReadsOnSameObject TID:"<<tid<<" duration "<<dur<<" microsecond for "<<iter<<" iterrations."<<endl; }
psa_its_status_t test_psa_its_reset_impl(void) { psa_its_status_t status = PSA_ITS_SUCCESS; int kv_status = kv_init_storage_config(); if (kv_status != MBED_SUCCESS) { return PSA_ITS_ERROR_STORAGE_FAILURE; } KVMap &kv_map = KVMap::get_instance(); KVStore *kvstore = kv_map.get_main_kv_instance(STR_EXPAND(MBED_CONF_STORAGE_DEFAULT_KV)); if (!kvstore) { return PSA_ITS_ERROR_STORAGE_FAILURE; } if (kvstore->reset() != MBED_SUCCESS) { status = PSA_ITS_ERROR_STORAGE_FAILURE; } return status; }
void doSomething(int tid){ const int iter = 5000; auto t1 = high_resolution_clock::now(); KVStore<int,string> k; //SocketAddress,TableName k.bind("127.1.1.1:8090","ShreeGanesh"); //Exactly once for each KVStore object for(int i=0;i<iter;i++){ k.put(tid*10000+i,"Om Nama Shivay "+to_string(i)); auto kd = k.get(tid*10000+i); if(kd.ierr==-1){ cout<<"Error in thread "<<tid<<" at i="<<i<<endl;//" Got data:"<<kd.value<<endl; } else { //cout<<"Got Data:"<<kd.value<<" for tid:"<<tid<<" i:"<<i<<endl; } k.del(tid*10000+i); kd = k.get(tid*10000+i); if(kd.ierr!=-1){ cout<<"Error in thread "<<tid<<" at i="<<i<<" Got data:"<<kd.value<<endl; } } auto t2 = high_resolution_clock::now(); double dur = duration_cast<microseconds>(t2 -t1).count(); cout<<"TID:"<<tid<<" duration "<<dur<<" microsecond for "<<iter<<" iterrations."<<endl; }
psa_its_status_t psa_its_get_info_impl(int32_t pid, uint32_t uid, struct psa_its_info_t *p_info) { KVStore *kvstore = get_kvstore_instance(); MBED_ASSERT(kvstore); // Generate KVStore key char kv_key[PSA_ITS_FILENAME_MAX_LEN] = {'\0'}; generate_fn(kv_key, PSA_ITS_FILENAME_MAX_LEN, uid, pid); KVStore::info_t kv_info; int status = kvstore->get_info(kv_key, &kv_info); if (status == MBED_SUCCESS) { p_info->flags = 0; if (kv_info.flags & KVStore::WRITE_ONCE_FLAG) { p_info->flags |= PSA_ITS_WRITE_ONCE_FLAG; } p_info->size = (uint32_t)(kv_info.size); // kv_info.size is of type size_t } return convert_status(status); }
psa_its_status_t psa_its_set_impl(int32_t pid, uint32_t uid, uint32_t data_length, const void *p_data, psa_its_create_flags_t create_flags) { KVStore *kvstore = get_kvstore_instance(); MBED_ASSERT(kvstore); if ((create_flags != 0) && (create_flags != PSA_ITS_WRITE_ONCE_FLAG)) { return PSA_ITS_ERROR_FLAGS_NOT_SUPPORTED; } // Generate KVStore key char kv_key[PSA_ITS_FILENAME_MAX_LEN] = {'\0'}; generate_fn(kv_key, PSA_ITS_FILENAME_MAX_LEN, uid, pid); uint32_t kv_create_flags = 0; if (create_flags & PSA_ITS_WRITE_ONCE_FLAG) { kv_create_flags = KVStore::WRITE_ONCE_FLAG; } int status = kvstore->set(kv_key, p_data, data_length, kv_create_flags); return convert_status(status); }
psa_its_status_t psa_its_get_impl(int32_t pid, uint32_t uid, uint32_t data_offset, uint32_t data_length, void *p_data) { KVStore *kvstore = get_kvstore_instance(); MBED_ASSERT(kvstore); // Generate KVStore key char kv_key[PSA_ITS_FILENAME_MAX_LEN] = {'\0'}; generate_fn(kv_key, PSA_ITS_FILENAME_MAX_LEN, uid, pid); KVStore::info_t kv_info; int status = kvstore->get_info(kv_key, &kv_info); if (status == MBED_SUCCESS) { if (data_offset > kv_info.size) { return PSA_ITS_ERROR_OFFSET_INVALID; } // Verify (size + offset) does not wrap around if (data_length + data_offset < data_length) { return PSA_ITS_ERROR_INCORRECT_SIZE; } if (data_offset + data_length > kv_info.size) { return PSA_ITS_ERROR_INCORRECT_SIZE; } size_t actual_size = 0; status = kvstore->get(kv_key, p_data, data_length, &actual_size, data_offset); if (status == MBED_SUCCESS) { if (actual_size < data_length) { status = PSA_ITS_ERROR_INCORRECT_SIZE; } } } return convert_status(status); }
int main(int argc, char *argv[]) { signal(SIGINT, sigint_handler); KVStore* database = new KVStore("", 15); // *********** Start of the value declarations *********** int8_t byteTest1 = CHAR_MAX; int8_t byteTest2 = 105; int8_t byteTest3 = CHAR_MIN; int16_t shortTest1 = SHRT_MAX; int16_t shortTest2 = 24111; int16_t shortTest3 = SHRT_MIN; int32_t intTest1 = INT_MAX; int32_t intTest2 = 7543937; int32_t intTest3 = INT_MIN; int64_t longTest1 = LONG_LONG_MAX; int64_t longTest2 = 299490021; int64_t longTest3 = LONG_LONG_MIN; float floatTest1 = FLT_MAX; float floatTest2 = 76.234911; float floatTest3 = FLT_MIN; double doubleTest1 = DBL_MAX; double doubleTest2 = 973.23521; double doubleTest3 = DBL_MIN; bool boolTest1 = false; bool boolTest2 = true; std::string stringTest1 = "this is a test from c++"; std::string stringTest2 = ""; int8_t bytesTest1[] = { 7, 8, 9 }; int8_t bytesTest2[] = { }; // *********** Start of the array declarations *********** int8_t byteArrayTest1[] = { 87, 89, 91, 93, 95, 97, 99, 101 }; int8_t byteArrayTest2[] = { }; int16_t shortArrayTest1[] = { 18, 14, 16, 18, 20, 22 }; int16_t shortArrayTest2[] = { }; int32_t intArrayTest1[] = { 500, 1000, 1500, 2000, INT_MIN, INT_MAX }; int32_t intArrayTest2[] = { }; int64_t longArrayTest1[] = { LONG_LONG_MAX, 4000, 6000, 8000, 10000, LONG_LONG_MIN }; int64_t longArrayTest2[] = { }; float floatArrayTest1[] = { FLT_MIN, -2312.343, 83411.1423, 9211.41, FLT_MAX }; float floatArrayTest2[] = { }; double doubleArrayTest1[] = { DBL_MIN, -7312.52, -3411.1423, 611.41, 98234.22, DBL_MAX }; double doubleArrayTest2[] = { }; bool boolArrayTest1[] = { true, true, true, true, false, false, false, false }; bool boolArrayTest2[] = { }; database->start(); database->setInt8Value("pig", byteTest2, KVStore::SHARED); database->setInt16Value("cat", shortTest2, KVStore::SHARED); database->setInt32Value("horse", intTest2, KVStore::SHARED); database->setInt64Value("tiger", longTest2, KVStore::SHARED); database->setFloatValue("dog", floatTest2, KVStore::SHARED); database->setDoubleValue("monkey", doubleTest2, KVStore::SHARED); database->setBoolValue("bird", boolTest2, KVStore::SHARED); database->setStringValue("fox", stringTest1, KVStore::SHARED); database->setByteBufferValue("chicken", &bytesTest1[0], 3, KVStore::SHARED); database->setInt8Array("frog", byteArrayTest1, 8, KVStore::SHARED); database->setInt16Array("fish", shortArrayTest1, 6, KVStore::SHARED); database->setInt32Array("turtle", intArrayTest1, 6, KVStore::SHARED); database->setInt64Array("leopard", longArrayTest1, 6, KVStore::SHARED); database->setFloatArray("lamb", floatArrayTest1, 5, KVStore::SHARED); database->setDoubleArray("mule", doubleArrayTest1, 6, KVStore::SHARED); database->setBoolArray("penguin", boolArrayTest1, 8, KVStore::SHARED); while (true) { int bytesRead, numberElements; std::cout << std::endl; // *********** Start of the value tests *********** int8_t byteRead; byteRead = database->getInt8Value("pig"); std::cout << (int) byteRead << std::endl; short shortRead; shortRead = database->getInt16Value("cat"); std::cout << shortRead << std::endl; int intRead; intRead = database->getInt32Value("horse"); std::cout << intRead << std::endl; int64_t longRead; longRead = database->getInt64Value("tiger"); std::cout << longRead << std::endl; float floatRead; floatRead = database->getFloatValue("dog"); std::cout << floatRead << std::endl; double doubleRead; doubleRead = database->getDoubleValue("monkey"); std::cout << doubleRead << std::endl; bool boolRead; boolRead = database->getBoolValue("bird"); std::cout << boolRead << std::endl; std::string stringRead; stringRead = database->getStringValue("fox"); std::cout << stringRead << stringRead << std::endl; int8_t byteBuffer[10]; bytesRead = database->getByteBufferValue("chicken", &byteBuffer[0]); if (bytesRead > 0) { std::cout << "Byte Buffer Test - Read " << bytesRead << " bytes" << std::endl; std::cout << "["; for (int i = 0; i < bytesRead; i++) std::cout << (int) byteBuffer[i] << " "; std::cout << "]" << std::endl; } // *********** Start of the array tests *********** int8_t byteArray[15]; numberElements = database->getInt8Array("frog", byteArray); if (numberElements > 0) { std::cout << "Byte Array Test - Read " << numberElements << " elements" << std::endl; std::cout << "["; for (int i = 0; i < numberElements; i++) std::cout << (int) byteArray[i] << " "; std::cout << "]" << std::endl; } int16_t shortArray[10]; numberElements = database->getInt16Array("fish", shortArray); if (numberElements > 0) { std::cout << "Short Array Test - Read " << numberElements << " elements" << std::endl; std::cout << "["; for (int i = 0; i < numberElements; i++) std::cout << (short) shortArray[i] << " "; std::cout << "]" << std::endl; } int32_t intArray[15]; numberElements = database->getInt32Array("turtle", intArray); if (numberElements > 0) { std::cout << "Int Array Test - Read " << numberElements << " elements" << std::endl; std::cout << "["; for (int i = 0; i < numberElements; i++) std::cout << (int) intArray[i] << " "; std::cout << "]" << std::endl; } int64_t longArray[15]; numberElements = database->getInt64Array("leopard", longArray); if (numberElements > 0) { std::cout << "Long Array Test - Read " << numberElements << " elements" << std::endl; std::cout << "["; for (int i = 0; i < numberElements; i++) std::cout << (long long) longArray[i] << " "; std::cout << "]" << std::endl; } float floatArray[15]; numberElements = database->getFloatArray("lamb", floatArray); if (numberElements > 0) { std::cout << "Float Array Test - Read " << numberElements << " elements" << std::endl; std::cout << "["; for (int i = 0; i < numberElements; i++) std::cout << (float) floatArray[i] << " "; std::cout << "]" << std::endl; } double doubleArray[15]; numberElements = database->getDoubleArray("mule", doubleArray); if (numberElements > 0) { std::cout << "Double Array Test - Read " << numberElements << " elements" << std::endl; std::cout << "["; for (int i = 0; i < numberElements; i++) std::cout << (double) doubleArray[i] << " "; std::cout << "]" << std::endl; } bool boolArray[15]; numberElements = database->getBoolArray("penguin", boolArray); if (numberElements > 0) { std::cout << "Bool Array Test - Read " << numberElements << " elements" << std::endl; std::cout << "["; for (int i = 0; i < numberElements; i++) std::cout << (bool) boolArray[i] << " "; std::cout << "]" << std::endl; } if (shutdown) { database->shutdownReq(); while (!database->threadIsComplete()) boost::this_thread::sleep(boost::posix_time::milliseconds(200)); exit(0); } boost::this_thread::sleep(boost::posix_time::milliseconds(1000)); } return 0; }