]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
test/crimson/seastore/test_transaction_manager_test_state: add mock MDStore 43657/head
authorSamuel Just <sjust@redhat.com>
Thu, 28 Oct 2021 09:50:16 +0000 (02:50 -0700)
committerchunmei-liu <chunmei.liu@intel.com>
Sat, 30 Oct 2021 01:04:11 +0000 (18:04 -0700)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/test/crimson/seastore/transaction_manager_test_state.h

index 8beb6b7626d8a9b2f2bb6edbc512ed479bf901fa..003966e13d4276add8e52b7357410c5ffec6997c 100644 (file)
@@ -106,11 +106,12 @@ auto get_transaction_manager(
     scanner_ref);
 }
 
-auto get_seastore(SegmentManagerRef sm) {
+auto get_seastore(SeaStore::MDStoreRef mdstore, SegmentManagerRef sm) {
   auto tm = get_transaction_manager(*sm);
   auto cm = std::make_unique<collection_manager::FlatCollectionManager>(*tm);
   return std::make_unique<SeaStore>(
     "",
+    std::move(mdstore),
     std::move(sm),
     std::move(tm),
     std::move(cm),
@@ -258,6 +259,38 @@ public:
 };
 
 class SeaStoreTestState : public EphemeralTestState {
+  class TestMDStoreState {
+    std::map<std::string, std::string> md;
+    public:
+    class Store final : public SeaStore::MDStore {
+      TestMDStoreState &parent;
+    public:
+      Store(TestMDStoreState &parent) : parent(parent) {}
+
+      write_meta_ret write_meta(
+       const std::string& key, const std::string& value) final {
+       parent.md[key] = value;
+       return seastar::now();
+      }
+
+      read_meta_ret read_meta(const std::string& key) final {
+       auto iter = parent.md.find(key);
+       if (iter != parent.md.end()) {
+         return read_meta_ret(
+           read_meta_ertr::ready_future_marker{},
+           iter->second);
+       } else {
+         return read_meta_ret(
+           read_meta_ertr::ready_future_marker{},
+           std::nullopt);
+       }
+      }
+    };
+    Store get_mdstore() {
+      return Store(*this);
+    }
+  } mdstore_state;
+
 protected:
   std::unique_ptr<SeaStore> seastore;
 
@@ -265,6 +298,7 @@ protected:
 
   virtual void _init() final {
     seastore = get_seastore(
+      std::make_unique<TestMDStoreState::Store>(mdstore_state.get_mdstore()),
       std::make_unique<TestSegmentManagerWrapper>(*segment_manager));
   }