CKM: Test for large data transfer 69/39269/5
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Tue, 12 May 2015 10:00:41 +0000 (12:00 +0200)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Tue, 19 May 2015 14:44:08 +0000 (16:44 +0200)
[Issue#] N/A
[Feature/Bug] N/A
[Problem] N/A
[Cause] We need to make sure that it's possible to transfer MBs of data between
client and server
[Solution] Test added

[Verification] Run:
ckm-tests --group=T3040_CKMC_QUICK_REMOVE_BIN_DATA_TEST_C_API

Change-Id: I53148572f7df7e6b6d2a3475a76c2afababbc63a

src/ckm/capi-testcases.cpp
src/ckm/ckm-common.cpp
src/ckm/ckm-common.h

index 8961ba6..60f2239 100644 (file)
@@ -18,6 +18,7 @@
 #include <ckm-common.h>
 
 #include <string>
+#include <fstream>
 #include <string.h>
 #include <stdio.h>
 #include <stddef.h>
@@ -28,6 +29,8 @@ const int USER_APP = 5000;
 const int GROUP_APP = 5000;
 const char* USER_PASS = "user-pass";
 const char* TEST_LABEL = "test_label";
+const char *const TEST_OBJECT1 = "OBJECT1";
+const std::string TEST_ALIAS1 = aliasWithLabel(TEST_LABEL,TEST_OBJECT1);
 const char* TEST_SYSTEM_ALIAS = "system-alias-1";
 const char* TEST_DATA = "ABCD";
 } // namespace anonymous
@@ -556,11 +559,8 @@ RUNNER_TEST_GROUP_INIT (T3040_CKMC_QUICK_REMOVE_BIN_DATA_TEST_C_API);
 
 RUNNER_TEST(T3041_init_C_API)
 {
-       int temp;
        remove_user_data(0);
-       RUNNER_ASSERT_MSG(
-                       CKMC_ERROR_NONE == (temp = ckmc_unlock_user_key(USER_APP, "simple-password")),
-                       CKMCReadableError(temp));
+       reset_user_data(USER_APP, "simple-password");
 }
 
 RUNNER_TEST(T3042_save_get_bin_data_C_API)
@@ -715,7 +715,26 @@ RUNNER_TEST(T3044_remove_bin_data_C_API)
                        CKMCReadableError(temp));
 }
 
-RUNNER_TEST(T3045_deinit_C_API)
+RUNNER_TEST(T3045_save_big_data_C_API)
+{
+       GarbageCollector gc;
+       const size_t BIG_SIZE = 5000000; // can't go much further because of stack size limit
+       ScopedAccessProvider ap(TEST_LABEL, USER_APP, GROUP_APP);
+
+       char big_data[BIG_SIZE];
+       std::ifstream is("/dev/urandom", std::ifstream::binary);
+       if(is)
+               is.read(big_data, BIG_SIZE);
+
+       RUNNER_ASSERT_MSG(is,
+                       "Only " << is.gcount() << "/" << BIG_SIZE << " bytes read from /dev/urandom");
+
+       gc.save(TEST_ALIAS1.c_str(), big_data, BIG_SIZE, CKMC_ERROR_NONE);
+
+       check_read(TEST_OBJECT1, TEST_LABEL, big_data, BIG_SIZE, CKMC_ERROR_NONE);
+}
+
+RUNNER_TEST(T3050_deinit_C_API)
 {
        int temp;
 
index f81e24f..4bf75f2 100644 (file)
@@ -156,12 +156,17 @@ std::string CKMCReadableError(int error) {
 
 void save_data(const char* alias, const char *data, int expected_err)
 {
+    save_data(alias, data, strlen(data), expected_err);
+}
+
+void save_data(const char* alias, const char *data, size_t len, int expected_err = CKMC_ERROR_NONE)
+{
     RUNNER_ASSERT(alias);
     RUNNER_ASSERT(data);
 
     ckmc_raw_buffer_s buffer;
     buffer.data = reinterpret_cast<unsigned char*>(const_cast<char*>(data));
-    buffer.size = strlen(data);
+    buffer.size = len;
     ckmc_policy_s policy;
     policy.password = NULL;
     policy.extractable = true;
@@ -189,7 +194,12 @@ ScopedSaveData::~ScopedSaveData()
 
 void GarbageCollector::save(const char* alias, const char *data, int expected_err)
 {
-    save_data(alias, data, expected_err);
+    save(alias, data, strlen(data), expected_err);
+}
+
+void GarbageCollector::save(const char* alias, const char *data, size_t len, int expected_err)
+{
+    save_data(alias, data, len, expected_err);
 
     if(CKMC_ERROR_NONE == expected_err)
     {
@@ -248,7 +258,11 @@ void check_remove_not_visible(const char* alias)
             << CKMCReadableError(ret));
 }
 
-void check_read(const char* alias, const char *label, const char *test_data, int expected_code)
+void check_read(const char* alias,
+                const char *label,
+                const char *test_data,
+                size_t len,
+                int expected_code)
 {
     ckmc_raw_buffer_s* buffer = NULL;
     int ret = ckmc_get_data(aliasWithLabel(label, alias).c_str(), NULL, &buffer);
@@ -260,8 +274,9 @@ void check_read(const char* alias, const char *label, const char *test_data, int
     {
         // compare data with expected
         RUNNER_ASSERT_MSG(
-                buffer->size == strlen(test_data),
-                "Extracted data length do not match expected data length (encrypted?).");
+                buffer->size == len,
+                "Extracted data length do not match expected data length (encrypted?):" <<
+                buffer->size << "!=" << len);
 
         RUNNER_ASSERT_MSG(
                 memcmp(const_cast<const char*>(reinterpret_cast<char*>(buffer->data)),
@@ -272,6 +287,11 @@ void check_read(const char* alias, const char *label, const char *test_data, int
     }
 }
 
+void check_read(const char* alias, const char *label, const char *test_data, int expected_code)
+{
+    check_read(alias, label, test_data, strlen(test_data), expected_code);
+}
+
 void check_read_allowed(const char* alias, const char *data)
 {
     // try to read previously saved data - label taken implicitly
index 41160c0..3694f0a 100644 (file)
@@ -120,6 +120,7 @@ private:
 };
 
 void save_data(const char* alias, const char *data, int expected_err = CKMC_ERROR_NONE);
+void save_data(const char* alias, const char *data, size_t len, int expected_err);
 class ScopedSaveData
 {
 public:
@@ -134,6 +135,7 @@ class GarbageCollector
 {
 public:
     void save(const char* alias, const char *data, int expected_err = CKMC_ERROR_NONE);
+    void save(const char* alias, const char *data, size_t len, int expected_err);
     virtual ~GarbageCollector();
 
 private:
@@ -159,7 +161,15 @@ private:
 void check_remove_allowed(const char* alias);
 void check_remove_denied(const char* alias);
 void check_remove_not_visible(const char* alias);
-void check_read(const char* alias, const char *label, const char *test_data, int expected_code = CKMC_ERROR_NONE);
+void check_read(const char* alias,
+                const char *label,
+                const char *test_data,
+                size_t len,
+                int expected_code = CKMC_ERROR_NONE);
+void check_read(const char* alias,
+                const char *label,
+                const char *test_data,
+                int expected_code = CKMC_ERROR_NONE);
 void check_read_allowed(const char* alias, const char *data);
 void check_read_not_visible(const char* alias);
 void allow_access(const char* alias, const char* accessor, int permissionMask);