]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
test/rgw: ceph_test_rgw_gc_log doesn't segfault on startup
authorCasey Bodley <cbodley@redhat.com>
Wed, 9 Oct 2019 17:33:40 +0000 (13:33 -0400)
committerPritha Srivastava <prsrivas@redhat.com>
Wed, 16 Oct 2019 04:03:20 +0000 (09:33 +0530)
errors thrown during Environment::SetUp() will prevent the test cases
from running and causing segfaults

Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/test/rgw/test_rgw_gc_log.cc

index 4bcee4ac7eaf1d1b3478c3f3b7fa65fea0d95f19..3c652bca6b3d75c1eb746ccc1f1d2c00f624639e 100644 (file)
@@ -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<std::string> pool_name;
+ public:
+  static std::optional<librados::Rados> 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<std::string> RadosEnv::pool_name;
+std::optional<librados::Rados> 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;