CKM: Fix big data tests on both backends 43/206343/1
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Thu, 16 May 2019 14:09:13 +0000 (16:09 +0200)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Thu, 16 May 2019 14:14:05 +0000 (16:14 +0200)
C API does not provide a possibility to enforce the backend. If TZ
backend is enabled in key-manager it will be used for storing big
data. TZ backend has size limitations and so the 5000000B buffer can't
be used. Add a test for big data using C++ API that allows backend
selection.

Change-Id: Id73dcdc9bfb6c02eedd32fc4c6d5637172dd3c52

src/ckm/unprivileged/capi-testcases.cpp
src/ckm/unprivileged/main.cpp

index 95d2a32..0e0cfca 100644 (file)
@@ -779,11 +779,8 @@ RUNNER_TEST(T3044_remove_bin_data_C_API)
 
 RUNNER_TEST(T3045_save_big_data_C_API, RemoveDataEnv<USER_APP>)
 {
-#ifdef TZ_BACKEND
+       // We don't know which backend will be used
        const size_t BIG_SIZE = 100000;
-#else
-       const size_t BIG_SIZE = 5000000;
-#endif
 
        std::vector<char> big_data(BIG_SIZE);
        std::ifstream is("/dev/urandom", std::ifstream::binary);
index 6f0966f..bd5522b 100644 (file)
@@ -280,6 +280,42 @@ RUNNER_TEST(T1014_save_with_label)
         "Key value has been changed by service");
 }
 
+RUNNER_TEST(T1020_save_big_data)
+{
+#ifdef TZ_BACKEND
+    const size_t BIG_SIZE = 100000;
+    CKM::PolicyBackend backend = CKM::PolicyBackend::FORCE_HARDWARE;
+#else
+    const size_t BIG_SIZE = 5000000;
+    CKM::PolicyBackend backend = CKM::PolicyBackend::FORCE_SOFTWARE;
+#endif
+
+    int temp;
+    std::vector<char> big_data(BIG_SIZE);
+    std::ifstream is("/dev/urandom", std::ifstream::binary);
+    if(is)
+        is.read(big_data.data(), BIG_SIZE);
+
+    RUNNER_ASSERT_MSG(is,
+            "Only " << is.gcount() << "/" << BIG_SIZE << " bytes read from /dev/urandom");
+
+    CKM::RawBuffer buffer(big_data.begin(), big_data.end());
+    CKM::Policy policy(CKM::Password(), true, backend);
+    CKM::RawBuffer returned;
+
+    auto manager = CKM::Manager::create();
+
+    RUNNER_ASSERT_MSG(
+        CKM_API_SUCCESS == (temp = manager->saveData("big_data", buffer, policy)),
+        "Error=" << CKM::APICodeToString(temp));
+
+    RUNNER_ASSERT_MSG(
+        CKM_API_SUCCESS == (temp = manager->getData("big_data", CKM::Password(), returned)),
+        "Error=" << CKM::APICodeToString(temp));
+
+    RUNNER_ASSERT_MSG(buffer == returned, "Returned data doesn't match the original");
+}
+
 RUNNER_TEST(T1015_deinit)
 {
     remove_user_data(USER_APP);