diff --git a/catalogue/1.2/mysql_catalogue_schema.sql b/catalogue/2.0/mysql_catalogue_schema.sql similarity index 99% rename from catalogue/1.2/mysql_catalogue_schema.sql rename to catalogue/2.0/mysql_catalogue_schema.sql index 5ad52db9ebe2d570dbfc3e2b45230391e05b9234..20e616f977bce6a24e9fab16c92c823d764a4e17 100644 --- a/catalogue/1.2/mysql_catalogue_schema.sql +++ b/catalogue/2.0/mysql_catalogue_schema.sql @@ -90,11 +90,10 @@ CREATE TABLE STORAGE_CLASS( CREATE TABLE TAPE_POOL( TAPE_POOL_ID BIGINT UNSIGNED CONSTRAINT TAPE_POOL_TPI_NN NOT NULL, TAPE_POOL_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_TPN_NN NOT NULL, - VO VARCHAR(100) CONSTRAINT TAPE_POOL_VO_NN NOT NULL, + VIRTUAL_ORGANIZATION_ID BIGINT UNSIGNED CONSTRAINT TAPE_POOL_VOI_NN NOT NULL, NB_PARTIAL_TAPES BIGINT UNSIGNED CONSTRAINT TAPE_POOL_NPT_NN NOT NULL, IS_ENCRYPTED CHAR(1) CONSTRAINT TAPE_POOL_IE_NN NOT NULL, SUPPLY VARCHAR(100), - VIRTUAL_ORGANIZATION_ID BIGINT UNSIGNED, USER_COMMENT VARCHAR(1000) CONSTRAINT TAPE_POOL_UC_NN NOT NULL, CREATION_LOG_USER_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL, CREATION_LOG_HOST_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL, @@ -317,8 +316,8 @@ INSERT INTO CTA_CATALOGUE( SCHEMA_VERSION_MINOR, STATUS) VALUES( - 1, 2, + 0, 'PRODUCTION'); ALTER TABLE CTA_CATALOGUE ADD CONSTRAINT CATALOGUE_STATUS_CONTENT_CK CHECK((NEXT_SCHEMA_VERSION_MAJOR IS NULL AND NEXT_SCHEMA_VERSION_MINOR IS NULL AND STATUS='PRODUCTION') OR (STATUS='UPGRADING')); \ No newline at end of file diff --git a/catalogue/1.2/oracle_catalogue_schema.sql b/catalogue/2.0/oracle_catalogue_schema.sql similarity index 99% rename from catalogue/1.2/oracle_catalogue_schema.sql rename to catalogue/2.0/oracle_catalogue_schema.sql index a5c6235fb447a0cb3d34381c8aaa22ef1b654c87..8514158c3924f180a1fb2013366c1155a6ef7b45 100644 --- a/catalogue/1.2/oracle_catalogue_schema.sql +++ b/catalogue/2.0/oracle_catalogue_schema.sql @@ -116,11 +116,10 @@ CREATE TABLE STORAGE_CLASS( CREATE TABLE TAPE_POOL( TAPE_POOL_ID NUMERIC(20, 0) CONSTRAINT TAPE_POOL_TPI_NN NOT NULL, TAPE_POOL_NAME VARCHAR2(100) CONSTRAINT TAPE_POOL_TPN_NN NOT NULL, - VO VARCHAR2(100) CONSTRAINT TAPE_POOL_VO_NN NOT NULL, + VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0) CONSTRAINT TAPE_POOL_VOI_NN NOT NULL, NB_PARTIAL_TAPES NUMERIC(20, 0) CONSTRAINT TAPE_POOL_NPT_NN NOT NULL, IS_ENCRYPTED CHAR(1) CONSTRAINT TAPE_POOL_IE_NN NOT NULL, SUPPLY VARCHAR2(100), - VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0), USER_COMMENT VARCHAR2(1000) CONSTRAINT TAPE_POOL_UC_NN NOT NULL, CREATION_LOG_USER_NAME VARCHAR2(100) CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL, CREATION_LOG_HOST_NAME VARCHAR2(100) CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL, @@ -343,8 +342,8 @@ INSERT INTO CTA_CATALOGUE( SCHEMA_VERSION_MINOR, STATUS) VALUES( - 1, 2, + 0, 'PRODUCTION'); ALTER TABLE CTA_CATALOGUE ADD CONSTRAINT CATALOGUE_STATUS_CONTENT_CK CHECK((NEXT_SCHEMA_VERSION_MAJOR IS NULL AND NEXT_SCHEMA_VERSION_MINOR IS NULL AND STATUS='PRODUCTION') OR (NEXT_SCHEMA_VERSION_MAJOR IS NOT NULL AND NEXT_SCHEMA_VERSION_MINOR IS NOT NULL AND STATUS='UPGRADING')) INITIALLY DEFERRED; diff --git a/catalogue/1.2/postgres_catalogue_schema.sql b/catalogue/2.0/postgres_catalogue_schema.sql similarity index 99% rename from catalogue/1.2/postgres_catalogue_schema.sql rename to catalogue/2.0/postgres_catalogue_schema.sql index 52d9a1115d65ee13119fb68460d68728ba4d288b..626a945d57c1c24be6656ca3c04c30fdd54c6841 100644 --- a/catalogue/1.2/postgres_catalogue_schema.sql +++ b/catalogue/2.0/postgres_catalogue_schema.sql @@ -100,11 +100,10 @@ CREATE TABLE STORAGE_CLASS( CREATE TABLE TAPE_POOL( TAPE_POOL_ID NUMERIC(20, 0) CONSTRAINT TAPE_POOL_TPI_NN NOT NULL, TAPE_POOL_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_TPN_NN NOT NULL, - VO VARCHAR(100) CONSTRAINT TAPE_POOL_VO_NN NOT NULL, + VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0) CONSTRAINT TAPE_POOL_VOI_NN NOT NULL, NB_PARTIAL_TAPES NUMERIC(20, 0) CONSTRAINT TAPE_POOL_NPT_NN NOT NULL, IS_ENCRYPTED CHAR(1) CONSTRAINT TAPE_POOL_IE_NN NOT NULL, SUPPLY VARCHAR(100), - VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0), USER_COMMENT VARCHAR(1000) CONSTRAINT TAPE_POOL_UC_NN NOT NULL, CREATION_LOG_USER_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL, CREATION_LOG_HOST_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL, @@ -327,8 +326,8 @@ INSERT INTO CTA_CATALOGUE( SCHEMA_VERSION_MINOR, STATUS) VALUES( - 1, 2, + 0, 'PRODUCTION'); ALTER TABLE ARCHIVE_FILE DROP CONSTRAINT ARCHIVE_FILE_DIN_DFI_UN; diff --git a/catalogue/1.2/sqlite_catalogue_schema.sql b/catalogue/2.0/sqlite_catalogue_schema.sql similarity index 99% rename from catalogue/1.2/sqlite_catalogue_schema.sql rename to catalogue/2.0/sqlite_catalogue_schema.sql index 81e7f07d9e44b7830ed164fe97bb1035d911b73b..621ecf12a1cd42e55de8e82f7396f1f27fcf5824 100644 --- a/catalogue/1.2/sqlite_catalogue_schema.sql +++ b/catalogue/2.0/sqlite_catalogue_schema.sql @@ -80,11 +80,10 @@ CREATE TABLE STORAGE_CLASS( CREATE TABLE TAPE_POOL( TAPE_POOL_ID INTEGER CONSTRAINT TAPE_POOL_TPI_NN NOT NULL, TAPE_POOL_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_TPN_NN NOT NULL, - VO VARCHAR(100) CONSTRAINT TAPE_POOL_VO_NN NOT NULL, + VIRTUAL_ORGANIZATION_ID INTEGER CONSTRAINT TAPE_POOL_VOI_NN NOT NULL, NB_PARTIAL_TAPES INTEGER CONSTRAINT TAPE_POOL_NPT_NN NOT NULL, IS_ENCRYPTED CHAR(1) CONSTRAINT TAPE_POOL_IE_NN NOT NULL, SUPPLY VARCHAR(100), - VIRTUAL_ORGANIZATION_ID INTEGER, USER_COMMENT VARCHAR(1000) CONSTRAINT TAPE_POOL_UC_NN NOT NULL, CREATION_LOG_USER_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL, CREATION_LOG_HOST_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL, @@ -307,6 +306,6 @@ INSERT INTO CTA_CATALOGUE( SCHEMA_VERSION_MINOR, STATUS) VALUES( - 1, 2, + 0, 'PRODUCTION'); diff --git a/catalogue/AllCatalogueSchema.hpp b/catalogue/AllCatalogueSchema.hpp index c4d80239c55473ceddfb121bd3c7361ee77b3aa6..65310e02df3a592c8061a18901020d48cf112bd0 100644 --- a/catalogue/AllCatalogueSchema.hpp +++ b/catalogue/AllCatalogueSchema.hpp @@ -2464,7 +2464,7 @@ namespace catalogue{ " CATALOGUE_STATUS_CONTENT_CK CHECK((NEXT_SCHEMA_VERSION_MAJOR IS NULL AND NEXT_SCHEMA_VERSION_MINOR IS NULL AND STATUS='PRODUCTION') OR (STATUS='UPGRADING'));" }, } }, - {"1.2", + {"2.0", { {"oracle", "CREATE SEQUENCE ARCHIVE_FILE_ID_SEQ" " INCREMENT BY 1" @@ -2584,11 +2584,10 @@ namespace catalogue{ "CREATE TABLE TAPE_POOL(" " TAPE_POOL_ID NUMERIC(20, 0) CONSTRAINT TAPE_POOL_TPI_NN NOT NULL," " TAPE_POOL_NAME VARCHAR2(100) CONSTRAINT TAPE_POOL_TPN_NN NOT NULL," - " VO VARCHAR2(100) CONSTRAINT TAPE_POOL_VO_NN NOT NULL," + " VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0) CONSTRAINT TAPE_POOL_VOI_NN NOT NULL," " NB_PARTIAL_TAPES NUMERIC(20, 0) CONSTRAINT TAPE_POOL_NPT_NN NOT NULL," " IS_ENCRYPTED CHAR(1) CONSTRAINT TAPE_POOL_IE_NN NOT NULL," " SUPPLY VARCHAR2(100)," - " VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)," " USER_COMMENT VARCHAR2(1000) CONSTRAINT TAPE_POOL_UC_NN NOT NULL," " CREATION_LOG_USER_NAME VARCHAR2(100) CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL," " CREATION_LOG_HOST_NAME VARCHAR2(100) CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL," @@ -2811,8 +2810,8 @@ namespace catalogue{ " SCHEMA_VERSION_MINOR," " STATUS)" "VALUES(" - " 1," " 2," + " 0," " 'PRODUCTION');" "ALTER TABLE CTA_CATALOGUE ADD CONSTRAINT CATALOGUE_STATUS_CONTENT_CK CHECK((NEXT_SCHEMA_VERSION_MAJOR IS NULL AND NEXT_SCHEMA_VERSION_MINOR IS NULL AND STATUS='PRODUCTION') OR (NEXT_SCHEMA_VERSION_MAJOR IS NOT NULL AND NEXT_SCHEMA_VERSION_MINOR IS NOT NULL AND STATUS='UPGRADING')) INITIALLY DEFERRED;" "" @@ -2910,11 +2909,10 @@ namespace catalogue{ "CREATE TABLE TAPE_POOL(" " TAPE_POOL_ID BIGINT UNSIGNED CONSTRAINT TAPE_POOL_TPI_NN NOT NULL," " TAPE_POOL_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_TPN_NN NOT NULL," - " VO VARCHAR(100) CONSTRAINT TAPE_POOL_VO_NN NOT NULL," + " VIRTUAL_ORGANIZATION_ID BIGINT UNSIGNED CONSTRAINT TAPE_POOL_VOI_NN NOT NULL," " NB_PARTIAL_TAPES BIGINT UNSIGNED CONSTRAINT TAPE_POOL_NPT_NN NOT NULL," " IS_ENCRYPTED CHAR(1) CONSTRAINT TAPE_POOL_IE_NN NOT NULL," " SUPPLY VARCHAR(100)," - " VIRTUAL_ORGANIZATION_ID BIGINT UNSIGNED," " USER_COMMENT VARCHAR(1000) CONSTRAINT TAPE_POOL_UC_NN NOT NULL," " CREATION_LOG_USER_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL," " CREATION_LOG_HOST_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL," @@ -3137,8 +3135,8 @@ namespace catalogue{ " SCHEMA_VERSION_MINOR," " STATUS)" "VALUES(" - " 1," " 2," + " 0," " 'PRODUCTION');" "ALTER TABLE CTA_CATALOGUE ADD CONSTRAINT " " CATALOGUE_STATUS_CONTENT_CK CHECK((NEXT_SCHEMA_VERSION_MAJOR IS NULL AND NEXT_SCHEMA_VERSION_MINOR IS NULL AND STATUS='PRODUCTION') OR (STATUS='UPGRADING'));" @@ -3225,11 +3223,10 @@ namespace catalogue{ "CREATE TABLE TAPE_POOL(" " TAPE_POOL_ID INTEGER CONSTRAINT TAPE_POOL_TPI_NN NOT NULL," " TAPE_POOL_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_TPN_NN NOT NULL," - " VO VARCHAR(100) CONSTRAINT TAPE_POOL_VO_NN NOT NULL," + " VIRTUAL_ORGANIZATION_ID INTEGER CONSTRAINT TAPE_POOL_VOI_NN NOT NULL," " NB_PARTIAL_TAPES INTEGER CONSTRAINT TAPE_POOL_NPT_NN NOT NULL," " IS_ENCRYPTED CHAR(1) CONSTRAINT TAPE_POOL_IE_NN NOT NULL," " SUPPLY VARCHAR(100)," - " VIRTUAL_ORGANIZATION_ID INTEGER," " USER_COMMENT VARCHAR(1000) CONSTRAINT TAPE_POOL_UC_NN NOT NULL," " CREATION_LOG_USER_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL," " CREATION_LOG_HOST_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL," @@ -3452,8 +3449,8 @@ namespace catalogue{ " SCHEMA_VERSION_MINOR," " STATUS)" "VALUES(" - " 1," " 2," + " 0," " 'PRODUCTION');" }, {"postgres", "CREATE SEQUENCE ARCHIVE_FILE_ID_SEQ" @@ -3558,11 +3555,10 @@ namespace catalogue{ "CREATE TABLE TAPE_POOL(" " TAPE_POOL_ID NUMERIC(20, 0) CONSTRAINT TAPE_POOL_TPI_NN NOT NULL," " TAPE_POOL_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_TPN_NN NOT NULL," - " VO VARCHAR(100) CONSTRAINT TAPE_POOL_VO_NN NOT NULL," + " VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0) CONSTRAINT TAPE_POOL_VOI_NN NOT NULL," " NB_PARTIAL_TAPES NUMERIC(20, 0) CONSTRAINT TAPE_POOL_NPT_NN NOT NULL," " IS_ENCRYPTED CHAR(1) CONSTRAINT TAPE_POOL_IE_NN NOT NULL," " SUPPLY VARCHAR(100)," - " VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)," " USER_COMMENT VARCHAR(1000) CONSTRAINT TAPE_POOL_UC_NN NOT NULL," " CREATION_LOG_USER_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL," " CREATION_LOG_HOST_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL," @@ -3785,8 +3781,8 @@ namespace catalogue{ " SCHEMA_VERSION_MINOR," " STATUS)" "VALUES(" - " 1," " 2," + " 0," " 'PRODUCTION');" "ALTER TABLE ARCHIVE_FILE DROP CONSTRAINT" " ARCHIVE_FILE_DIN_DFI_UN;" diff --git a/catalogue/CatalogueTest.cpp b/catalogue/CatalogueTest.cpp index 18a19b82eb7609197a6376f03a06ce8a2832e781..9a2d2178b65325a509638a6e90ee256ac6fdd381 100644 --- a/catalogue/CatalogueTest.cpp +++ b/catalogue/CatalogueTest.cpp @@ -317,6 +317,14 @@ std::map<std::string, cta::catalogue::TapePool> cta_catalogue_CatalogueTest::tap } } +void cta_catalogue_CatalogueTest::createVo(const std::string &voName){ + using namespace cta; + common::dataStructures::VirtualOrganization vo; + vo.name = voName; + vo.comment = "comment"; + m_catalogue->createVirtualOrganization(m_admin,vo); +} + TEST_P(cta_catalogue_CatalogueTest, createAdminUser) { using namespace cta; @@ -878,6 +886,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool) { const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); const std::string comment = "Create tape pool"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment); ASSERT_TRUE(m_catalogue->tapePoolExists(tapePoolName)); @@ -888,7 +897,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_TRUE((bool)pool.supply); @@ -923,6 +932,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool_null_supply) { const bool isEncrypted = true; const cta::optional<std::string> supply; const std::string comment = "Create tape pool"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment); ASSERT_TRUE(m_catalogue->tapePoolExists(tapePoolName)); @@ -933,7 +943,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool_null_supply) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_FALSE((bool)pool.supply); @@ -961,11 +971,25 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool_same_twice) { const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); const std::string comment = "Create tape pool"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment); ASSERT_THROW(m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment), exception::UserError); } +TEST_P(cta_catalogue_CatalogueTest, createTapePool_vo_does_not_exist) { + using namespace cta; + + const std::string tapePoolName = "tape_pool"; + const std::string vo = "vo"; + const uint64_t nbPartialTapes = 2; + const bool isEncrypted = true; + const cta::optional<std::string> supply("value for the supply pool mechanism"); + const std::string comment = "Create tape pool"; + ASSERT_THROW(m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment), + exception::UserError); +} + TEST_P(cta_catalogue_CatalogueTest, deleteTapePool) { using namespace cta; @@ -977,6 +1001,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteTapePool) { const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); const std::string comment = "Create tape pool"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment); const auto pools = m_catalogue->getTapePools(); @@ -985,7 +1010,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteTapePool) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_EQ(0, pool.nbTapes); @@ -1032,7 +1057,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteTapePool_notEmpty) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); - + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); { const auto pools = m_catalogue->getTapePools(); @@ -1040,7 +1065,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteTapePool_notEmpty) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(0, pool.nbTapes); ASSERT_EQ(0, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -1088,7 +1113,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteTapePool_notEmpty) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(1, pool.nbTapes); ASSERT_EQ(capacityInBytes, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -1110,6 +1135,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool_emptyStringTapePoolName) { const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); const std::string comment = "Create tape pool"; + createVo(vo); ASSERT_THROW(m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment), catalogue::UserSpecifiedAnEmptyStringTapePoolName); } @@ -1146,6 +1172,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTapePool_emptyStringComment) { const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); const std::string comment = ""; + createVo(vo); ASSERT_THROW(m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment), catalogue::UserSpecifiedAnEmptyStringComment); } @@ -1168,6 +1195,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolVo) { const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); const std::string comment = "Create tape pool"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment); { @@ -1177,7 +1205,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolVo) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_EQ(0, pool.nbTapes); @@ -1195,6 +1223,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolVo) { } const std::string modifiedVo = "modified_vo"; + createVo(modifiedVo); m_catalogue->modifyTapePoolVo(m_admin, tapePoolName, modifiedVo); { @@ -1204,7 +1233,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolVo) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(modifiedVo, pool.vo); + ASSERT_EQ(modifiedVo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_EQ(0, pool.nbTapes); @@ -1241,6 +1270,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolVo_emptyStringVo) { const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); const std::string comment = "Create tape pool"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment); { @@ -1250,7 +1280,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolVo_emptyStringVo) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_EQ(0, pool.nbTapes); @@ -1272,6 +1302,49 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolVo_emptyStringVo) { catalogue::UserSpecifiedAnEmptyStringVo); } +TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolVo_VoDoesNotExist) { + using namespace cta; + + ASSERT_TRUE(m_catalogue->getTapePools().empty()); + + const std::string tapePoolName = "tape_pool"; + const std::string vo = "vo"; + const uint64_t nbPartialTapes = 2; + const bool isEncrypted = true; + const cta::optional<std::string> supply("value for the supply pool mechanism"); + const std::string comment = "Create tape pool"; + createVo(vo); + m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment); + + { + const auto pools = m_catalogue->getTapePools(); + + ASSERT_EQ(1, pools.size()); + + const auto &pool = pools.front(); + ASSERT_EQ(tapePoolName, pool.name); + ASSERT_EQ(vo, pool.vo.name); + ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); + ASSERT_EQ(isEncrypted, pool.encryption); + ASSERT_EQ(0, pool.nbTapes); + ASSERT_EQ(0, pool.capacityBytes); + ASSERT_EQ(0, pool.dataBytes); + ASSERT_EQ(0, pool.nbPhysicalFiles); + ASSERT_EQ(comment, pool.comment); + + const common::dataStructures::EntryLog creationLog = pool.creationLog; + ASSERT_EQ(m_admin.username, creationLog.username); + ASSERT_EQ(m_admin.host, creationLog.host); + + const common::dataStructures::EntryLog lastModificationLog = pool.lastModificationLog; + ASSERT_EQ(creationLog, lastModificationLog); + } + + const std::string modifiedVo = "DoesNotExists"; + ASSERT_THROW(m_catalogue->modifyTapePoolVo(m_admin, tapePoolName, modifiedVo), + exception::UserError); +} + TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolNbPartialTapes) { using namespace cta; @@ -1283,6 +1356,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolNbPartialTapes) { const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); const std::string comment = "Create tape pool"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment); { @@ -1292,7 +1366,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolNbPartialTapes) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_EQ(0, pool.nbTapes); @@ -1319,7 +1393,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolNbPartialTapes) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(modifiedNbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_EQ(0, pool.nbTapes); @@ -1367,6 +1441,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolComment) { const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); const std::string comment = "Create tape pool"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment); { @@ -1376,7 +1451,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolComment) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_EQ(0, pool.nbTapes); @@ -1403,7 +1478,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolComment) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_EQ(0, pool.nbTapes); @@ -1440,6 +1515,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolComment_emptyStringComment) { const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); const std::string comment = "Create tape pool"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment); { @@ -1449,7 +1525,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolComment_emptyStringComment) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_EQ(0, pool.nbTapes); @@ -1492,6 +1568,7 @@ TEST_P(cta_catalogue_CatalogueTest, setTapePoolEncryption) { const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); const std::string comment = "Create tape pool"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment); { @@ -1501,7 +1578,7 @@ TEST_P(cta_catalogue_CatalogueTest, setTapePoolEncryption) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_EQ(0, pool.nbTapes); @@ -1528,7 +1605,7 @@ TEST_P(cta_catalogue_CatalogueTest, setTapePoolEncryption) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(modifiedIsEncrypted, pool.encryption); ASSERT_EQ(0, pool.nbTapes); @@ -1564,6 +1641,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolSupply) { const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); const std::string comment = "Create tape pool"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment); { @@ -1573,7 +1651,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolSupply) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_TRUE((bool)supply); @@ -1603,7 +1681,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolSupply) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_TRUE((bool)supply); @@ -1642,6 +1720,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolSupply_emptyStringSupply) { const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); const std::string comment = "Create tape pool"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment); { @@ -1651,7 +1730,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolSupply_emptyStringSupply) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_TRUE((bool)supply); @@ -1681,7 +1760,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolSupply_emptyStringSupply) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_FALSE((bool)pool.supply); @@ -1726,6 +1805,7 @@ TEST_P(cta_catalogue_CatalogueTest, createArchiveRoute) { const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); ASSERT_TRUE(m_catalogue->getArchiveRoutes(storageClass.name, tapePoolName).empty()); @@ -1785,6 +1865,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolName) { const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); const std::string comment = "Create tape pool"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment); { @@ -1794,7 +1875,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolName) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_EQ(0, pool.nbTapes); @@ -1821,7 +1902,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolName) { const auto &pool = pools.front(); ASSERT_EQ(newTapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_EQ(0, pool.nbTapes); @@ -1858,6 +1939,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolName_emptyStringNewTapePoolNam const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); const std::string comment = "Create tape pool"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment); { @@ -1867,7 +1949,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapePoolName_emptyStringNewTapePoolNam const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(nbPartialTapes, pool.nbPartialTapes); ASSERT_EQ(isEncrypted, pool.encryption); ASSERT_EQ(0, pool.nbTapes); @@ -1908,6 +1990,7 @@ TEST_P(cta_catalogue_CatalogueTest, createArchiveRoute_emptyStringStorageClassNa const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const std::string storageClassName = ""; @@ -1936,6 +2019,7 @@ TEST_P(cta_catalogue_CatalogueTest, createArchiveRoute_zeroCopyNb) { const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t copyNb = 0; @@ -1984,6 +2068,7 @@ TEST_P(cta_catalogue_CatalogueTest, createArchiveRoute_emptyStringComment) { const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t copyNb = 1; @@ -2007,6 +2092,7 @@ TEST_P(cta_catalogue_CatalogueTest, createArchiveRoute_non_existent_storage_clas const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t copyNb = 1; @@ -2057,6 +2143,7 @@ TEST_P(cta_catalogue_CatalogueTest, createArchiveRoute_same_twice) { const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t copyNb = 1; @@ -2085,6 +2172,7 @@ TEST_P(cta_catalogue_CatalogueTest, createArchiveRoute_two_routes_same_pool) { const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t copyNb1 = 1; @@ -2116,6 +2204,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveRoute) { const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t copyNb = 1; @@ -2169,6 +2258,7 @@ TEST_P(cta_catalogue_CatalogueTest, createArchiveRoute_deleteStorageClass) { const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t copyNb = 1; @@ -2219,6 +2309,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyArchiveRouteTapePoolName) { const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const std::string anotherTapePoolName = "another_tape_pool"; @@ -2287,6 +2378,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyArchiveRouteTapePoolName_nonExistentAr const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t copyNb = 1; @@ -2313,6 +2405,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyArchiveRouteComment) { const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t copyNb = 1; @@ -2379,6 +2472,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyArchiveRouteComment_nonExistentArchive const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t copyNb = 1; @@ -2645,6 +2739,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteLogicalLibrary_non_empty) { const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, @@ -2870,7 +2965,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape) { const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); - + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); { const auto pools = m_catalogue->getTapePools(); @@ -2878,7 +2973,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(0, pool.nbTapes); ASSERT_EQ(0, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -2926,7 +3021,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(1, pool.nbTapes); ASSERT_EQ(capacityInBytes, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -2957,7 +3052,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringVid) { const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); - + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); { const auto pools = m_catalogue->getTapePools(); @@ -2965,7 +3060,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringVid) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(0, pool.nbTapes); ASSERT_EQ(0, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -2999,6 +3094,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringMediaType) { const bool readOnlyValue = true; const std::string comment = "Create tape"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); { const auto pools = m_catalogue->getTapePools(); @@ -3006,7 +3102,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringMediaType) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(0, pool.nbTapes); ASSERT_EQ(0, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -3041,6 +3137,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringVendor) { const std::string comment = "Create tape"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); { const auto pools = m_catalogue->getTapePools(); @@ -3048,7 +3145,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringVendor) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(0, pool.nbTapes); ASSERT_EQ(0, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -3082,6 +3179,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringLogicalLibraryName) { const bool readOnlyValue = true; const std::string comment = "Create tape"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); { const auto pools = m_catalogue->getTapePools(); @@ -3089,7 +3187,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringLogicalLibraryName) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(0, pool.nbTapes); ASSERT_EQ(0, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -3153,6 +3251,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_zeroCapacity) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); { const auto pools = m_catalogue->getTapePools(); @@ -3160,7 +3259,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_zeroCapacity) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(0, pool.nbTapes); ASSERT_EQ(0, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -3197,6 +3296,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringComment) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); { const auto pools = m_catalogue->getTapePools(); @@ -3204,7 +3304,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_emptyStringComment) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(0, pool.nbTapes); ASSERT_EQ(0, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -3235,6 +3335,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_non_existent_logical_library) { const bool readOnlyValue = true; const std::string comment = "Create tape"; + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); ASSERT_THROW(m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment), exception::UserError); @@ -3286,6 +3387,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_9_exabytes_capacity) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); { const auto pools = m_catalogue->getTapePools(); @@ -3293,7 +3395,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_9_exabytes_capacity) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(0, pool.nbTapes); ASSERT_EQ(0, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -3339,7 +3441,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_9_exabytes_capacity) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(1, pool.nbTapes); ASSERT_EQ(capacityInBytes, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -3368,6 +3470,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_same_twice) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); { const auto pools = m_catalogue->getTapePools(); @@ -3375,7 +3478,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_same_twice) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(0, pool.nbTapes); ASSERT_EQ(0, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -3391,7 +3494,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_same_twice) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(1, pool.nbTapes); ASSERT_EQ(capacityInBytes, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -3408,7 +3511,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_same_twice) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(1, pool.nbTapes); ASSERT_EQ(capacityInBytes, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -3438,6 +3541,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_many_tapes) { m_catalogue->createLogicalLibrary(m_admin, logicalLibrary, logicalLibraryIsDisabled, "Create logical library"); ASSERT_TRUE(m_catalogue->getTapePools().empty()); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); { const auto pools = m_catalogue->getTapePools(); @@ -3445,7 +3549,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_many_tapes) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(0, pool.nbTapes); ASSERT_EQ(0, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -3468,7 +3572,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_many_tapes) { const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(i, pool.nbTapes); ASSERT_EQ(i * capacityInBytes, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -3759,6 +3863,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_1_tape_with_write_log_1_tape_with const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); { @@ -3767,7 +3872,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_1_tape_with_write_log_1_tape_with const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(0, pool.nbTapes); ASSERT_EQ(0, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -3815,7 +3920,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_1_tape_with_write_log_1_tape_with const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(1, pool.nbTapes); ASSERT_EQ(capacityInBytes, pool.capacityBytes); ASSERT_EQ(0, pool.dataBytes); @@ -3865,7 +3970,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_1_tape_with_write_log_1_tape_with const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(1, pool.nbTapes); ASSERT_EQ(capacityInBytes, pool.capacityBytes); ASSERT_EQ(fileSize, pool.dataBytes); @@ -3913,7 +4018,7 @@ TEST_P(cta_catalogue_CatalogueTest, createTape_1_tape_with_write_log_1_tape_with const auto &pool = pools.front(); ASSERT_EQ(tapePoolName, pool.name); - ASSERT_EQ(vo, pool.vo); + ASSERT_EQ(vo, pool.vo.name); ASSERT_EQ(2, pool.nbTapes); ASSERT_EQ(2*capacityInBytes, pool.capacityBytes); ASSERT_EQ(fileSize, pool.dataBytes); @@ -3943,6 +4048,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteTape) { const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, @@ -4011,6 +4117,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteNonEmptyTape) { const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -4136,7 +4243,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapeMediaType) { const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); - + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -4224,6 +4331,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapeVendor) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -4314,6 +4422,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapeLogicalLibraryName) { m_catalogue->createLogicalLibrary(m_admin, anotherLogicalLibraryName, logicalLibraryIsDisabled, "Create another logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -4416,6 +4525,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapeTapePoolName) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTapePool(m_admin, anotherTapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create another tape pool"); @@ -4497,6 +4607,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapeTapePoolName_nonExistentTape) { const cta::optional<std::string> supply("value for the supply pool mechanism"); m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); ASSERT_THROW(m_catalogue->modifyTapeTapePoolName(m_admin, vid, tapePoolName), exception::UserError); @@ -4524,7 +4635,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapeCapacityInBytes) { const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); - + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, @@ -4625,6 +4736,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapeEncryptionKeyName) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, @@ -4715,6 +4827,7 @@ TEST_P(cta_catalogue_CatalogueTest, modifyTapeEncryptionKeyName_emptyStringEncry m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, @@ -4816,6 +4929,7 @@ TEST_P(cta_catalogue_CatalogueTest, tapeLabelled) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, @@ -4917,6 +5031,7 @@ TEST_P(cta_catalogue_CatalogueTest, tapeMountedForArchive) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, @@ -5056,6 +5171,7 @@ TEST_P(cta_catalogue_CatalogueTest, tapeMountedForRetrieve) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, @@ -5195,6 +5311,7 @@ TEST_P(cta_catalogue_CatalogueTest, setTapeFull) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, @@ -5293,6 +5410,7 @@ TEST_P(cta_catalogue_CatalogueTest, noSpaceLeftOnTape) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, @@ -5391,6 +5509,7 @@ TEST_P(cta_catalogue_CatalogueTest, setTapeReadOnly) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, @@ -5518,6 +5637,7 @@ TEST_P(cta_catalogue_CatalogueTest, setTapeReadOnlyOnError) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, @@ -5616,6 +5736,7 @@ TEST_P(cta_catalogue_CatalogueTest, setTapeDisabled) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, @@ -5704,6 +5825,7 @@ TEST_P(cta_catalogue_CatalogueTest, setTapeIsFromCastorInUnitTests) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, @@ -5841,6 +5963,7 @@ TEST_P(cta_catalogue_CatalogueTest, getTapesForWriting) { const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -5883,6 +6006,7 @@ TEST_P(cta_catalogue_CatalogueTest, getTapesForWriting_disabled_tape) { const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -5915,6 +6039,7 @@ TEST_P(cta_catalogue_CatalogueTest, getTapesForWriting_full_tape) { const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -5947,6 +6072,7 @@ TEST_P(cta_catalogue_CatalogueTest, getTapesForWriting_read_only_tape) { const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -5979,6 +6105,7 @@ TEST_P(cta_catalogue_CatalogueTest, getTapesForWriting_is_from_castor_tape) { const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -6016,6 +6143,7 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_getTapesForWriting_no_labelled_tape const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -7380,6 +7508,7 @@ TEST_P(cta_catalogue_CatalogueTest, checkAndGetNextArchiveFileId_no_mount_rules) const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t copyNb = 1; @@ -7467,6 +7596,7 @@ TEST_P(cta_catalogue_CatalogueTest, checkAndGetNextArchiveFileId_requester_mount const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t copyNb = 1; @@ -7558,6 +7688,7 @@ TEST_P(cta_catalogue_CatalogueTest, checkAndGetNextArchiveFileId_requester_group const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t copyNb = 1; @@ -7668,6 +7799,7 @@ TEST_P(cta_catalogue_CatalogueTest, checkAndGetNextArchiveFileId_requester_mount const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t copyNb = 1; @@ -7818,6 +7950,7 @@ TEST_P(cta_catalogue_CatalogueTest, getArchiveFileQueueCriteria_requester_mount_ const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t copyNb = 1; @@ -7901,6 +8034,7 @@ TEST_P(cta_catalogue_CatalogueTest, getArchiveFileQueueCriteria_requester_group_ const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t copyNb = 1; @@ -8003,6 +8137,7 @@ TEST_P(cta_catalogue_CatalogueTest, getArchiveFileQueueCriteria_requester_mount_ const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t copyNb = 1; @@ -8059,6 +8194,7 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId) { const std::string createTapeComment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, createTapeComment); @@ -8312,6 +8448,7 @@ TEST_P(cta_catalogue_CatalogueTest, prepareToRetrieveFileUsingArchiveFileId_disa const std::string createTapeComment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, createTapeComment); @@ -8779,6 +8916,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_many_archive_files) { m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName1, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); { const auto pools = m_catalogue->getTapePools(); @@ -9720,6 +9858,7 @@ TEST_P(cta_catalogue_CatalogueTest, DISABLED_concurrent_filesWrittenToTape_many_ m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName1, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); { const auto pools = m_catalogue->getTapePools(); @@ -10505,6 +10644,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_1_tape_cop const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -10636,6 +10776,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_1_tape_cop const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -10776,6 +10917,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -11004,6 +11146,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -11226,6 +11369,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -11421,6 +11565,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -11573,6 +11718,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -11757,6 +11903,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -11940,6 +12087,7 @@ TEST_P(cta_catalogue_CatalogueTest, filesWrittenToTape_1_archive_file_2_tape_cop const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -12120,6 +12268,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveFile) { const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -12426,6 +12575,7 @@ TEST_P(cta_catalogue_CatalogueTest, deleteArchiveFile_by_archive_file_id_of_anot const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -12757,6 +12907,7 @@ TEST_P(cta_catalogue_CatalogueTest, getAllTapes_many_tapes) { const bool readOnlyValue = true; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); const uint32_t nbTapes = 10; @@ -13738,6 +13889,7 @@ TEST_P(cta_catalogue_CatalogueTest, getNbFilesOnTape_no_tape_files) { const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -13800,6 +13952,7 @@ TEST_P(cta_catalogue_CatalogueTest, getNbFilesOnTape_one_tape_file) { const std::string createTapeComment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, createTapeComment); @@ -13920,6 +14073,7 @@ TEST_P(cta_catalogue_CatalogueTest, checkTapeForLabel_no_tape_files) { const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -13982,6 +14136,7 @@ TEST_P(cta_catalogue_CatalogueTest, checkTapeForLabel_one_tape_file) { const std::string createTapeComment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, createTapeComment); @@ -14104,6 +14259,7 @@ TEST_P(cta_catalogue_CatalogueTest, checkTapeForLabel_one_tape_file_reclaimed_ta const std::string createTapeComment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, createTapeComment); @@ -14235,6 +14391,7 @@ TEST_P(cta_catalogue_CatalogueTest, checkTapeForLabel_one_tape_file_superseded) const std::string createTapeComment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, createTapeComment); @@ -14454,6 +14611,7 @@ TEST_P(cta_catalogue_CatalogueTest, reclaimTape_full_lastFSeq_0_no_tape_files) { const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -14544,6 +14702,7 @@ TEST_P(cta_catalogue_CatalogueTest, reclaimTape_not_full_lastFSeq_0_no_tape_file const std::string comment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, comment); @@ -14607,6 +14766,7 @@ TEST_P(cta_catalogue_CatalogueTest, reclaimTape_full_lastFSeq_1_no_tape_files) { const std::string createTapeComment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, createTapeComment); @@ -14836,6 +14996,7 @@ TEST_P(cta_catalogue_CatalogueTest, reclaimTape_full_lastFSeq_1_one_tape_file) { const std::string createTapeComment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, createTapeComment); @@ -14998,6 +15159,7 @@ TEST_P(cta_catalogue_CatalogueTest, reclaimTape_full_lastFSeq_1_one_tape_file_su const std::string createTapeComment = "Create tape"; m_catalogue->createLogicalLibrary(m_admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); + createVo(vo); m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(m_admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, createTapeComment); @@ -15343,6 +15505,21 @@ TEST_P(cta_catalogue_CatalogueTest, deleteVirtualOrganization) { ASSERT_NO_THROW(m_catalogue->deleteVirtualOrganization(vo.name)); } +TEST_P(cta_catalogue_CatalogueTest, deleteVirtualOrganizationUsedByTapePool) { + using namespace cta; + + const std::string vo = "vo"; + const std::string tapePoolName = "tape_pool"; + const uint64_t nbPartialTapes = 2; + const bool isEncrypted = true; + const cta::optional<std::string> supply("value for the supply pool mechanism"); + const std::string comment = "Create tape pool"; + createVo(vo); + m_catalogue->createTapePool(m_admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, comment); + + ASSERT_THROW(m_catalogue->deleteVirtualOrganization(vo),exception::UserError); +} + TEST_P(cta_catalogue_CatalogueTest, deleteVirtualOrganizationNameDoesNotExist) { using namespace cta; diff --git a/catalogue/CatalogueTest.hpp b/catalogue/CatalogueTest.hpp index 20e3b3a5e565c2affb17e0e6910cf129089f753d..f3483c5e4f27398d0a677d7ccaba4b8f3b0274bd 100644 --- a/catalogue/CatalogueTest.hpp +++ b/catalogue/CatalogueTest.hpp @@ -95,6 +95,8 @@ protected: */ std::map<std::string, cta::catalogue::TapePool> tapePoolListToMap( const std::list<cta::catalogue::TapePool> &listOfTapePools); + + void createVo(const std::string &voName); }; // cta_catalogue_CatalogueTest } // namespace unitTests diff --git a/catalogue/RdbmsCatalogue.cpp b/catalogue/RdbmsCatalogue.cpp index 2c5ebfa0d4de1c5c81bd47460ff38495044daade..fdc649b02b1a8cd67f5bf5efb5139134b14e69e4 100644 --- a/catalogue/RdbmsCatalogue.cpp +++ b/catalogue/RdbmsCatalogue.cpp @@ -403,13 +403,13 @@ void RdbmsCatalogue::deleteVirtualOrganization(const std::string &voName){ auto conn = m_connPool.getConn(); if(virtualOrganizationIsUsedByStorageClasses(conn, voName)) { - throw UserSpecifiedStorageClassUsedByArchiveRoutes(std::string("The ") + voName + - " Virtual Organization is being used by one or more storage classes"); + throw UserSpecifiedStorageClassUsedByArchiveRoutes(std::string("The Virtual Organization ") + voName + + " is being used by one or more storage classes"); } if(virtualOrganizationIsUsedByTapepools(conn, voName)) { - throw UserSpecifiedStorageClassUsedByArchiveFiles(std::string("The ") + voName + - " Virtual Organization is being used by one or more Tapepools"); + throw UserSpecifiedStorageClassUsedByArchiveFiles(std::string("The Virtual Organization ") + voName + + " is being used by one or more Tapepools"); } const char *const sql = @@ -1017,13 +1017,17 @@ void RdbmsCatalogue::createTapePool( throw exception::UserError(std::string("Cannot create tape pool ") + name + " because a tape pool with the same name already exists"); } + if(!virtualOrganizationExists(conn,vo)){ + throw exception::UserError(std::string("Cannot create tape pool ") + name + \ + " because vo : "+vo+" does not exist."); + } const uint64_t tapePoolId = getNextTapePoolId(conn); const time_t now = time(nullptr); const char *const sql = "INSERT INTO TAPE_POOL(" "TAPE_POOL_ID," "TAPE_POOL_NAME," - "VO," + "VIRTUAL_ORGANIZATION_ID," "NB_PARTIAL_TAPES," "IS_ENCRYPTED," "SUPPLY," @@ -1037,10 +1041,10 @@ void RdbmsCatalogue::createTapePool( "LAST_UPDATE_USER_NAME," "LAST_UPDATE_HOST_NAME," "LAST_UPDATE_TIME)" - "VALUES(" + "SELECT " ":TAPE_POOL_ID," ":TAPE_POOL_NAME," - ":VO," + "VIRTUAL_ORGANIZATION_ID," ":NB_PARTIAL_TAPES," ":IS_ENCRYPTED," ":SUPPLY," @@ -1053,7 +1057,11 @@ void RdbmsCatalogue::createTapePool( ":LAST_UPDATE_USER_NAME," ":LAST_UPDATE_HOST_NAME," - ":LAST_UPDATE_TIME)"; + ":LAST_UPDATE_TIME " + "FROM " + "VIRTUAL_ORGANIZATION " + "WHERE " + "VIRTUAL_ORGANIZATION_NAME = :VO"; auto stmt = conn.createStmt(sql); stmt.bindUint64(":TAPE_POOL_ID", tapePoolId); @@ -1324,7 +1332,7 @@ std::list<TapePool> RdbmsCatalogue::getTapePools() const { const char *const sql = "SELECT " "TAPE_POOL.TAPE_POOL_NAME AS TAPE_POOL_NAME," - "COALESCE(TAPE_POOL.VO, 'NONE') AS VO," // TBD Remove COALESCE + "VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_NAME AS VO," "TAPE_POOL.NB_PARTIAL_TAPES AS NB_PARTIAL_TAPES," "TAPE_POOL.IS_ENCRYPTED AS IS_ENCRYPTED," "TAPE_POOL.SUPPLY AS SUPPLY," @@ -1345,11 +1353,13 @@ std::list<TapePool> RdbmsCatalogue::getTapePools() const { "TAPE_POOL.LAST_UPDATE_TIME AS LAST_UPDATE_TIME " "FROM " "TAPE_POOL " + "INNER JOIN VIRTUAL_ORGANIZATION ON " + "TAPE_POOL.VIRTUAL_ORGANIZATION_ID = VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_ID " "LEFT OUTER JOIN TAPE ON " "TAPE_POOL.TAPE_POOL_ID = TAPE.TAPE_POOL_ID " "GROUP BY " "TAPE_POOL.TAPE_POOL_NAME," - "TAPE_POOL.VO," + "VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_NAME," "TAPE_POOL.NB_PARTIAL_TAPES," "TAPE_POOL.IS_ENCRYPTED," "TAPE_POOL.SUPPLY," @@ -1370,7 +1380,7 @@ std::list<TapePool> RdbmsCatalogue::getTapePools() const { TapePool pool; pool.name = rset.columnString("TAPE_POOL_NAME"); - pool.vo = rset.columnString("VO"); + pool.vo.name = rset.columnString("VO"); pool.nbPartialTapes = rset.columnUint64("NB_PARTIAL_TAPES"); pool.encryption = rset.columnBool("IS_ENCRYPTED"); pool.supply = rset.columnOptionalString("SUPPLY"); @@ -1416,13 +1426,18 @@ void RdbmsCatalogue::modifyTapePoolVo(const common::dataStructures::SecurityIden const time_t now = time(nullptr); const char *const sql = "UPDATE TAPE_POOL SET " - "VO = :VO," + "VIRTUAL_ORGANIZATION_ID = (SELECT VIRTUAL_ORGANIZATION_ID FROM VIRTUAL_ORGANIZATION WHERE VIRTUAL_ORGANIZATION_NAME=:VO)," "LAST_UPDATE_USER_NAME = :LAST_UPDATE_USER_NAME," "LAST_UPDATE_HOST_NAME = :LAST_UPDATE_HOST_NAME," "LAST_UPDATE_TIME = :LAST_UPDATE_TIME " "WHERE " "TAPE_POOL_NAME = :TAPE_POOL_NAME"; auto conn = m_connPool.getConn(); + + if(!virtualOrganizationExists(conn,vo)){ + throw exception::UserError(std::string("Cannot modify tape pool ") + name +" because the vo " + vo + " does not exist"); + } + auto stmt = conn.createStmt(sql); stmt.bindString(":VO", vo); stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username); @@ -2644,7 +2659,7 @@ std::list<common::dataStructures::Tape> RdbmsCatalogue::getTapes(rdbms::Conn &co "TAPE.VENDOR AS VENDOR," "LOGICAL_LIBRARY.LOGICAL_LIBRARY_NAME AS LOGICAL_LIBRARY_NAME," "TAPE_POOL.TAPE_POOL_NAME AS TAPE_POOL_NAME," - "TAPE_POOL.VO AS VO," + "VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_NAME AS VO," "TAPE.ENCRYPTION_KEY_NAME AS ENCRYPTION_KEY_NAME," "TAPE.CAPACITY_IN_BYTES AS CAPACITY_IN_BYTES," "TAPE.DATA_IN_BYTES AS DATA_IN_BYTES," @@ -2682,7 +2697,9 @@ std::list<common::dataStructures::Tape> RdbmsCatalogue::getTapes(rdbms::Conn &co "INNER JOIN TAPE_POOL ON " "TAPE.TAPE_POOL_ID = TAPE_POOL.TAPE_POOL_ID " "INNER JOIN LOGICAL_LIBRARY ON " - "TAPE.LOGICAL_LIBRARY_ID = LOGICAL_LIBRARY.LOGICAL_LIBRARY_ID"; + "TAPE.LOGICAL_LIBRARY_ID = LOGICAL_LIBRARY.LOGICAL_LIBRARY_ID " + "INNER JOIN VIRTUAL_ORGANIZATION ON " + "TAPE_POOL.VIRTUAL_ORGANIZATION_ID = VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_ID"; if(searchCriteria.vid || searchCriteria.mediaType || @@ -2726,7 +2743,7 @@ std::list<common::dataStructures::Tape> RdbmsCatalogue::getTapes(rdbms::Conn &co } if(searchCriteria.vo) { if(addedAWhereConstraint) sql += " AND "; - sql += " TAPE_POOL.VO = :VO"; + sql += " VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_NAME = :VO"; addedAWhereConstraint = true; } if(searchCriteria.capacityInBytes) { @@ -2860,7 +2877,7 @@ common::dataStructures::VidToTapeMap RdbmsCatalogue::getTapesByVid(const std::se "TAPE.VENDOR AS VENDOR," "LOGICAL_LIBRARY.LOGICAL_LIBRARY_NAME AS LOGICAL_LIBRARY_NAME," "TAPE_POOL.TAPE_POOL_NAME AS TAPE_POOL_NAME," - "TAPE_POOL.VO AS VO," + "VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_NAME AS VO," "TAPE.ENCRYPTION_KEY_NAME AS ENCRYPTION_KEY_NAME," "TAPE.CAPACITY_IN_BYTES AS CAPACITY_IN_BYTES," "TAPE.DATA_IN_BYTES AS DATA_IN_BYTES," @@ -2896,7 +2913,9 @@ common::dataStructures::VidToTapeMap RdbmsCatalogue::getTapesByVid(const std::se "INNER JOIN TAPE_POOL ON " "TAPE.TAPE_POOL_ID = TAPE_POOL.TAPE_POOL_ID " "INNER JOIN LOGICAL_LIBRARY ON " - "TAPE.LOGICAL_LIBRARY_ID = LOGICAL_LIBRARY.LOGICAL_LIBRARY_ID"; + "TAPE.LOGICAL_LIBRARY_ID = LOGICAL_LIBRARY.LOGICAL_LIBRARY_ID " + "INNER JOIN VIRTUAL_ORGANIZATION ON " + "TAPE_POOL.VIRTUAL_ORGANIZATION_ID = VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_ID"; if(!vids.empty()) { sql += " WHERE "; @@ -2988,7 +3007,7 @@ common::dataStructures::VidToTapeMap RdbmsCatalogue::getAllTapes() const { "TAPE.VENDOR AS VENDOR," "LOGICAL_LIBRARY.LOGICAL_LIBRARY_NAME AS LOGICAL_LIBRARY_NAME," "TAPE_POOL.TAPE_POOL_NAME AS TAPE_POOL_NAME," - "TAPE_POOL.VO AS VO," + "VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_NAME AS VO," "TAPE.ENCRYPTION_KEY_NAME AS ENCRYPTION_KEY_NAME," "TAPE.CAPACITY_IN_BYTES AS CAPACITY_IN_BYTES," "TAPE.DATA_IN_BYTES AS DATA_IN_BYTES," @@ -3024,7 +3043,9 @@ common::dataStructures::VidToTapeMap RdbmsCatalogue::getAllTapes() const { "INNER JOIN TAPE_POOL ON " "TAPE.TAPE_POOL_ID = TAPE_POOL.TAPE_POOL_ID " "INNER JOIN LOGICAL_LIBRARY ON " - "TAPE.LOGICAL_LIBRARY_ID = LOGICAL_LIBRARY.LOGICAL_LIBRARY_ID"; + "TAPE.LOGICAL_LIBRARY_ID = LOGICAL_LIBRARY.LOGICAL_LIBRARY_ID " + "INNER JOIN VIRTUAL_ORGANIZATION ON " + "TAPE_POOL.VIRTUAL_ORGANIZATION_ID = VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_ID"; auto conn = m_connPool.getConn(); auto stmt = conn.createStmt(sql); @@ -6692,7 +6713,7 @@ std::list<TapeForWriting> RdbmsCatalogue::getTapesForWriting(const std::string & "TAPE.VENDOR AS VENDOR," "LOGICAL_LIBRARY.LOGICAL_LIBRARY_NAME AS LOGICAL_LIBRARY_NAME," "TAPE_POOL.TAPE_POOL_NAME AS TAPE_POOL_NAME," - "TAPE_POOL.VO AS VO," + "VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_NAME AS VO," "TAPE.CAPACITY_IN_BYTES AS CAPACITY_IN_BYTES," "TAPE.DATA_IN_BYTES AS DATA_IN_BYTES," "TAPE.LAST_FSEQ AS LAST_FSEQ " @@ -6702,6 +6723,8 @@ std::list<TapeForWriting> RdbmsCatalogue::getTapesForWriting(const std::string & "TAPE.TAPE_POOL_ID = TAPE_POOL.TAPE_POOL_ID " "INNER JOIN LOGICAL_LIBRARY ON " "TAPE.LOGICAL_LIBRARY_ID = LOGICAL_LIBRARY.LOGICAL_LIBRARY_ID " + "INNER JOIN VIRTUAL_ORGANIZATION ON " + "TAPE_POOL.VIRTUAL_ORGANIZATION_ID = VIRTUAL_ORGANIZATION.VIRTUAL_ORGANIZATION_ID " "WHERE " // "TAPE.LABEL_DRIVE IS NOT NULL AND " // Set when the tape has been labelled // "TAPE.LABEL_TIME IS NOT NULL AND " // Set when the tape has been labelled diff --git a/catalogue/TapePool.cpp b/catalogue/TapePool.cpp index 008de18ba4772c876fa7b63241727a71e06d8a73..fe8e6178b0cc13448cd14c95514a1b73ac33ef63 100644 --- a/catalogue/TapePool.cpp +++ b/catalogue/TapePool.cpp @@ -17,6 +17,7 @@ */ #include "catalogue/TapePool.hpp" +#include "common/dataStructures/VirtualOrganization.hpp" namespace cta { namespace catalogue { @@ -52,7 +53,7 @@ bool TapePool::operator!=(const TapePool &rhs) const { //------------------------------------------------------------------------------ std::ostream &operator<<(std::ostream &os, const TapePool &obj) { os << "(name=" << obj.name - << " vo=" << obj.vo + << " vo=" << obj.vo.name << " nbPartialTapes=" << obj.nbPartialTapes << " encryption=" << obj.encryption << " nbTapes=" << obj.nbTapes diff --git a/catalogue/TapePool.hpp b/catalogue/TapePool.hpp index 5de6f27e89aa695668ed74772266eb97ff9ae15a..9eb36cfc66e3f9d55f1df2e0e93c8c449c6c9b78 100644 --- a/catalogue/TapePool.hpp +++ b/catalogue/TapePool.hpp @@ -24,6 +24,7 @@ #include "common/dataStructures/EntryLog.hpp" #include "common/optional.hpp" +#include "common/dataStructures/VirtualOrganization.hpp" namespace cta { namespace catalogue { @@ -62,7 +63,7 @@ struct TapePool { /** * The virtual organisation of the tape pool. */ - std::string vo; + common::dataStructures::VirtualOrganization vo; /** * The desired number of tapes that should be empty or partially filled. diff --git a/catalogue/common_catalogue_schema.sql b/catalogue/common_catalogue_schema.sql index 45811d2dc976f42bbf889e6d570a8459161c1564..71594ad7c929bde9c6036a55d6a8394c94a6e308 100644 --- a/catalogue/common_catalogue_schema.sql +++ b/catalogue/common_catalogue_schema.sql @@ -65,11 +65,10 @@ CREATE TABLE STORAGE_CLASS( CREATE TABLE TAPE_POOL( TAPE_POOL_ID UINT64TYPE CONSTRAINT TAPE_POOL_TPI_NN NOT NULL, TAPE_POOL_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_TPN_NN NOT NULL, - VO VARCHAR(100) CONSTRAINT TAPE_POOL_VO_NN NOT NULL, + VIRTUAL_ORGANIZATION_ID UINT64TYPE CONSTRAINT TAPE_POOL_VOI_NN NOT NULL, NB_PARTIAL_TAPES UINT64TYPE CONSTRAINT TAPE_POOL_NPT_NN NOT NULL, IS_ENCRYPTED CHAR(1) CONSTRAINT TAPE_POOL_IE_NN NOT NULL, SUPPLY VARCHAR(100), - VIRTUAL_ORGANIZATION_ID UINT64TYPE, USER_COMMENT VARCHAR(1000) CONSTRAINT TAPE_POOL_UC_NN NOT NULL, CREATION_LOG_USER_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL, CREATION_LOG_HOST_NAME VARCHAR(100) CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL, diff --git a/cmake/CTAVersions.cmake b/cmake/CTAVersions.cmake index d334925d30151b745b518b24fd6108f7ea6f0db3..1a7abdde17d7d0ea00cae5945c04730b26134034 100644 --- a/cmake/CTAVersions.cmake +++ b/cmake/CTAVersions.cmake @@ -3,8 +3,8 @@ set(CTA_VERSION 0) set(CTA_RELEASE 1) # Catalogue Schema Version -set(CTA_CATALOGUE_SCHEMA_VERSION_MAJOR 1) -set(CTA_CATALOGUE_SCHEMA_VERSION_MINOR 2) +set(CTA_CATALOGUE_SCHEMA_VERSION_MAJOR 2) +set(CTA_CATALOGUE_SCHEMA_VERSION_MINOR 0) # Shared object internal version (used in SONAME) set(CTA_SOVERSION 0) diff --git a/continuousintegration/orchestration/tests/prepare_tests.sh b/continuousintegration/orchestration/tests/prepare_tests.sh index f7cc72ad1be2cc118add050f9c7433cee56f15ab..719749ebfcf0687cde877997d9d55de6b6ef54e2 100755 --- a/continuousintegration/orchestration/tests/prepare_tests.sh +++ b/continuousintegration/orchestration/tests/prepare_tests.sh @@ -100,6 +100,10 @@ echo "Preparing CTA configuration for tests" --name ${TAPEDRIVES_IN_USE[${i}]} \ --comment "ctasystest library mapped to drive ${TAPEDRIVES_IN_USE[${i}]}" done + + kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin virtualorganization add \ + --vo vo \ + --comment "vo" kubectl --namespace ${NAMESPACE} exec ctacli -- cta-admin tapepool add \ --name ctasystest \ --vo vo \ diff --git a/scheduler/SchedulerTest.cpp b/scheduler/SchedulerTest.cpp index 7e42fcd5ff4134a8c2e518437cc05cc5087f8eb6..e8ec3835a7fb47fc8bc1b1baf453e121f117c75d 100644 --- a/scheduler/SchedulerTest.cpp +++ b/scheduler/SchedulerTest.cpp @@ -217,10 +217,13 @@ public: const uint16_t nbPartialTapes = 1; const std::string tapePoolComment = "Tape-pool comment"; - const std::string vo = "vo"; + cta::common::dataStructures::VirtualOrganization vo; + vo.name = "vo"; + vo.comment = "comment"; + m_catalogue->createVirtualOrganization(s_adminOnAdminHost,vo); const bool tapePoolEncryption = false; const cta::optional<std::string> tapePoolSupply("value for the supply pool mechanism"); - catalogue.createTapePool(s_adminOnAdminHost, s_tapePoolName, vo, nbPartialTapes, tapePoolEncryption, tapePoolSupply, + catalogue.createTapePool(s_adminOnAdminHost, s_tapePoolName, vo.name, nbPartialTapes, tapePoolEncryption, tapePoolSupply, tapePoolComment); const uint32_t copyNb = 1; const std::string archiveRouteComment = "Archive-route comment"; @@ -3412,7 +3415,7 @@ TEST_P(SchedulerTest, expandRepackRequestMoveAndAddCopies){ std::string tapepool2Name = "tapepool2"; const cta::optional<std::string> supply; catalogue.createTapePool(admin,tapepool2Name,"vo",1,false,supply,"comment"); - + std::string tapepool3Name = "tapepool3"; catalogue.createTapePool(admin,tapepool3Name,"vo",1,false,supply,"comment"); diff --git a/tapeserver/castor/tape/tapeserver/daemon/DataTransferSessionTest.cpp b/tapeserver/castor/tape/tapeserver/daemon/DataTransferSessionTest.cpp index 480e7324429bb6886b9441f4314efde3d41c1c8a..8898e8fb26a4b4a58f67ad72b48e5ad889e61a00 100644 --- a/tapeserver/castor/tape/tapeserver/daemon/DataTransferSessionTest.cpp +++ b/tapeserver/castor/tape/tapeserver/daemon/DataTransferSessionTest.cpp @@ -297,10 +297,14 @@ public: const uint16_t nbPartialTapes = 1; const std::string tapePoolComment = "Tape-pool comment"; - const std::string vo = "vo"; + cta::common::dataStructures::VirtualOrganization vo; + vo.name = "vo"; + vo.comment = "comment"; + catalogue.createVirtualOrganization(s_adminOnAdminHost,vo); const bool tapePoolEncryption = false; const cta::optional<std::string> tapePoolSupply("value for the supply pool mechanism"); - ASSERT_NO_THROW(catalogue.createTapePool(s_adminOnAdminHost, s_tapePoolName, vo, nbPartialTapes, tapePoolEncryption, + + ASSERT_NO_THROW(catalogue.createTapePool(s_adminOnAdminHost, s_tapePoolName, vo.name, nbPartialTapes, tapePoolEncryption, tapePoolSupply, tapePoolComment)); const uint32_t copyNb = 1; const std::string archiveRouteComment = "Archive-route comment"; diff --git a/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPackerTest.cpp b/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPackerTest.cpp index f92e086521b7e1089bacfc7a0740c1bf7f6d100f..c82e0c241f76b133d6a45d0042a04a93129b33bd 100644 --- a/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPackerTest.cpp +++ b/tapeserver/castor/tape/tapeserver/daemon/MigrationReportPackerTest.cpp @@ -121,17 +121,21 @@ const uint32_t TEST_GROUP_2 = 9754; const std::string logicalLibraryName = "logical_library_name"; const bool logicalLibraryIsDisabled = false; const std::string tapePoolName = "tape_pool_name"; - const std::string vo = "vo"; const cta::optional<std::string> supply("value for the supply pool mechanism"); const uint64_t capacityInBytes = (uint64_t)10 * 1000 * 1000 * 1000 * 1000; const bool disabledValue = true; const bool fullValue = false; const bool readOnlyValue = false; const std::string createTapeComment = "Create tape"; + cta::common::dataStructures::VirtualOrganization vo; + vo.name = "vo"; + vo.comment = "comment"; + cta::common::dataStructures::SecurityIdentity admin = cta::common::dataStructures::SecurityIdentity("admin","localhost"); - + m_catalogue->createVirtualOrganization(admin,vo); + m_catalogue->createLogicalLibrary(admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); - m_catalogue->createTapePool(admin, tapePoolName, vo, 2, true, supply, "Create tape pool"); + m_catalogue->createTapePool(admin, tapePoolName, vo.name, 2, true, supply, "Create tape pool"); m_catalogue->createTape(admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, createTapeComment); @@ -266,7 +270,6 @@ const uint32_t TEST_GROUP_2 = 9754; const std::string logicalLibraryName = "logical_library_name"; const bool logicalLibraryIsDisabled = false; const std::string tapePoolName = "tape_pool_name"; - const std::string vo = "vo"; const uint64_t nbPartialTapes = 2; const bool isEncrypted = true; const cta::optional<std::string> supply("value for the supply pool mechanism"); @@ -277,8 +280,14 @@ const uint32_t TEST_GROUP_2 = 9754; const std::string createTapeComment = "Create tape"; cta::common::dataStructures::SecurityIdentity admin = cta::common::dataStructures::SecurityIdentity("admin","localhost"); + cta::common::dataStructures::VirtualOrganization vo; + vo.name = "vo"; + vo.comment = "comment"; + + m_catalogue->createVirtualOrganization(admin,vo); + m_catalogue->createLogicalLibrary(admin, logicalLibraryName, logicalLibraryIsDisabled, "Create logical library"); - m_catalogue->createTapePool(admin, tapePoolName, vo, nbPartialTapes, isEncrypted, supply, "Create tape pool"); + m_catalogue->createTapePool(admin, tapePoolName, vo.name, nbPartialTapes, isEncrypted, supply, "Create tape pool"); m_catalogue->createTape(admin, vid1, mediaType, vendor, logicalLibraryName, tapePoolName, capacityInBytes, disabledValue, fullValue, readOnlyValue, createTapeComment); diff --git a/xroot_plugins/XrdCtaTapePoolLs.hpp b/xroot_plugins/XrdCtaTapePoolLs.hpp index f429df10ea137630f82b7acadb82f1adbb27085b..6ef6cfc9a38c4f75a59c5d9b19f44598b973111b 100644 --- a/xroot_plugins/XrdCtaTapePoolLs.hpp +++ b/xroot_plugins/XrdCtaTapePoolLs.hpp @@ -74,7 +74,7 @@ int TapePoolLsStream::fillBuffer(XrdSsiPb::OStreamBuffer<Data> *streambuf) { auto tp_item = record.mutable_tpls_item(); tp_item->set_name(tp.name); - tp_item->set_vo(tp.vo); + tp_item->set_vo(tp.vo.name); tp_item->set_num_tapes(tp.nbTapes); tp_item->set_num_partial_tapes(tp.nbPartialTapes); tp_item->set_num_physical_files(tp.nbPhysicalFiles);