From: Jason Dillaman Date: Wed, 23 Sep 2015 22:11:01 +0000 (-0400) Subject: test: new cls_rbd methods for pool mirroring X-Git-Tag: v10.0.2~113^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c45a3ff909990a01b3ae50510bc29ff7f9ec878c;p=ceph.git test: new cls_rbd methods for pool mirroring Signed-off-by: Jason Dillaman --- diff --git a/src/test/cls_rbd/test_cls_rbd.cc b/src/test/cls_rbd/test_cls_rbd.cc index 6d5fb8bc00f..218505d5cf0 100644 --- a/src/test/cls_rbd/test_cls_rbd.cc +++ b/src/test/cls_rbd/test_cls_rbd.cc @@ -9,6 +9,7 @@ #include "include/stringify.h" #include "cls/rbd/cls_rbd.h" #include "cls/rbd/cls_rbd_client.h" +#include "cls/rbd/cls_rbd_types.h" #include "gtest/gtest.h" #include "test/librados/test.h" @@ -18,50 +19,9 @@ #include using namespace std; -using ::librbd::cls_client::create_image; -using ::librbd::cls_client::get_features; -using ::librbd::cls_client::set_features; -using ::librbd::cls_client::get_size; -using ::librbd::cls_client::get_object_prefix; -using ::librbd::cls_client::set_size; -using ::librbd::cls_client::get_parent; -using ::librbd::cls_client::set_parent; -using ::librbd::cls_client::remove_parent; -using ::librbd::cls_client::add_child; -using ::librbd::cls_client::remove_child; -using ::librbd::cls_client::get_children; -using ::librbd::cls_client::get_snapcontext; -using ::librbd::cls_client::snapshot_list; -using ::librbd::cls_client::copyup; -using ::librbd::cls_client::get_id; -using ::librbd::cls_client::set_id; -using ::librbd::cls_client::dir_get_id; -using ::librbd::cls_client::dir_get_name; -using ::librbd::cls_client::dir_list; -using ::librbd::cls_client::dir_add_image; -using ::librbd::cls_client::dir_remove_image; -using ::librbd::cls_client::dir_rename_image; +using namespace librbd::cls_client; using ::librbd::parent_info; using ::librbd::parent_spec; -using ::librbd::cls_client::get_protection_status; -using ::librbd::cls_client::set_protection_status; -using ::librbd::cls_client::get_stripe_unit_count; -using ::librbd::cls_client::set_stripe_unit_count; -using ::librbd::cls_client::get_mutable_metadata; -using ::librbd::cls_client::object_map_load; -using ::librbd::cls_client::object_map_save; -using ::librbd::cls_client::object_map_resize; -using ::librbd::cls_client::object_map_update; -using ::librbd::cls_client::object_map_snap_add; -using ::librbd::cls_client::object_map_snap_remove; -using ::librbd::cls_client::get_flags; -using ::librbd::cls_client::set_flags; -using ::librbd::cls_client::metadata_set; -using ::librbd::cls_client::metadata_remove; -using ::librbd::cls_client::metadata_list; -using ::librbd::cls_client::metadata_get; -using ::librbd::cls_client::snapshot_rename; - static int snapshot_add(librados::IoCtx *ioctx, const std::string &oid, uint64_t snap_id, const std::string &snap_name) { @@ -1323,3 +1283,59 @@ TEST_F(TestClsRbd, set_features) mask = RBD_FEATURE_LAYERING; ASSERT_EQ(-EINVAL, set_features(&ioctx, oid, features, mask)); } + +TEST_F(TestClsRbd, mirror) { + librados::IoCtx ioctx; + ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx)); + + std::vector peers; + ASSERT_EQ(-ENOENT, mirror_peer_list(&ioctx, &peers)); + + ASSERT_EQ(-EINVAL, mirror_peer_add(&ioctx, "uuid1", "cluster1", "client")); + + bool enabled; + ASSERT_EQ(0, mirror_is_enabled(&ioctx, &enabled)); + ASSERT_FALSE(enabled); + ASSERT_EQ(0, mirror_set_enabled(&ioctx, true)); + ASSERT_EQ(0, mirror_is_enabled(&ioctx, &enabled)); + ASSERT_TRUE(enabled); + + ASSERT_EQ(0, mirror_peer_add(&ioctx, "uuid1", "cluster1", "client")); + ASSERT_EQ(0, mirror_peer_add(&ioctx, "uuid2", "cluster2", "admin")); + ASSERT_EQ(-EEXIST, mirror_peer_add(&ioctx, "uuid2", "cluster3", "foo")); + ASSERT_EQ(-EEXIST, mirror_peer_add(&ioctx, "uuid3", "cluster1", "foo")); + ASSERT_EQ(0, mirror_peer_add(&ioctx, "uuid3", "cluster3", "admin")); + + ASSERT_EQ(0, mirror_peer_list(&ioctx, &peers)); + std::vector expected_peers = { + {"uuid1", "cluster1", "client"}, + {"uuid2", "cluster2", "admin"}, + {"uuid3", "cluster3", "admin"}}; + ASSERT_EQ(expected_peers, peers); + + ASSERT_EQ(0, mirror_peer_remove(&ioctx, "uuid4")); + ASSERT_EQ(0, mirror_peer_remove(&ioctx, "uuid2")); + + ASSERT_EQ(-ENOENT, mirror_peer_set_client(&ioctx, "uuid4", "new client")); + ASSERT_EQ(0, mirror_peer_set_client(&ioctx, "uuid1", "new client")); + + ASSERT_EQ(-ENOENT, mirror_peer_set_cluster(&ioctx, "uuid4", "new cluster")); + ASSERT_EQ(0, mirror_peer_set_cluster(&ioctx, "uuid3", "new cluster")); + + ASSERT_EQ(0, mirror_peer_list(&ioctx, &peers)); + expected_peers = { + {"uuid1", "cluster1", "new client"}, + {"uuid3", "new cluster", "admin"}}; + ASSERT_EQ(expected_peers, peers); + ASSERT_EQ(-EBUSY, mirror_set_enabled(&ioctx, false)); + + ASSERT_EQ(0, mirror_peer_remove(&ioctx, "uuid3")); + ASSERT_EQ(0, mirror_peer_remove(&ioctx, "uuid1")); + ASSERT_EQ(0, mirror_peer_list(&ioctx, &peers)); + expected_peers = {}; + ASSERT_EQ(expected_peers, peers); + + ASSERT_EQ(0, mirror_set_enabled(&ioctx, false)); + ASSERT_EQ(0, mirror_is_enabled(&ioctx, &enabled)); + ASSERT_FALSE(enabled); +}