Add backend id to database scheme
[platform/core/security/key-manager.git] / tests / DBFixture.cpp
index f463613..2a7238a 100644 (file)
@@ -2,6 +2,7 @@
 #include <db-crypto.h>
 #include <ckm/ckm-error.h>
 #include <DBFixture.h>
+#include <fstream>
 
 using namespace CKM;
 using namespace std::chrono;
@@ -9,11 +10,29 @@ using namespace std::chrono;
 
 DBFixture::DBFixture()
 {
+    BOOST_CHECK(unlink(m_crypto_db_fname) == 0 || errno == ENOENT);
+    init();
+}
+DBFixture::DBFixture(const char *db_fname)
+{
+    BOOST_CHECK(unlink(m_crypto_db_fname) == 0 || errno == ENOENT);
+
+    // copy file
+    std::ifstream f1(db_fname, std::fstream::binary);
+    std::ofstream f2(m_crypto_db_fname, std::fstream::trunc|std::fstream::binary);
+    f2 << f1.rdbuf();
+    f2.close();
+    f1.close();
+
+    init();
+}
+
+void DBFixture::init()
+{
     high_resolution_clock::time_point srand_feed = high_resolution_clock::now();
     srand(srand_feed.time_since_epoch().count());
 
-    BOOST_CHECK(unlink(m_crypto_db_fname) == 0 || errno == ENOENT);
-    BOOST_REQUIRE_NO_THROW(m_db = DBCrypto(m_crypto_db_fname, defaultPass));
+    BOOST_REQUIRE_NO_THROW(m_db = DB::Crypto(m_crypto_db_fname, defaultPass));
 }
 
 double DBFixture::performance_get_time_elapsed_ms()
@@ -37,55 +56,56 @@ void DBFixture::performance_stop(long num_operations_performed)
         BOOST_TEST_MESSAGE("\t<performance> average time per " << m_operation << ": " << time_elapsed_ms/num_operations_performed << "[ms]");
 }
 
-void DBFixture::generate_alias(unsigned int id, std::string & output)
+void DBFixture::generate_name(unsigned int id, Name & output)
 {
     std::stringstream ss;
-    ss << "alias_no_" << id;
+    ss << "name_no_" << id;
     output = ss.str();
 }
 
-void DBFixture::generate_label(unsigned int id, std::string & output)
+void DBFixture::generate_label(unsigned int id, Label & output)
 {
     std::stringstream ss;
     ss << "label_no_" << id;
     output = ss.str();
 }
 
-void DBFixture::generate_perf_DB(unsigned int num_alias, unsigned int num_label)
+void DBFixture::generate_perf_DB(unsigned int num_name, unsigned int num_elements)
 {
     // to speed up data creation - cache the row
-    DBRow rowPattern = create_default_row(DBDataType::BINARY_DATA);
+    DB::Row rowPattern = create_default_row(DataType::BINARY_DATA);
     rowPattern.data = RawBuffer(100, 20);
     rowPattern.dataSize = rowPattern.data.size();
     rowPattern.tag = RawBuffer(AES_GCM_TAG_SIZE, 1);
 
-    for(unsigned int i=0; i<num_alias; i++)
+    for(unsigned int i=0; i<num_name; i++)
     {
-        generate_alias(i, rowPattern.alias);
-        generate_label(i/num_label, rowPattern.smackLabel);
+        generate_name(i, rowPattern.name);
+        generate_label(i/num_elements, rowPattern.ownerLabel);
 
-        BOOST_REQUIRE_NO_THROW(m_db.saveDBRow(rowPattern));
+        BOOST_REQUIRE_NO_THROW(m_db.saveRow(rowPattern));
     }
 }
 
-long DBFixture::add_full_access_rights(unsigned int num_alias, unsigned int num_alias_per_label)
+long DBFixture::add_full_access_rights(unsigned int num_name, unsigned int num_name_per_label)
 {
     long iterations = 0;
-    unsigned int num_labels = num_alias / num_alias_per_label;
-    std::string alias, owner_label, accessor_label;
-    for(unsigned int a=0; a<num_alias; a++)
+    unsigned int num_labels = num_name / num_name_per_label;
+    Name name;
+    Label owner_label, accessor_label;
+    for(unsigned int a=0; a<num_name; a++)
     {
-        generate_alias(a, alias);
-        generate_label(a/num_alias_per_label, owner_label);
+        generate_name(a, name);
+        generate_label(a/num_name_per_label, owner_label);
         for(unsigned int l=0; l<num_labels; l++)
         {
             // bypass the owner label
-            if(l == (a/num_alias_per_label))
+            if(l == (a/num_name_per_label))
                 continue;
 
             // add permission
             generate_label(l, accessor_label);
-            add_permission(alias, owner_label, accessor_label);
+            add_permission(name, owner_label, accessor_label);
             iterations ++;
         }
     }
@@ -93,37 +113,38 @@ long DBFixture::add_full_access_rights(unsigned int num_alias, unsigned int num_
     return iterations;
 }
 
-DBRow DBFixture::create_default_row(DBDataType type)
+DB::Row DBFixture::create_default_row(DataType type)
 {
-    return create_default_row(m_default_alias, m_default_label, type);
+    return create_default_row(m_default_name, m_default_label, type);
 }
 
-DBRow DBFixture::create_default_row(const std::string &alias,
-                                    const std::string &label,
-                                    DBDataType type)
+DB::Row DBFixture::create_default_row(const Name &name,
+                                    const Label &label,
+                                    DataType type)
 {
-    DBRow row;
-    row.alias = alias;
-    row.smackLabel = label;
+    DB::Row row;
+    row.name = name;
+    row.ownerLabel = label;
     row.exportable = 1;
     row.algorithmType = DBCMAlgType::AES_GCM_256;
     row.dataType = type;
     row.iv = createDefaultPass();
     row.encryptionScheme = 0;
     row.dataSize = 0;
+    row.backendId = CryptoBackend::OpenSSL;
 
     return row;
 }
 
-void DBFixture::compare_row(const DBRow &lhs, const DBRow &rhs)
+void DBFixture::compare_row(const DB::Row &lhs, const DB::Row &rhs)
 {
-    BOOST_CHECK_MESSAGE(lhs.alias == rhs.alias,
-            "Aliases didn't match! Got: " << rhs.alias
-                << " , expected : " << lhs.alias);
+    BOOST_CHECK_MESSAGE(lhs.name == rhs.name,
+            "namees didn't match! Got: " << rhs.name
+                << " , expected : " << lhs.name);
 
-    BOOST_CHECK_MESSAGE(lhs.smackLabel == rhs.smackLabel,
-            "smackLabel didn't match! Got: " << rhs.smackLabel
-                << " , expected : " << lhs.smackLabel);
+    BOOST_CHECK_MESSAGE(lhs.ownerLabel == rhs.ownerLabel,
+            "smackLabel didn't match! Got: " << rhs.ownerLabel
+                << " , expected : " << lhs.ownerLabel);
 
     BOOST_CHECK_MESSAGE(lhs.exportable == rhs.exportable,
             "exportable didn't match! Got: " << rhs.exportable
@@ -136,73 +157,67 @@ void DBFixture::compare_row(const DBRow &lhs, const DBRow &rhs)
     BOOST_CHECK_MESSAGE(lhs.data == rhs.data,
             "data didn't match! Got: " << rhs.data.size()
                 << " , expected : " << lhs.data.size());
+
+    BOOST_CHECK_MESSAGE(lhs.backendId == rhs.backendId,
+            "backendId didn't match! Got: " << static_cast<int>(rhs.backendId)
+                << " , expected : " << static_cast<int>(lhs.backendId));
 }
 
-void DBFixture::check_DB_integrity(const DBRow &rowPattern)
+void DBFixture::check_DB_integrity(const DB::Row &rowPattern)
 {
-    BOOST_REQUIRE_NO_THROW(m_db.saveDBRow(rowPattern));
-    DBRow selectRow = rowPattern;
+    BOOST_REQUIRE_NO_THROW(m_db.saveRow(rowPattern));
 
-    DBCrypto::DBRowOptional optional_row;
-    BOOST_REQUIRE_NO_THROW(optional_row = m_db.getDBRow("alias", "label", DBDataType::BINARY_DATA));
+    DB::Crypto::RowOptional optional_row;
+    BOOST_REQUIRE_NO_THROW(optional_row = m_db.getRow("name", "label", DataType::BINARY_DATA));
     BOOST_REQUIRE_MESSAGE(optional_row, "Select didn't return any row");
 
-    compare_row(selectRow, rowPattern);
-    DBRow alias_duplicate = rowPattern;
-    alias_duplicate.data = createDefaultPass();
-    alias_duplicate.dataSize = alias_duplicate.data.size();
+    compare_row(*optional_row, rowPattern);
+    DB::Row name_duplicate = rowPattern;
+    name_duplicate.data = createDefaultPass();
+    name_duplicate.dataSize = name_duplicate.data.size();
 
-    BOOST_REQUIRE_THROW(m_db.saveDBRow(alias_duplicate), DBCrypto::Exception::AliasExists);
     unsigned int erased;
-    BOOST_REQUIRE_NO_THROW(erased = m_db.deleteDBRow("alias", "label"));
+    BOOST_REQUIRE_NO_THROW(erased = m_db.deleteRow("name", "label"));
     BOOST_REQUIRE_MESSAGE(erased > 0, "Inserted row didn't exist in db");
 
-    DBCrypto::DBRowOptional row_optional;
-    BOOST_REQUIRE_NO_THROW(row_optional = m_db.getDBRow("alias", "label", DBDataType::BINARY_DATA));
+    DB::Crypto::RowOptional row_optional;
+    BOOST_REQUIRE_NO_THROW(row_optional = m_db.getRow("name", "label", DataType::BINARY_DATA));
     BOOST_REQUIRE_MESSAGE(!row_optional, "Select should not return row after deletion");
 }
 
 void DBFixture::insert_row()
 {
-    insert_row(m_default_alias, m_default_label);
+    insert_row(m_default_name, m_default_label);
 }
 
-void DBFixture::insert_row(const std::string &alias, const std::string &accessor_label)
+void DBFixture::insert_row(const Name &name, const Label &owner_label)
 {
-    DBRow rowPattern = create_default_row(alias, accessor_label, DBDataType::BINARY_DATA);
+    DB::Row rowPattern = create_default_row(name, owner_label, DataType::BINARY_DATA);
     rowPattern.data = RawBuffer(100, 20);
     rowPattern.dataSize = rowPattern.data.size();
     rowPattern.tag = RawBuffer(AES_GCM_TAG_SIZE, 1);
-    BOOST_REQUIRE_NO_THROW(m_db.saveDBRow(rowPattern));
+    BOOST_REQUIRE_NO_THROW(m_db.saveRow(rowPattern));
 }
 
-void DBFixture::delete_row(const std::string &alias, const std::string &accessor_label)
+void DBFixture::delete_row(const Name &name, const Label &owner_label)
 {
     bool exit_flag;
-    BOOST_REQUIRE_NO_THROW(exit_flag = m_db.deleteDBRow(alias, accessor_label));
-    BOOST_REQUIRE_MESSAGE(true == exit_flag, "remove alias failed: no rows removed");
-}
-
-void DBFixture::add_permission(const std::string &alias, const std::string &owner_label, const std::string &accessor_label)
-{
-    int ec;
-    BOOST_REQUIRE_NO_THROW(ec = m_db.setAccessRights(owner_label,
-                                                   alias,
-                                                   accessor_label,
-                                                   CKM::AccessRight::AR_READ_REMOVE));
-    BOOST_REQUIRE_MESSAGE(CKM_API_SUCCESS == ec, "add permission failed: " << ec);
+    BOOST_REQUIRE_NO_THROW(exit_flag = m_db.deleteRow(name, owner_label));
+    BOOST_REQUIRE_MESSAGE(true == exit_flag, "remove name failed: no rows removed");
 }
 
-void DBFixture::read_row_expect_fail(const std::string &alias, const std::string &accessor_label)
+void DBFixture::add_permission(const Name &name, const Label &owner_label, const Label &accessor_label)
 {
-    DBCrypto::DBRowOptional row;
-    BOOST_REQUIRE_THROW(row = m_db.getDBRow(alias, accessor_label, DBDataType::BINARY_DATA), DBCrypto::Exception::PermissionDenied);
+    BOOST_REQUIRE_NO_THROW(m_db.setPermission(name,
+                                              owner_label,
+                                              accessor_label,
+                                              CKM::Permission::READ | CKM::Permission::REMOVE));
 }
 
-void DBFixture::read_row_expect_success(const std::string &alias, const std::string &accessor_label)
+void DBFixture::read_row_expect_success(const Name &name, const Label &owner_label)
 {
-    DBCrypto::DBRowOptional row;
-    BOOST_REQUIRE_NO_THROW(row = m_db.getDBRow(alias, accessor_label, DBDataType::BINARY_DATA));
+    DB::Crypto::RowOptional row;
+    BOOST_REQUIRE_NO_THROW(row = m_db.getRow(name, owner_label, DataType::BINARY_DATA));
     BOOST_REQUIRE_MESSAGE(row, "row is empty");
-    BOOST_REQUIRE_MESSAGE(row->alias == alias, "alias is not valid");
+    BOOST_REQUIRE_MESSAGE(row->name == name, "name is not valid");
 }