From e926e902d9f63576af4ce520c3322871d8d995c0 Mon Sep 17 00:00:00 2001 From: Haomai Wang Date: Mon, 9 Mar 2015 11:54:01 +0800 Subject: [PATCH] test_librbd: Add librbd interface tests for metadata Signed-off-by: Haomai Wang --- src/test/librbd/test_librbd.cc | 71 ++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/src/test/librbd/test_librbd.cc b/src/test/librbd/test_librbd.cc index cf76c67c7b645..f9c7b6b17f2ef 100644 --- a/src/test/librbd/test_librbd.cc +++ b/src/test/librbd/test_librbd.cc @@ -2595,3 +2595,74 @@ TEST_F(TestLibRBD, ObjectMapConsistentSnap) ASSERT_EQ(0, image1.snap_set(NULL)); ASSERT_PASSED(validate_object_map, image1); } + +TEST_F(TestLibRBD, Metadata) +{ + REQUIRE_FEATURE(RBD_FEATURE_LAYERING); + + librados::IoCtx ioctx; + ASSERT_EQ(0, _rados.ioctx_create(m_pool_name.c_str(), ioctx)); + + librbd::RBD rbd; + std::string name = get_temp_image_name(); + uint64_t size = 2 << 20; + int order = 0; + uint64_t features; + ASSERT_EQ(0, create_image_pp(rbd, ioctx, name.c_str(), size, &order)); + + librbd::Image image1; + ASSERT_EQ(0, rbd.open(ioctx, image1, name.c_str(), NULL)); + map pairs; + ASSERT_EQ(0, image1.metadata_list(&pairs)); + ASSERT_TRUE(pairs.empty()); + + ASSERT_EQ(0, image1.metadata_set("key1", "value1")); + ASSERT_EQ(0, image1.metadata_set("key2", "value2")); + ASSERT_EQ(0, image1.metadata_list(&pairs)); + ASSERT_EQ(2U, pairs.size()); + ASSERT_EQ(0, strcmp("value1", pairs["key1"].c_str())); + ASSERT_EQ(0, strcmp("value2", pairs["key2"].c_str())); + + pairs.clear(); + ASSERT_EQ(0, image1.metadata_remove("key1")); + ASSERT_EQ(0, image1.metadata_remove("key3")); + ASSERT_EQ(0, image1.metadata_list(&pairs)); + ASSERT_EQ(1U, pairs.size()); + ASSERT_EQ(0, strcmp("value2", pairs["key2"].c_str())); + + // test metadata with snapshot adding + ASSERT_EQ(0, image1.snap_create("snap1")); + ASSERT_EQ(0, image1.snap_protect("snap1")); + ASSERT_EQ(0, image1.snap_set("snap1")); + + pairs.clear(); + ASSERT_EQ(0, image1.metadata_set("key1", "value1")); + ASSERT_EQ(0, image1.metadata_set("key3", "value3")); + ASSERT_EQ(0, image1.metadata_list(&pairs)); + ASSERT_EQ(3U, pairs.size()); + ASSERT_EQ(0, strcmp("value1", pairs["key1"].c_str())); + ASSERT_EQ(0, strcmp("value2", pairs["key2"].c_str())); + ASSERT_EQ(0, strcmp("value3", pairs["key3"].c_str())); + + ASSERT_EQ(0, image1.snap_set(NULL)); + ASSERT_EQ(0, image1.metadata_list(&pairs)); + ASSERT_EQ(3U, pairs.size()); + ASSERT_EQ(0, strcmp("value1", pairs["key1"].c_str())); + ASSERT_EQ(0, strcmp("value2", pairs["key2"].c_str())); + ASSERT_EQ(0, strcmp("value3", pairs["key3"].c_str())); + + // test metadata with cloning + string cname = get_temp_image_name(); + librbd::Image image2; + ASSERT_EQ(0, image1.features(&features)); + EXPECT_EQ(0, rbd.clone(ioctx, name.c_str(), "snap1", ioctx, + cname.c_str(), features, &order)); + ASSERT_EQ(0, rbd.open(ioctx, image2, cname.c_str(), NULL)); + ASSERT_EQ(0, image2.metadata_set("key4", "value4")); + pairs.clear(); + ASSERT_EQ(0, image2.metadata_list(&pairs)); + ASSERT_EQ(4U, pairs.size()); + pairs.clear(); + ASSERT_EQ(0, image1.metadata_list(&pairs)); + ASSERT_EQ(3U, pairs.size()); +} -- 2.39.5