1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
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"
13 class RadosTestFixture
: public ::testing::Test
{
15 static void SetUpTestCase();
16 static void TearDownTestCase();
18 static std::string
get_temp_oid();
21 void SetUp() override
;
22 void TearDown() override
;
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
);
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
);
38 bufferlist
create_payload(const std::string
&payload
);
40 struct Listener
: public journal::JournalMetadataListener
{
41 RadosTestFixture
*test_fixture
;
44 std::map
<journal::JournalMetadata
*, uint32_t> updates
;
46 Listener(RadosTestFixture
*_test_fixture
)
47 : test_fixture(_test_fixture
), mutex("mutex") {}
49 void handle_update(journal::JournalMetadata
*metadata
) override
{
50 Mutex::Locker
locker(mutex
);
56 int init_metadata(journal::JournalMetadataPtr metadata
);
58 bool wait_for_update(journal::JournalMetadataPtr metadata
);
60 static std::string _pool_name
;
61 static librados::Rados _rados
;
62 static uint64_t _oid_number
;
63 static ThreadPool
*_thread_pool
;
65 librados::IoCtx m_ioctx
;
67 ContextWQ
*m_work_queue
;
74 std::list
<journal::JournalMetadataPtr
> m_metadatas
;