From 1242bc172862ac32007a941b84f4368c17928649 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Wed, 9 Oct 2019 13:33:40 -0400 Subject: [PATCH] test/rgw: ceph_test_rgw_gc_log doesn't segfault on startup errors thrown during Environment::SetUp() will prevent the test cases from running and causing segfaults Signed-off-by: Casey Bodley --- src/test/rgw/test_rgw_gc_log.cc | 45 +++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/src/test/rgw/test_rgw_gc_log.cc b/src/test/rgw/test_rgw_gc_log.cc index 4bcee4ac7eaf1..3c652bca6b3d7 100644 --- a/src/test/rgw/test_rgw_gc_log.cc +++ b/src/test/rgw/test_rgw_gc_log.cc @@ -6,23 +6,44 @@ #include "test/librados/test_cxx.h" #include "gtest/gtest.h" -// creates a temporary pool and initializes an IoCtx for each test +// creates a rados client and temporary pool +struct RadosEnv : public ::testing::Environment { + static std::optional pool_name; + public: + static std::optional rados; + + void SetUp() override { + rados.emplace(); + // create pool + std::string name = get_temp_pool_name(); + ASSERT_EQ("", create_one_pool_pp(name, *rados)); + pool_name = name; + } + void TearDown() override { + if (pool_name) { + ASSERT_EQ(0, destroy_one_pool_pp(*pool_name, *rados)); + } + rados.reset(); + } + + static int ioctx_create(librados::IoCtx& ioctx) { + return rados->ioctx_create(pool_name->c_str(), ioctx); + } +}; +std::optional RadosEnv::pool_name; +std::optional RadosEnv::rados; + +auto *const rados_env = ::testing::AddGlobalTestEnvironment(new RadosEnv); + class rgw_gc_log : public ::testing::Test { - static librados::Rados rados; - static std::string pool_name; protected: static librados::IoCtx ioctx; - static void SetUpTestCase() { - pool_name = get_temp_pool_name(); - /* create pool */ - ASSERT_EQ("", create_one_pool_pp(pool_name, rados)); - ASSERT_EQ(0, rados.ioctx_create(pool_name.c_str(), ioctx)); + static void SetUpTestSuite() { + ASSERT_EQ(0, RadosEnv::ioctx_create(ioctx)); } - static void TearDownTestCase() { - /* remove pool */ + static void TearDownTestSuite() { ioctx.close(); - ASSERT_EQ(0, destroy_one_pool_pp(pool_name, rados)); } // use the test's name as the oid so different tests don't conflict @@ -30,8 +51,6 @@ class rgw_gc_log : public ::testing::Test { return ::testing::UnitTest::GetInstance()->current_test_info()->name(); } }; -librados::Rados rgw_gc_log::rados; -std::string rgw_gc_log::pool_name; librados::IoCtx rgw_gc_log::ioctx; -- 2.39.5