Add backend id to database scheme
[platform/core/security/key-manager.git] / tests / DBFixture.cpp
index db6c46f..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()
@@ -51,10 +70,10 @@ void DBFixture::generate_label(unsigned int id, Label & output)
     output = ss.str();
 }
 
-void DBFixture::generate_perf_DB(unsigned int num_name, 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);
@@ -62,9 +81,9 @@ void DBFixture::generate_perf_DB(unsigned int num_name, unsigned int num_label)
     for(unsigned int i=0; i<num_name; i++)
     {
         generate_name(i, rowPattern.name);
-        generate_label(i/num_label, rowPattern.ownerLabel);
+        generate_label(i/num_elements, rowPattern.ownerLabel);
 
-        BOOST_REQUIRE_NO_THROW(m_db.saveDBRow(rowPattern));
+        BOOST_REQUIRE_NO_THROW(m_db.saveRow(rowPattern));
     }
 }
 
@@ -94,16 +113,16 @@ long DBFixture::add_full_access_rights(unsigned int num_name, unsigned int num_n
     return iterations;
 }
 
-DBRow DBFixture::create_default_row(DBDataType type)
+DB::Row DBFixture::create_default_row(DataType type)
 {
     return create_default_row(m_default_name, m_default_label, type);
 }
 
-DBRow DBFixture::create_default_row(const Name &name,
+DB::Row DBFixture::create_default_row(const Name &name,
                                     const Label &label,
-                                    DBDataType type)
+                                    DataType type)
 {
-    DBRow row;
+    DB::Row row;
     row.name = name;
     row.ownerLabel = label;
     row.exportable = 1;
@@ -112,11 +131,12 @@ DBRow DBFixture::create_default_row(const Name &name,
     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.name == rhs.name,
             "namees didn't match! Got: " << rhs.name
@@ -137,28 +157,31 @@ 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("name", "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 name_duplicate = rowPattern;
+    compare_row(*optional_row, rowPattern);
+    DB::Row name_duplicate = rowPattern;
     name_duplicate.data = createDefaultPass();
     name_duplicate.dataSize = name_duplicate.data.size();
 
     unsigned int erased;
-    BOOST_REQUIRE_NO_THROW(erased = m_db.deleteDBRow("name", "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("name", "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");
 }
 
@@ -169,34 +192,32 @@ void DBFixture::insert_row()
 
 void DBFixture::insert_row(const Name &name, const Label &owner_label)
 {
-    DBRow rowPattern = create_default_row(name, owner_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 Name &name, const Label &owner_label)
 {
     bool exit_flag;
-    BOOST_REQUIRE_NO_THROW(exit_flag = m_db.deleteDBRow(name, owner_label));
+    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::add_permission(const Name &name, const Label &owner_label, const Label &accessor_label)
 {
-    int ec;
-    BOOST_REQUIRE_NO_THROW(ec = m_db.setPermission(name,
-                                                     owner_label,
-                                                     accessor_label,
-                                                     CKM::Permission::READ_REMOVE));
-    BOOST_REQUIRE_MESSAGE(CKM_API_SUCCESS == ec, "add permission failed: " << ec);
+    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 Name &name, const Label &owner_label)
 {
-    DBCrypto::DBRowOptional row;
-    BOOST_REQUIRE_NO_THROW(row = m_db.getDBRow(name, owner_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->name == name, "name is not valid");
 }