]> git.proxmox.com Git - ceph.git/blob - ceph/src/test/journal/RadosTestFixture.h
add subtree-ish sources for 12.0.3
[ceph.git] / 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 };