From 0222410216b5e9800a1da95bb4acdbe0c0dc8ae2 Mon Sep 17 00:00:00 2001 From: Steven Murray <Steven.Murray@cern.ch> Date: Fri, 26 Jan 2018 11:22:47 +0100 Subject: [PATCH] cta/CTA#201 Clean up CTA exceptions Fixed the following offending method: RdbmsCatalogue::prepareForNewFile() Added the following unit-test that explicitly tests for a UserError exception: cta_catalogue_CatalogueTest.prepareForNewFile_no_archive_routes --- catalogue/CatalogueTest.cpp | 58 ++++++++++++++++++++++++++++++++++++ catalogue/RdbmsCatalogue.cpp | 12 ++++---- 2 files changed, 64 insertions(+), 6 deletions(-) diff --git a/catalogue/CatalogueTest.cpp b/catalogue/CatalogueTest.cpp index a2ce7f3c7f..3a01724ce8 100644 --- a/catalogue/CatalogueTest.cpp +++ b/catalogue/CatalogueTest.cpp @@ -4528,6 +4528,64 @@ TEST_P(cta_catalogue_CatalogueTest, deleteRequesterGroupMountRule_non_existant) exception::UserError); } +TEST_P(cta_catalogue_CatalogueTest, prepareForNewFile_no_archive_routes) { + using namespace cta; + + ASSERT_TRUE(m_catalogue->getRequesterMountRules().empty()); + + const std::string mountPolicyName = "mount_policy"; + const uint64_t archivePriority = 1; + const uint64_t minArchiveRequestAge = 2; + const uint64_t retrievePriority = 3; + const uint64_t minRetrieveRequestAge = 4; + const uint64_t maxDrivesAllowed = 5; + + m_catalogue->createMountPolicy( + m_admin, + mountPolicyName, + archivePriority, + minArchiveRequestAge, + retrievePriority, + minRetrieveRequestAge, + maxDrivesAllowed, + "Create mount policy"); + + const std::string comment = "Create mount rule for requester"; + const std::string diskInstanceName = "disk_instance_name"; + const std::string requesterName = "requester_name"; + m_catalogue->createRequesterMountRule(m_admin, mountPolicyName, diskInstanceName, requesterName, comment); + + const std::list<common::dataStructures::RequesterMountRule> rules = m_catalogue->getRequesterMountRules(); + ASSERT_EQ(1, rules.size()); + + const common::dataStructures::RequesterMountRule rule = rules.front(); + + ASSERT_EQ(diskInstanceName, rule.diskInstance); + ASSERT_EQ(requesterName, rule.name); + ASSERT_EQ(mountPolicyName, rule.mountPolicy); + ASSERT_EQ(comment, rule.comment); + ASSERT_EQ(m_admin.username, rule.creationLog.username); + ASSERT_EQ(m_admin.host, rule.creationLog.host); + ASSERT_EQ(rule.creationLog, rule.lastModificationLog); + + // Do not create any archive routes + ASSERT_TRUE(m_catalogue->getArchiveRoutes().empty()); + + common::dataStructures::StorageClass storageClass; + storageClass.diskInstance = diskInstanceName; + storageClass.name = "storage_class"; + storageClass.nbCopies = 2; + storageClass.comment = "Create storage class"; + m_catalogue->createStorageClass(m_admin, storageClass); + + common::dataStructures::UserIdentity userIdentity; + userIdentity.name = requesterName; + userIdentity.group = "group"; + + ASSERT_THROW(m_catalogue->prepareForNewFile(storageClass.diskInstance, storageClass.name, userIdentity), + exception::UserError); +} + TEST_P(cta_catalogue_CatalogueTest, prepareForNewFile_requester_mount_rule) { using namespace cta; diff --git a/catalogue/RdbmsCatalogue.cpp b/catalogue/RdbmsCatalogue.cpp index 7e7b1c92b9..39415e5cc3 100644 --- a/catalogue/RdbmsCatalogue.cpp +++ b/catalogue/RdbmsCatalogue.cpp @@ -3787,16 +3787,16 @@ common::dataStructures::ArchiveFileQueueCriteria RdbmsCatalogue::prepareForNewFi // Check that the number of archive routes is correct if(copyToPoolMap.empty()) { - exception::Exception ex; - ex.getMessage() << "Storage class " << diskInstanceName << ":" << storageClassName << " has no archive routes"; - throw ex; + exception::UserError ue; + ue.getMessage() << "Storage class " << diskInstanceName << ":" << storageClassName << " has no archive routes"; + throw ue; } if(copyToPoolMap.size() != expectedNbRoutes) { - exception::Exception ex; - ex.getMessage() << "Storage class " << diskInstanceName << ":" << storageClassName << " does not have the" + exception::UserError ue; + ue.getMessage() << "Storage class " << diskInstanceName << ":" << storageClassName << " does not have the" " expected number of archive routes routes: expected=" << expectedNbRoutes << ", actual=" << copyToPoolMap.size(); - throw ex; + throw ue; } const RequesterAndGroupMountPolicies mountPolicies = getMountPolicies(conn, diskInstanceName, user.name, -- GitLab