From fd6855440de072a2a90a5fd022280d4f6b7fe015 Mon Sep 17 00:00:00 2001 From: PCzhangPC Date: Fri, 20 Oct 2017 17:07:41 +0800 Subject: [PATCH] test:add a test case in test_librbd Signed-off-by: PCzhangPC (cherry picked from commit be5ad8764f65f43b6844eaa99c591a31c4d3af82) --- src/test/librbd/test_librbd.cc | 97 +++++++++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 1 deletion(-) diff --git a/src/test/librbd/test_librbd.cc b/src/test/librbd/test_librbd.cc index d22c127ca6d44..4e26b46122468 100644 --- a/src/test/librbd/test_librbd.cc +++ b/src/test/librbd/test_librbd.cc @@ -793,6 +793,8 @@ TEST_F(TestLibRBD, TestCopy) rados_ioctx_create(_cluster, create_pool(true).c_str(), &ioctx); rbd_image_t image; + rbd_image_t image2; + rbd_image_t image3; int order = 0; std::string name = get_temp_image_name(); std::string name2 = get_temp_image_name(); @@ -803,13 +805,69 @@ TEST_F(TestLibRBD, TestCopy) ASSERT_EQ(0, create_image(ioctx, name.c_str(), size, &order)); ASSERT_EQ(0, rbd_open(ioctx, name.c_str(), &image, NULL)); ASSERT_EQ(1, test_ls(ioctx, 1, name.c_str())); + + size_t sum_key_len = 0; + size_t sum_value_len = 0; + std::string key; + std::string val; + for (int i = 1; i <= 70; i++) { + key = "key" + stringify(i); + val = "value" + stringify(i); + ASSERT_EQ(0, rbd_metadata_set(image, key.c_str(), val.c_str())); + + sum_key_len += (key.size() + 1); + sum_value_len += (val.size() + 1); + } + + char keys[1024]; + char vals[1024]; + size_t keys_len = sizeof(keys); + size_t vals_len = sizeof(vals); + + char value[1024]; + size_t value_len = sizeof(value); + ASSERT_EQ(0, rbd_copy(image, ioctx, name2.c_str())); ASSERT_EQ(2, test_ls(ioctx, 2, name.c_str(), name2.c_str())); + ASSERT_EQ(0, rbd_open(ioctx, name2.c_str(), &image2, NULL)); + ASSERT_EQ(0, rbd_metadata_list(image2, "", 70, keys, &keys_len, vals, + &vals_len)); + ASSERT_EQ(keys_len, sum_key_len); + ASSERT_EQ(vals_len, sum_value_len); + + for (int i = 1; i <= 70; i++) { + key = "key" + stringify(i); + val = "value" + stringify(i); + ASSERT_EQ(0, rbd_metadata_get(image2, key.c_str(), value, &value_len)); + ASSERT_STREQ(val.c_str(), value); + + value_len = sizeof(value); + } + ASSERT_EQ(0, rbd_copy_with_progress(image, ioctx, name3.c_str(), print_progress_percent, NULL)); ASSERT_EQ(3, test_ls(ioctx, 3, name.c_str(), name2.c_str(), name3.c_str())); + keys_len = sizeof(keys); + vals_len = sizeof(vals); + ASSERT_EQ(0, rbd_open(ioctx, name3.c_str(), &image3, NULL)); + ASSERT_EQ(0, rbd_metadata_list(image3, "", 70, keys, &keys_len, vals, + &vals_len)); + ASSERT_EQ(keys_len, sum_key_len); + ASSERT_EQ(vals_len, sum_value_len); + + for (int i = 1; i <= 70; i++) { + key = "key" + stringify(i); + val = "value" + stringify(i); + ASSERT_EQ(0, rbd_metadata_get(image3, key.c_str(), value, &value_len)); + ASSERT_STREQ(val.c_str(), value); + + value_len = sizeof(value); + } + ASSERT_EQ(0, rbd_close(image)); + ASSERT_EQ(0, rbd_close(image2)); + ASSERT_EQ(0, rbd_close(image3)); rados_ioctx_destroy(ioctx); } @@ -832,6 +890,8 @@ TEST_F(TestLibRBD, TestCopyPP) { librbd::RBD rbd; librbd::Image image; + librbd::Image image2; + librbd::Image image3; int order = 0; std::string name = get_temp_image_name(); std::string name2 = get_temp_image_name(); @@ -841,12 +901,47 @@ TEST_F(TestLibRBD, TestCopyPP) ASSERT_EQ(0, create_image_pp(rbd, ioctx, name.c_str(), size, &order)); ASSERT_EQ(0, rbd.open(ioctx, image, name.c_str(), NULL)); + + std::string key; + std::string val; + for (int i = 1; i <= 70; i++) { + key = "key" + stringify(i); + val = "value" + stringify(i); + ASSERT_EQ(0, image.metadata_set(key, val)); + } + ASSERT_EQ(1, test_ls_pp(rbd, ioctx, 1, name.c_str())); ASSERT_EQ(0, image.copy(ioctx, name2.c_str())); ASSERT_EQ(2, test_ls_pp(rbd, ioctx, 2, name.c_str(), name2.c_str())); + ASSERT_EQ(0, rbd.open(ioctx, image2, name2.c_str(), NULL)); + + map pairs; + std::string value; + ASSERT_EQ(0, image2.metadata_list("", 70, &pairs)); + ASSERT_EQ(70U, pairs.size()); + + for (int i = 1; i <= 70; i++) { + key = "key" + stringify(i); + val = "value" + stringify(i); + ASSERT_EQ(0, image2.metadata_get(key.c_str(), &value)); + ASSERT_STREQ(val.c_str(), value.c_str()); + } + ASSERT_EQ(0, image.copy_with_progress(ioctx, name3.c_str(), pp)); ASSERT_EQ(3, test_ls_pp(rbd, ioctx, 3, name.c_str(), name2.c_str(), - name3.c_str())); + name3.c_str())); + ASSERT_EQ(0, rbd.open(ioctx, image3, name3.c_str(), NULL)); + + pairs.clear(); + ASSERT_EQ(0, image3.metadata_list("", 70, &pairs)); + ASSERT_EQ(70U, pairs.size()); + + for (int i = 1; i <= 70; i++) { + key = "key" + stringify(i); + val = "value" + stringify(i); + ASSERT_EQ(0, image3.metadata_get(key.c_str(), &value)); + ASSERT_STREQ(val.c_str(), value.c_str()); + } } ioctx.close(); -- 2.39.5