From d1348e5cfeaed61587563d51a9be6c21bf62b784 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Thu, 12 Mar 2015 00:26:07 -0400 Subject: [PATCH] tests: add update_features test to test_librbd Signed-off-by: Jason Dillaman --- src/test/librbd/test_librbd.cc | 39 ++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/test/librbd/test_librbd.cc b/src/test/librbd/test_librbd.cc index 74638df510dd6..a5bbeb9d61383 100644 --- a/src/test/librbd/test_librbd.cc +++ b/src/test/librbd/test_librbd.cc @@ -2672,3 +2672,42 @@ TEST_F(TestLibRBD, Metadata) ASSERT_EQ(3U, pairs.size()); ASSERT_EQ(-ENOENT, image1.metadata_get("key4", &value)); } + +TEST_F(TestLibRBD, UpdateFeatures) +{ + 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 = 1 << 20; + int order = 0; + ASSERT_EQ(0, create_image_pp(rbd, ioctx, name.c_str(), size, &order)); + + librbd::Image image; + ASSERT_EQ(0, rbd.open(ioctx, image, name.c_str(), NULL)); + + uint8_t old_format; + ASSERT_EQ(0, image.old_format(&old_format)); + if (old_format) { + ASSERT_EQ(-EINVAL, image.update_features(RBD_FEATURE_EXCLUSIVE_LOCK, true)); + return; + } + + // must provide a single feature + ASSERT_EQ(-EINVAL, image.update_features(0, true)); + + ASSERT_EQ(0, image.update_features(RBD_FEATURE_EXCLUSIVE_LOCK | + RBD_FEATURE_OBJECT_MAP, false)); + + // cannot enable object map w/o exclusive lock + ASSERT_EQ(-EINVAL, image.update_features(RBD_FEATURE_OBJECT_MAP, true)); + + ASSERT_EQ(0, image.update_features(RBD_FEATURE_EXCLUSIVE_LOCK, true)); + ASSERT_EQ(0, image.update_features(RBD_FEATURE_OBJECT_MAP, true)); + + // cannot disable exclusive lock w/ object map + ASSERT_EQ(-EINVAL, image.update_features(RBD_FEATURE_EXCLUSIVE_LOCK, false)); +} -- 2.39.5