]>
git.proxmox.com Git - ceph.git/blob - ceph/src/test/rbd_mirror/test_Instances.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #include "include/rados/librados.hpp"
5 #include "cls/rbd/cls_rbd_client.h"
6 #include "test/rbd_mirror/test_fixture.h"
7 #include "tools/rbd_mirror/InstanceWatcher.h"
8 #include "tools/rbd_mirror/Instances.h"
9 #include "tools/rbd_mirror/Threads.h"
11 #include "test/librados/test.h"
12 #include "gtest/gtest.h"
14 using rbd::mirror::InstanceWatcher
;
15 using rbd::mirror::Instances
;
17 void register_test_instances() {
20 class TestInstances
: public ::rbd::mirror::TestFixture
{
22 virtual void SetUp() {
24 m_local_io_ctx
.remove(RBD_MIRROR_LEADER
);
25 EXPECT_EQ(0, m_local_io_ctx
.create(RBD_MIRROR_LEADER
, true));
29 TEST_F(TestInstances
, InitShutdown
)
31 Instances
<> instances(m_threads
, m_local_io_ctx
);
33 std::string instance_id
= "instance_id";
34 ASSERT_EQ(0, librbd::cls_client::mirror_instances_add(&m_local_io_ctx
,
38 instances
.init(&on_init
);
39 ASSERT_EQ(0, on_init
.wait());
41 C_SaferCond on_shut_down
;
42 instances
.shut_down(&on_shut_down
);
43 ASSERT_EQ(0, on_shut_down
.wait());
46 TEST_F(TestInstances
, InitEnoent
)
48 Instances
<> instances(m_threads
, m_local_io_ctx
);
50 m_local_io_ctx
.remove(RBD_MIRROR_LEADER
);
53 instances
.init(&on_init
);
54 ASSERT_EQ(0, on_init
.wait());
56 C_SaferCond on_shut_down
;
57 instances
.shut_down(&on_shut_down
);
58 ASSERT_EQ(0, on_shut_down
.wait());
61 TEST_F(TestInstances
, NotifyRemove
)
63 // speed testing up a little
64 EXPECT_EQ(0, _rados
->conf_set("rbd_mirror_leader_heartbeat_interval", "1"));
65 EXPECT_EQ(0, _rados
->conf_set("rbd_mirror_leader_max_missed_heartbeats",
68 Instances
<> instances(m_threads
, m_local_io_ctx
);
70 std::string instance_id1
= "instance_id1";
71 std::string instance_id2
= "instance_id2";
73 ASSERT_EQ(0, librbd::cls_client::mirror_instances_add(&m_local_io_ctx
,
75 ASSERT_EQ(0, librbd::cls_client::mirror_instances_add(&m_local_io_ctx
,
79 instances
.init(&on_init
);
80 ASSERT_EQ(0, on_init
.wait());
82 std::vector
<std::string
> instance_ids
;
84 for (int i
= 0; i
< 10; i
++) {
85 instances
.notify(instance_id1
);
88 InstanceWatcher
<>::get_instances(m_local_io_ctx
, &instance_ids
, &on_get
);
89 EXPECT_EQ(0, on_get
.wait());
90 if (instance_ids
.size() <= 1U) {
95 ASSERT_EQ(1U, instance_ids
.size());
96 ASSERT_EQ(instance_ids
[0], instance_id1
);
98 C_SaferCond on_shut_down
;
99 instances
.shut_down(&on_shut_down
);
100 ASSERT_EQ(0, on_shut_down
.wait());