]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Cleanup and create test suite
authortridao <daominhtri0503@gmail.com>
Mon, 19 Jun 2023 02:04:00 +0000 (23:04 -0300)
committertridao <daominhtri0503@gmail.com>
Tue, 20 Jun 2023 17:30:09 +0000 (14:30 -0300)
Signed-off-by: Tri Dao <daominhtri0503@gmail.com>
src/test/objectstore/Fragmentation_simulator.cc

index 3bc803f4331ba0c8342f518a1e24930095af7ff0..1e5b3764b70d9827d8a9d1caff4268b3f43a7b9b 100644 (file)
@@ -14,8 +14,6 @@
 #include <gtest/gtest.h>
 #include <iostream>
 
-#define dout_context g_ceph_context
-
 constexpr uint64_t _1Kb = 1024;
 constexpr uint64_t _1Mb = 1024 * _1Kb;
 constexpr uint64_t _1Gb = 1024 * _1Mb;
@@ -32,8 +30,10 @@ static bufferlist make_bl(size_t len, char c) {
 
 // --------- FragmentationSimulator ----------
 
-class FragmentationSimulator {
+class FragmentationSimulator : public ::testing::TestWithParam<std::string> {
 public:
+  static boost::intrusive_ptr<CephContext> cct;
+
   struct WorkloadGenerator {
     virtual int generate_txns(ObjectStore::CollectionHandle &ch,
                               ObjectStoreImitator *os) = 0;
@@ -43,47 +43,59 @@ public:
     virtual ~WorkloadGenerator() {}
   };
   using WorkloadGeneratorRef = std::shared_ptr<WorkloadGenerator>;
-  std::vector<WorkloadGeneratorRef> generators;
 
-  void add_generator(WorkloadGeneratorRef gen) {
-    std::cout << "Generator: " << gen->name() << " added\n";
-    generators.push_back(gen);
-  }
+  void add_generator(WorkloadGeneratorRef gen);
+  void clear_generators() { generators.clear(); }
+  int begin_simulation_with_generators();
+  void init(const std::string &alloc_type, uint64_t size,
+            uint64_t min_alloc_size = 4096);
 
-  int begin_simulation_with_generators() {
-    for (auto &g : generators) {
-      ObjectStore::CollectionHandle ch =
-          os->create_new_collection(coll_t::meta());
-      ObjectStore::Transaction t;
-      t.create_collection(ch->cid, 0);
-      os->queue_transaction(ch, std::move(t));
+  static void TearDownTestSuite() { cct.reset(); }
+  static void SetUpTestSuite() {}
+  void TearDown() final {}
 
-      int r = g->generate_txns(ch, os);
-      if (r < 0)
-        return r;
-    }
+  FragmentationSimulator() = default;
+  ~FragmentationSimulator() = default;
 
-    os->print_status();
-    return 0;
-  }
+private:
+  ObjectStoreImitator *os;
+  std::vector<WorkloadGeneratorRef> generators;
+};
 
-  FragmentationSimulator(const std::string &alloc_type, uint64_t size,
-                         uint64_t min_alloc_size = 4096) {
-    std::cout << "Initializing simulator" << std::endl;
+void FragmentationSimulator::init(const std::string &alloc_type, uint64_t size,
+                                  uint64_t min_alloc_size) {
+  std::cout << "Initializing ObjectStoreImitator" << std::endl;
+  os = new ObjectStoreImitator(g_ceph_context, "", min_alloc_size);
 
-    os = new ObjectStoreImitator(g_ceph_context, "", min_alloc_size);
-    std::cout << "Initializing allocator: " << alloc_type << " size: 0x"
-              << std::hex << size << std::dec << "\n"
-              << std::endl;
-    os->init_alloc(alloc_type, size);
+  std::cout << "Initializing allocator: " << alloc_type << " size: 0x"
+            << std::hex << size << std::dec << "\n"
+            << std::endl;
+  os->init_alloc(alloc_type, size);
+}
+
+void FragmentationSimulator::add_generator(WorkloadGeneratorRef gen) {
+  std::cout << "Generator: " << gen->name() << " added\n";
+  generators.push_back(gen);
+}
+
+int FragmentationSimulator::begin_simulation_with_generators() {
+  for (auto &g : generators) {
+    ObjectStore::CollectionHandle ch =
+        os->create_new_collection(coll_t::meta());
+    ObjectStore::Transaction t;
+    t.create_collection(ch->cid, 0);
+    os->queue_transaction(ch, std::move(t));
+
+    int r = g->generate_txns(ch, os);
+    if (r < 0)
+      return r;
   }
-  ~FragmentationSimulator() { delete os; }
 
-private:
-  ObjectStoreImitator *os;
-};
+  os->print_status();
+  return 0;
+}
 
-// --------- SimpleCWGenerator ----------
+// --------- Generators ----------
 
 struct SimpleCWGenerator : public FragmentationSimulator::WorkloadGenerator {
   std::string name() override { return "SimpleCW"; }
@@ -109,20 +121,25 @@ struct SimpleCWGenerator : public FragmentationSimulator::WorkloadGenerator {
 
 // ----------- Tests -----------
 
-TEST(FragmentationSimulator, simple) {
-  FragmentationSimulator sim = FragmentationSimulator("stupid", _1Gb);
-  sim.add_generator(std::make_shared<SimpleCWGenerator>());
-  sim.begin_simulation_with_generators();
+TEST_P(FragmentationSimulator, SimpleCWGenerator) {
+  init(GetParam(), _1Gb);
+  add_generator(std::make_shared<SimpleCWGenerator>());
+  begin_simulation_with_generators();
 }
 
 // ----------- main -----------
 
+INSTANTIATE_TEST_SUITE_P(Allocator, FragmentationSimulator,
+                         ::testing::Values("stupid", "bitmap", "avl", "btree"));
+
+boost::intrusive_ptr<CephContext> FragmentationSimulator::cct;
+
 int main(int argc, char **argv) {
   auto args = argv_to_vec(argc, argv);
-  auto cct =
+  FragmentationSimulator::cct =
       global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY,
                   CINIT_FLAG_NO_DEFAULT_CONFIG_FILE);
-  common_init_finish(g_ceph_context);
+  common_init_finish(FragmentationSimulator::cct->get());
 
   ::testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();