Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / test / journal / RadosTestFixture.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
3
4 #include "test/librados/test.h"
5 #include "common/Mutex.h"
6 #include "common/Timer.h"
7 #include "journal/JournalMetadata.h"
8 #include "cls/journal/cls_journal_types.h"
9 #include "gtest/gtest.h"
10
11 class ThreadPool;
12
13 class RadosTestFixture : public ::testing::Test {
14 public:
15   static void SetUpTestCase();
16   static void TearDownTestCase();
17
18   static std::string get_temp_oid();
19
20   RadosTestFixture();
21   void SetUp() override;
22   void TearDown() override;
23
24   int create(const std::string &oid, uint8_t order = 14,
25              uint8_t splay_width = 2);
26   journal::JournalMetadataPtr create_metadata(const std::string &oid,
27                                               const std::string &client_id = "client",
28                                               double commit_internal = 0.1,
29                                               uint64_t max_fetch_bytes = 0,
30                                               int max_concurrent_object_sets = 0);
31   int append(const std::string &oid, const bufferlist &bl);
32
33   int client_register(const std::string &oid, const std::string &id = "client",
34                       const std::string &description = "");
35   int client_commit(const std::string &oid, const std::string &id,
36                     const cls::journal::ObjectSetPosition &commit_position);
37
38   bufferlist create_payload(const std::string &payload);
39
40   struct Listener : public journal::JournalMetadataListener {
41     RadosTestFixture *test_fixture;
42     Mutex mutex;
43     Cond cond;
44     std::map<journal::JournalMetadata*, uint32_t> updates;
45
46     Listener(RadosTestFixture *_test_fixture)
47       : test_fixture(_test_fixture), mutex("mutex") {}
48
49     void handle_update(journal::JournalMetadata *metadata) override {
50       Mutex::Locker locker(mutex);
51       ++updates[metadata];
52       cond.Signal();
53     }
54   };
55
56   int init_metadata(journal::JournalMetadataPtr metadata);
57
58   bool wait_for_update(journal::JournalMetadataPtr metadata);
59
60   static std::string _pool_name;
61   static librados::Rados _rados;
62   static uint64_t _oid_number;
63   static ThreadPool *_thread_pool;
64
65   librados::IoCtx m_ioctx;
66
67   ContextWQ *m_work_queue;
68
69   Mutex m_timer_lock;
70   SafeTimer *m_timer;
71
72   Listener m_listener;
73
74   std::list<journal::JournalMetadataPtr> m_metadatas;
75 };