From: Jason Dillaman Date: Thu, 24 Sep 2015 18:33:35 +0000 (-0400) Subject: tests: librbd new pool mirror API methods X-Git-Tag: v10.0.2~113^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=bfe295fabd1051d4743d7eda83255823f5878b2e;p=ceph.git tests: librbd new pool mirror API methods Signed-off-by: Jason Dillaman --- diff --git a/src/test/librados_test_stub/LibradosTestStub.cc b/src/test/librados_test_stub/LibradosTestStub.cc index 4725cc3c829e..f66d274ce796 100644 --- a/src/test/librados_test_stub/LibradosTestStub.cc +++ b/src/test/librados_test_stub/LibradosTestStub.cc @@ -796,6 +796,11 @@ config_t Rados::cct() { return reinterpret_cast(impl->cct()); } +int Rados::cluster_fsid(std::string* fsid) { + *fsid = "00000000-1111-2222-3333-444444444444"; + return 0; +} + int Rados::conf_set(const char *option, const char *value) { return rados_conf_set(reinterpret_cast(client), option, value); } diff --git a/src/test/librbd/test_librbd.cc b/src/test/librbd/test_librbd.cc index 99213cbd92c5..8b1054ebe8a2 100644 --- a/src/test/librbd/test_librbd.cc +++ b/src/test/librbd/test_librbd.cc @@ -768,7 +768,8 @@ void aio_write_test_data_and_poll(rbd_image_t image, int fd, const char *test_da rbd_completion_t comps[1]; ASSERT_EQ(1, rbd_poll_io_events(image, comps, 1)); uint64_t count; - ASSERT_EQ(sizeof(count), read(fd, &count, sizeof(count))); + ASSERT_EQ(static_cast(sizeof(count)), + read(fd, &count, sizeof(count))); int r = rbd_aio_get_return_value(comps[0]); ASSERT_TRUE(rbd_aio_is_complete(comps[0])); ASSERT_TRUE(*(uint64_t*)rbd_aio_get_arg(comps[0]) == data); @@ -857,7 +858,8 @@ void aio_read_test_data_and_poll(rbd_image_t image, int fd, const char *expected rbd_completion_t comps[1]; ASSERT_EQ(1, rbd_poll_io_events(image, comps, 1)); uint64_t count; - ASSERT_EQ(sizeof(count), read(fd, &count, sizeof(count))); + ASSERT_EQ(static_cast(sizeof(count)), + read(fd, &count, sizeof(count))); int r = rbd_aio_get_return_value(comps[0]); ASSERT_TRUE(rbd_aio_is_complete(comps[0])); @@ -3812,3 +3814,65 @@ TEST_F(TestLibRBD, ImagePollIO) rados_ioctx_destroy(ioctx); #endif } + +namespace librbd { + +static bool operator==(const mirror_peer_t &lhs, const mirror_peer_t &rhs) { + return (lhs.cluster_uuid == rhs.cluster_uuid && + lhs.cluster_name == rhs.cluster_name && + lhs.client_name == rhs.client_name); +} + +} // namespace librbd + +TEST_F(TestLibRBD, Mirror) { + librados::IoCtx ioctx; + ASSERT_EQ(0, _rados.ioctx_create(m_pool_name.c_str(), ioctx)); + + librbd::RBD rbd; + + std::vector expected_peers; + std::vector peers; + ASSERT_EQ(0, rbd.mirror_peer_list(ioctx, &peers)); + ASSERT_EQ(expected_peers, peers); + + ASSERT_EQ(-EINVAL, rbd.mirror_peer_add(ioctx, "uuid1", "cluster1", "client")); + + bool enabled; + ASSERT_EQ(0, rbd.mirror_is_enabled(ioctx, &enabled)); + ASSERT_FALSE(enabled); + ASSERT_EQ(0, rbd.mirror_set_enabled(ioctx, true)); + ASSERT_EQ(0, rbd.mirror_is_enabled(ioctx, &enabled)); + ASSERT_TRUE(enabled); + + ASSERT_EQ(0, rbd.mirror_peer_add(ioctx, "uuid1", "cluster1", "client")); + ASSERT_EQ(0, rbd.mirror_peer_add(ioctx, "uuid2", "cluster2", "admin")); + ASSERT_EQ(-EEXIST, rbd.mirror_peer_add(ioctx, "uuid2", "cluster3", "foo")); + ASSERT_EQ(-EEXIST, rbd.mirror_peer_add(ioctx, "uuid3", "cluster1", "foo")); + ASSERT_EQ(0, rbd.mirror_peer_add(ioctx, "uuid3", "cluster3", "admin")); + + ASSERT_EQ(0, rbd.mirror_peer_list(ioctx, &peers)); + expected_peers = { + {"uuid1", "cluster1", "client"}, + {"uuid2", "cluster2", "admin"}, + {"uuid3", "cluster3", "admin"}}; + ASSERT_EQ(expected_peers, peers); + + ASSERT_EQ(0, rbd.mirror_peer_remove(ioctx, "uuid4")); + ASSERT_EQ(0, rbd.mirror_peer_remove(ioctx, "uuid2")); + + ASSERT_EQ(-ENOENT, rbd.mirror_peer_set_client(ioctx, "uuid4", "new client")); + ASSERT_EQ(0, rbd.mirror_peer_set_client(ioctx, "uuid1", "new client")); + + ASSERT_EQ(-ENOENT, rbd.mirror_peer_set_cluster(ioctx, "uuid4", + "new cluster")); + ASSERT_EQ(0, rbd.mirror_peer_set_cluster(ioctx, "uuid3", "new cluster")); + + ASSERT_EQ(0, rbd.mirror_peer_list(ioctx, &peers)); + expected_peers = { + {"uuid1", "cluster1", "new client"}, + {"uuid3", "new cluster", "admin"}}; + ASSERT_EQ(expected_peers, peers); + + ASSERT_EQ(-EBUSY, rbd.mirror_set_enabled(ioctx, false)); +}