From 0e5e1429b442dda37d12766a3b112c941c9a64a6 Mon Sep 17 00:00:00 2001 From: Steven Murray <Steven.Murray@cern.ch> Date: Tue, 8 Mar 2016 16:53:53 +0100 Subject: [PATCH] Improved SqliteCatalogue tests --- catalogue/SqliteCatalogue.cpp | 184 +++++++++++++++--------------- catalogue/SqliteCatalogueTest.cpp | 127 +++++++++++++-------- catalogue/SqliteStmt.hpp | 3 + 3 files changed, 177 insertions(+), 137 deletions(-) diff --git a/catalogue/SqliteCatalogue.cpp b/catalogue/SqliteCatalogue.cpp index d293b9fc75..367f041338 100644 --- a/catalogue/SqliteCatalogue.cpp +++ b/catalogue/SqliteCatalogue.cpp @@ -41,29 +41,29 @@ void cta::catalogue::SqliteCatalogue::createDbSchema() { "GROUP_NAME TEXT," "COMMENT TEXT," - "CREATOR_USER TEXT," - "CREATOR_GROUP TEXT," - "CREATOR_HOST TEXT," - "CREATION_TIME INTEGER," + "CREATION_LOG_USER_NAME TEXT," + "CREATION_LOG_GROUP_NAME TEXT," + "CREATION_LOG_HOST_NAME TEXT," + "CREATION_LOG_TIME INTEGER," - "UPDATER_USER TEXT," - "UPDATER_GROUP TEXT," - "UPDATER_HOST TEXT," - "UPDATE_TIME INTEGER);" + "LAST_MODIFICATION_USER_NAME TEXT," + "LAST_MODIFICATION_GROUP_NAME TEXT," + "LAST_MODIFICATION_HOST_NAME TEXT," + "LAST_MODIFICATION_TIME INTEGER);" "CREATE TABLE ADMIN_HOST(" "HOST_NAME TEXT," "COMMENT TEXT," - "CREATOR_USER TEXT," - "CREATOR_GROUP TEXT," - "CREATOR_HOST TEXT," - "CREATION_TIME INTEGER," + "CREATION_LOG_USER_NAME TEXT," + "CREATION_LOG_GROUP_NAME TEXT," + "CREATION_LOG_HOST_NAME TEXT," + "CREATION_LOG_TIME INTEGER," - "UPDATER_USER TEXT," - "UPDATER_GROUP TEXT," - "UPDATER_HOST TEXT," - "UPDATE_TIME INTEGER);"); + "LAST_MODIFICATION_USER_NAME TEXT," + "LAST_MODIFICATION_GROUP_NAME TEXT," + "LAST_MODIFICATION_HOST_NAME TEXT," + "LAST_MODIFICATION_TIME INTEGER);"); } //------------------------------------------------------------------------------ @@ -89,39 +89,39 @@ void cta::catalogue::SqliteCatalogue::createBootstrapAdminAndHostNoAuth( "GROUP_NAME," "COMMENT," - "CREATOR_USER," - "CREATOR_GROUP," - "CREATOR_HOST," - "CREATION_TIME," + "CREATION_LOG_USER_NAME," + "CREATION_LOG_GROUP_NAME," + "CREATION_LOG_HOST_NAME," + "CREATION_LOG_TIME," - "UPDATER_USER," - "UPDATER_GROUP," - "UPDATER_HOST," - "UPDATE_TIME)" + "LAST_MODIFICATION_USER_NAME," + "LAST_MODIFICATION_GROUP_NAME," + "LAST_MODIFICATION_HOST_NAME," + "LAST_MODIFICATION_TIME)" "VALUES(" ":USER_NAME," ":GROUP_NAME," ":COMMENT," - ":CREATOR_USER," - ":CREATOR_GROUP," - ":CREATOR_HOST," - ":CREATION_TIME," + ":CREATION_LOG_USER_NAME," + ":CREATION_LOG_GROUP_NAME," + ":CREATION_LOG_HOST_NAME," + ":CREATION_LOG_TIME," - ":CREATOR_USER," - ":CREATOR_GROUP," - ":CREATOR_HOST," - ":CREATION_TIME);"; + ":CREATION_LOG_USER_NAME," + ":CREATION_LOG_GROUP_NAME," + ":CREATION_LOG_HOST_NAME," + ":CREATION_LOG_TIME);"; SqliteStmt stmt(m_conn, sql); stmt.bind(":USER_NAME", user.name); stmt.bind(":GROUP_NAME", user.group); stmt.bind(":COMMENT", comment); - stmt.bind(":CREATOR_USER", cliIdentity.user.name); - stmt.bind(":CREATOR_GROUP", cliIdentity.user.group); - stmt.bind(":CREATOR_HOST", cliIdentity.host); - stmt.bind(":CREATION_TIME", now); + stmt.bind(":CREATION_LOG_USER_NAME", cliIdentity.user.name); + stmt.bind(":CREATION_LOG_GROUP_NAME", cliIdentity.user.group); + stmt.bind(":CREATION_LOG_HOST_NAME", cliIdentity.host); + stmt.bind(":CREATION_LOG_TIME", now); stmt.step(); } @@ -132,37 +132,37 @@ void cta::catalogue::SqliteCatalogue::createBootstrapAdminAndHostNoAuth( "HOST_NAME," "COMMENT," - "CREATOR_USER," - "CREATOR_GROUP," - "CREATOR_HOST," - "CREATION_TIME," + "CREATION_LOG_USER_NAME," + "CREATION_LOG_GROUP_NAME," + "CREATION_LOG_HOST_NAME," + "CREATION_LOG_TIME," - "UPDATER_USER," - "UPDATER_GROUP," - "UPDATER_HOST," - "UPDATE_TIME)" + "LAST_MODIFICATION_USER_NAME," + "LAST_MODIFICATION_GROUP_NAME," + "LAST_MODIFICATION_HOST_NAME," + "LAST_MODIFICATION_TIME)" "VALUES(" ":HOST_NAME," ":COMMENT," - ":CREATOR_USER," - ":CREATOR_GROUP," - ":CREATOR_HOST," - ":CREATION_TIME," + ":CREATION_LOG_USER_NAME," + ":CREATION_LOG_GROUP_NAME," + ":CREATION_LOG_HOST_NAME," + ":CREATION_LOG_TIME," - ":CREATOR_USER," - ":CREATOR_GROUP," - ":CREATOR_HOST," - ":CREATION_TIME);"; + ":CREATION_LOG_USER_NAME," + ":CREATION_LOG_GROUP_NAME," + ":CREATION_LOG_HOST_NAME," + ":CREATION_LOG_TIME);"; SqliteStmt stmt(m_conn, sql); stmt.bind(":HOST_NAME", hostName); stmt.bind(":COMMENT", comment); - stmt.bind(":CREATOR_USER", cliIdentity.user.name); - stmt.bind(":CREATOR_GROUP", cliIdentity.user.group); - stmt.bind(":CREATOR_HOST", cliIdentity.host); - stmt.bind(":CREATION_TIME", now); + stmt.bind(":CREATION_LOG_USER_NAME", cliIdentity.user.name); + stmt.bind(":CREATION_LOG_GROUP_NAME", cliIdentity.user.group); + stmt.bind(":CREATION_LOG_HOST_NAME", cliIdentity.host); + stmt.bind(":CREATION_LOG_TIME", now); stmt.step(); } @@ -179,39 +179,39 @@ void cta::catalogue::SqliteCatalogue::createAdminUser(const common::dataStructur "GROUP_NAME," "COMMENT," - "CREATOR_USER," - "CREATOR_GROUP," - "CREATOR_HOST," - "CREATION_TIME," + "CREATION_LOG_USER_NAME," + "CREATION_LOG_GROUP_NAME," + "CREATION_LOG_HOST_NAME," + "CREATION_LOG_TIME," - "UPDATER_USER," - "UPDATER_GROUP," - "UPDATER_HOST," - "UPDATE_TIME)" + "LAST_MODIFICATION_USER_NAME," + "LAST_MODIFICATION_GROUP_NAME," + "LAST_MODIFICATION_HOST_NAME," + "LAST_MODIFICATION_TIME)" "VALUES(" ":USER_NAME," ":GROUP_NAME," ":COMMENT," - ":CREATOR_USER," - ":CREATOR_GROUP," - ":CREATOR_HOST," - ":CREATION_TIME," + ":CREATION_LOG_USER_NAME," + ":CREATION_LOG_GROUP_NAME," + ":CREATION_LOG_HOST_NAME," + ":CREATION_LOG_TIME," - ":CREATOR_USER," - ":CREATER_GROUP," - ":CREATER_HOST," - ":CREATION_TIME);"; + ":CREATION_LOG_USER_NAME," + ":CREATION_LOG_GROUP_NAME," + ":CREATION_LOG_HOST_NAME," + ":CREATION_LOG_TIME);"; SqliteStmt stmt(m_conn, sql); stmt.bind(":USER_NAME", user.name); stmt.bind(":GROUP_NAME", user.group); stmt.bind(":COMMENT", comment); - stmt.bind(":CREATOR_USER", cliIdentity.user.name); - stmt.bind(":CREATOR_GROUP", cliIdentity.user.group); - stmt.bind(":CREATOR_HOST", cliIdentity.host); - stmt.bind(":CREATION_TIME", now); + stmt.bind(":CREATION_LOG_USER_NAME", cliIdentity.user.name); + stmt.bind(":CREATION_LOG_GROUP_NAME", cliIdentity.user.group); + stmt.bind(":CREATION_LOG_HOST_NAME", cliIdentity.host); + stmt.bind(":CREATION_LOG_TIME", now); stmt.step(); } @@ -232,15 +232,15 @@ std::list<cta::common::dataStructures::AdminUser> cta::catalogue::SqliteCatalogu "GROUP_NAME AS GROUP_NAME," "COMMENT AS COMMENT," - "CREATOR_USER AS CREATOR_USER," - "CREATOR_GROUP AS CREATOR_GROUP," - "CREATOR_HOST AS CREATOR_HOST," - "CREATION_TIME AS CREATION_TIME," + "CREATION_LOG_USER_NAME AS CREATION_LOG_USER_NAME," + "CREATION_LOG_GROUP_NAME AS CREATION_LOG_GROUP_NAME," + "CREATION_LOG_HOST_NAME AS CREATION_LOG_HOST_NAME," + "CREATION_LOG_TIME AS CREATION_LOG_TIME," - "UPDATER_USER AS UPDATER_USER," - "UPDATER_GROUP AS UPDATER_GROUP," - "UPDATER_HOST AS UPDATER_HOST," - "UPDATE_TIME AS UPDATE_TIME " + "LAST_MODIFICATION_USER_NAME AS LAST_MODIFICATION_USER_NAME," + "LAST_MODIFICATION_GROUP_NAME AS LAST_MODIFICATION_GROUP_NAME," + "LAST_MODIFICATION_HOST_NAME AS LAST_MODIFICATION_HOST_NAME," + "LAST_MODIFICATION_TIME AS LAST_MODIFICATION_TIME " "FROM ADMIN_USER"; SqliteStmt stmt(m_conn, sql); ColumnNameToIdx nameToIdx; @@ -258,23 +258,23 @@ std::list<cta::common::dataStructures::AdminUser> cta::catalogue::SqliteCatalogu admin.comment = stmt.columnText(nameToIdx["COMMENT"]); common::dataStructures::UserIdentity creatorUI; - creatorUI.name = stmt.columnText(nameToIdx["CREATOR_USER"]); - creatorUI.group = stmt.columnText(nameToIdx["CREATOR_GROUP"]); + creatorUI.name = stmt.columnText(nameToIdx["CREATION_LOG_USER_NAME"]); + creatorUI.group = stmt.columnText(nameToIdx["CREATION_LOG_GROUP_NAME"]); common::dataStructures::EntryLog creationLog; creationLog.user = creatorUI; - creationLog.host = stmt.columnText(nameToIdx["CREATOR_HOST"]); - creationLog.time = stmt.columnUint64(nameToIdx["CREATION_TIME"]); + creationLog.host = stmt.columnText(nameToIdx["CREATION_LOG_HOST_NAME"]); + creationLog.time = stmt.columnUint64(nameToIdx["CREATION_LOG_TIME"]); admin.creationLog = creationLog; common::dataStructures::UserIdentity updaterUI; - updaterUI.name = stmt.columnText(nameToIdx["UPDATER_USER"]); - updaterUI.group = stmt.columnText(nameToIdx["UPDATER_GROUP"]); + updaterUI.name = stmt.columnText(nameToIdx["LAST_MODIFICATION_USER_NAME"]); + updaterUI.group = stmt.columnText(nameToIdx["LAST_MODIFICATION_GROUP_NAME"]); common::dataStructures::EntryLog updateLog; updateLog.user = updaterUI; - updateLog.host = stmt.columnText(nameToIdx["UPDATER_HOST"]); - updateLog.time = stmt.columnUint64(nameToIdx["UPDATE_TIME"]); + updateLog.host = stmt.columnText(nameToIdx["LAST_MODIFICATION_HOST_NAME"]); + updateLog.time = stmt.columnUint64(nameToIdx["LAST_MODIFICATION_TIME"]); admin.lastModificationLog = updateLog; admins.push_back(admin); } diff --git a/catalogue/SqliteCatalogueTest.cpp b/catalogue/SqliteCatalogueTest.cpp index 61d93760c8..0ecf36200d 100644 --- a/catalogue/SqliteCatalogueTest.cpp +++ b/catalogue/SqliteCatalogueTest.cpp @@ -20,29 +20,29 @@ #include <gtest/gtest.h> #include <memory> +#include <set> namespace unitTests { class cta_catalogue_SqliteCatalogueTest : public ::testing::Test { public: - cta_catalogue_SqliteCatalogueTest() { - cta::common::dataStructures::UserIdentity user; - user.group = "1"; - user.name = "2"; - m_cliIdentity.user = user; - m_cliIdentity.host = "cliIdentityHost"; - - cta::common::dataStructures::UserIdentity user1; - user1.group = "3"; - user1.name = "4"; - m_admin1.user = user1; - m_admin1.host = "admin1Host"; - - cta::common::dataStructures::UserIdentity user2; - user2.group = "5"; - user2.name = "6"; - m_admin2.user = user2; - m_admin2.host = "admin2Host"; + cta_catalogue_SqliteCatalogueTest(): + m_bootstrapComment("bootstrap comment") { + + m_cliUI.group = "cli_group_name"; + m_cliUI.name = "cli_user_name"; + m_cliSI.user = m_cliUI; + m_cliSI.host = "cli_host"; + + m_bootstrapAdminUI.group = "bootstrap_admin_group_name"; + m_bootstrapAdminUI.name = "bootstrap_admin_user_name"; + m_bootstrapAdminSI.user = m_bootstrapAdminUI; + m_bootstrapAdminSI.host = "bootstrap_host"; + + m_adminUI.group = "admin_group_name"; + m_adminUI.name = "admin_user_name"; + m_adminSI.user = m_adminUI; + m_adminSI.host = "admin_host"; } protected: @@ -53,9 +53,13 @@ protected: virtual void TearDown() { } - cta::common::dataStructures::SecurityIdentity m_cliIdentity; - cta::common::dataStructures::SecurityIdentity m_admin1; - cta::common::dataStructures::SecurityIdentity m_admin2; + const std::string m_bootstrapComment; + cta::common::dataStructures::UserIdentity m_cliUI; + cta::common::dataStructures::SecurityIdentity m_cliSI; + cta::common::dataStructures::UserIdentity m_bootstrapAdminUI; + cta::common::dataStructures::SecurityIdentity m_bootstrapAdminSI; + cta::common::dataStructures::UserIdentity m_adminUI; + cta::common::dataStructures::SecurityIdentity m_adminSI; }; TEST_F(cta_catalogue_SqliteCatalogueTest, constructor) { @@ -71,23 +75,21 @@ TEST_F(cta_catalogue_SqliteCatalogueTest, createBootstrapAdminAndHostNoAuth) { std::unique_ptr<catalogue::Catalogue> catalogue; ASSERT_NO_THROW(catalogue.reset(new catalogue::SqliteCatalogue())); - common::dataStructures::UserIdentity admin1User = m_admin1.user; - const std::string bootstrapComment = "createBootstrapAdminAndHostNoAuth"; - ASSERT_NO_THROW(catalogue->createBootstrapAdminAndHostNoAuth( - m_cliIdentity, admin1User, m_admin1.host, bootstrapComment)); + catalogue->createBootstrapAdminAndHostNoAuth( + m_cliSI, m_bootstrapAdminUI, m_bootstrapAdminSI.host, m_bootstrapComment); { std::list<common::dataStructures::AdminUser> admins; - ASSERT_NO_THROW(admins = catalogue->getAdminUsers(m_admin1)); + ASSERT_NO_THROW(admins = catalogue->getAdminUsers(m_bootstrapAdminSI)); ASSERT_EQ(1, admins.size()); const common::dataStructures::AdminUser admin = admins.front(); - ASSERT_EQ(bootstrapComment, admin.comment); + ASSERT_EQ(m_bootstrapComment, admin.comment); const common::dataStructures::EntryLog creationLog = admin.creationLog; - ASSERT_EQ(m_cliIdentity.user.name, creationLog.user.name); - ASSERT_EQ(m_cliIdentity.user.group, creationLog.user.group); - ASSERT_EQ(m_cliIdentity.host, creationLog.host); + ASSERT_EQ(m_cliSI.user.name, creationLog.user.name); + ASSERT_EQ(m_cliSI.user.group, creationLog.user.group); + ASSERT_EQ(m_cliSI.host, creationLog.host); const common::dataStructures::EntryLog lastModificationLog = admin.lastModificationLog; @@ -101,38 +103,73 @@ TEST_F(cta_catalogue_SqliteCatalogueTest, createAdminUser) { std::unique_ptr<catalogue::Catalogue> catalogue; ASSERT_NO_THROW(catalogue.reset(new catalogue::SqliteCatalogue())); - common::dataStructures::UserIdentity admin1User = m_admin1.user; - const std::string bootstrapComment = "createBootstrapAdminAndHostNoAuth"; ASSERT_NO_THROW(catalogue->createBootstrapAdminAndHostNoAuth( - m_cliIdentity, admin1User, m_admin1.host, bootstrapComment)); + m_cliSI, m_bootstrapAdminUI, m_bootstrapAdminSI.host, m_bootstrapComment)); { std::list<common::dataStructures::AdminUser> admins; - ASSERT_NO_THROW(admins = catalogue->getAdminUsers(m_admin1)); + ASSERT_NO_THROW(admins = catalogue->getAdminUsers(m_bootstrapAdminSI)); ASSERT_EQ(1, admins.size()); const common::dataStructures::AdminUser admin = admins.front(); - ASSERT_EQ(bootstrapComment, admin.comment); + ASSERT_EQ(m_bootstrapComment, admin.comment); const common::dataStructures::EntryLog creationLog = admin.creationLog; - ASSERT_EQ(m_cliIdentity.user.name, creationLog.user.name); - ASSERT_EQ(m_cliIdentity.user.group, creationLog.user.group); - ASSERT_EQ(m_cliIdentity.host, creationLog.host); + ASSERT_EQ(m_cliSI.user.name, creationLog.user.name); + ASSERT_EQ(m_cliSI.user.group, creationLog.user.group); + ASSERT_EQ(m_cliSI.host, creationLog.host); const common::dataStructures::EntryLog lastModificationLog = admin.lastModificationLog; ASSERT_EQ(creationLog, lastModificationLog); } - const std::string createAdminUserComment = "createAdminUser"; - common::dataStructures::UserIdentity admin2User = m_admin2.user; - ASSERT_NO_THROW(catalogue->createAdminUser(m_admin1, admin2User, + const std::string createAdminUserComment = "create admin user comment"; + ASSERT_NO_THROW(catalogue->createAdminUser(m_bootstrapAdminSI, m_adminUI, createAdminUserComment)); { - std::list<common::dataStructures::AdminUser> admins; - admins = catalogue->getAdminUsers(m_admin1); - ASSERT_EQ(2, admins.size()); + std::list<common::dataStructures::AdminUser> adminList; + adminList = catalogue->getAdminUsers(m_bootstrapAdminSI); + ASSERT_EQ(2, adminList.size()); + + const common::dataStructures::AdminUser elem1 = adminList.front(); + adminList.pop_front(); + const common::dataStructures::AdminUser elem2 = adminList.front(); + + ASSERT_NE(elem1, elem2); + ASSERT_TRUE((elem1.user == m_bootstrapAdminUI && elem2.user == m_adminUI) || + (elem2.user == m_bootstrapAdminUI && elem1.user == m_adminUI)); + + if(elem1.user == m_bootstrapAdminUI) { + ASSERT_EQ(m_bootstrapAdminUI, elem1.user); + ASSERT_EQ(m_bootstrapComment, elem1.comment); + ASSERT_EQ(m_cliSI.user, elem1.creationLog.user); + ASSERT_EQ(m_cliSI.host, elem1.creationLog.host); + ASSERT_EQ(m_cliSI.user, elem1.lastModificationLog.user); + ASSERT_EQ(m_cliSI.host, elem1.lastModificationLog.host); + + ASSERT_EQ(m_adminUI, elem2.user); + ASSERT_EQ(createAdminUserComment, elem2.comment); + ASSERT_EQ(m_bootstrapAdminSI.user, elem2.creationLog.user); + ASSERT_EQ(m_bootstrapAdminSI.host, elem2.creationLog.host); + ASSERT_EQ(m_bootstrapAdminSI.user, elem2.lastModificationLog.user); + ASSERT_EQ(m_bootstrapAdminSI.host, elem2.lastModificationLog.host); + } else { + ASSERT_EQ(m_bootstrapAdminUI, elem2.user); + ASSERT_EQ(m_bootstrapComment, elem2.comment); + ASSERT_EQ(m_cliSI.user, elem2.creationLog.user); + ASSERT_EQ(m_cliSI.host, elem2.creationLog.host); + ASSERT_EQ(m_cliSI.user, elem2.lastModificationLog.user); + ASSERT_EQ(m_cliSI.host, elem2.lastModificationLog.host); + + ASSERT_EQ(m_adminUI, elem1.user); + ASSERT_EQ(createAdminUserComment, elem1.comment); + ASSERT_EQ(m_bootstrapAdminSI.user, elem1.creationLog.user); + ASSERT_EQ(m_bootstrapAdminSI.host, elem1.creationLog.host); + ASSERT_EQ(m_bootstrapAdminSI.user, elem1.lastModificationLog.user); + ASSERT_EQ(m_bootstrapAdminSI.host, elem1.lastModificationLog.host); + } } } @@ -142,7 +179,7 @@ TEST_F(cta_catalogue_SqliteCatalogueTest, isAdmin_notAdmin) { std::unique_ptr<catalogue::Catalogue> catalogue; ASSERT_NO_THROW(catalogue.reset(new catalogue::SqliteCatalogue())); - ASSERT_FALSE(catalogue->isAdmin(m_cliIdentity)); + ASSERT_FALSE(catalogue->isAdmin(m_cliSI)); } } // namespace unitTests diff --git a/catalogue/SqliteStmt.hpp b/catalogue/SqliteStmt.hpp index f17a213b23..550ae49399 100644 --- a/catalogue/SqliteStmt.hpp +++ b/catalogue/SqliteStmt.hpp @@ -90,6 +90,9 @@ public: /** * Convenience wrapper around sqlite3_column_text(). * + * If sqlite3_column_text() returns NULL then this method returns an empty + * string. + * * @param The index of the column. * @return The value of the specified column. */ -- GitLab