From: Loic Dachary Date: Thu, 16 Oct 2014 00:11:46 +0000 (-0700) Subject: crush: unit tests for CrushWrapper rename item/bucket methods X-Git-Tag: v0.88~64^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=29d13d41c5682c6a7bcf1e46d8ad059ff0152eba;p=ceph.git crush: unit tests for CrushWrapper rename item/bucket methods Signed-off-by: Loic Dachary --- diff --git a/src/test/crush/TestCrushWrapper.cc b/src/test/crush/TestCrushWrapper.cc index 34d6401a6898..ced8a64e80cf 100644 --- a/src/test/crush/TestCrushWrapper.cc +++ b/src/test/crush/TestCrushWrapper.cc @@ -4,6 +4,7 @@ * Ceph - scalable distributed file system * * Copyright (C) 2013 Cloudwatt + * Copyright (C) 2014 Red Hat * * Author: Loic Dachary * @@ -127,6 +128,75 @@ TEST(CrushWrapper, move_bucket) { delete c; } +TEST(CrushWrapper, rename_bucket_or_item) { + CrushWrapper *c = new CrushWrapper; + + const int ROOT_TYPE = 2; + c->set_type_name(ROOT_TYPE, "root"); + const int HOST_TYPE = 1; + c->set_type_name(HOST_TYPE, "host"); + const int OSD_TYPE = 0; + c->set_type_name(OSD_TYPE, "osd"); + + int root0; + EXPECT_EQ(0, c->add_bucket(0, CRUSH_BUCKET_STRAW, CRUSH_HASH_RJENKINS1, + ROOT_TYPE, 0, NULL, NULL, &root0)); + EXPECT_EQ(0, c->set_item_name(root0, "root0")); + + int item = 0; + { + map loc; + loc["root"] = "root0"; + loc["host"] = "host0"; + + EXPECT_EQ(0, c->insert_item(g_ceph_context, item, 1.0, + "osd.0", loc)); + } + item++; + { + map loc; + loc["root"] = "root0"; + loc["host"] = "host1"; + + EXPECT_EQ(0, c->insert_item(g_ceph_context, item, 1.0, + "osd.1", loc)); + } + + stringstream ss; + EXPECT_EQ(-EINVAL, c->can_rename_item("host0", "????", &ss)); + EXPECT_EQ(-EINVAL, c->rename_item("host0", "????", &ss)); + EXPECT_EQ(-EINVAL, c->can_rename_bucket("host0", "????", &ss)); + EXPECT_EQ(-EINVAL, c->rename_bucket("host0", "????", &ss)); + + EXPECT_EQ(-EEXIST, c->can_rename_item("host0", "host1", &ss)); + EXPECT_EQ(-EEXIST, c->rename_item("host0", "host1", &ss)); + EXPECT_EQ(-EEXIST, c->can_rename_bucket("host0", "host1", &ss)); + EXPECT_EQ(-EEXIST, c->rename_bucket("host0", "host1", &ss)); + + EXPECT_EQ(-EALREADY, c->can_rename_item("gone", "host1", &ss)); + EXPECT_EQ(-EALREADY, c->rename_item("gone", "host1", &ss)); + EXPECT_EQ(-EALREADY, c->can_rename_bucket("gone", "host1", &ss)); + EXPECT_EQ(-EALREADY, c->rename_bucket("gone", "host1", &ss)); + + EXPECT_EQ(-ENOENT, c->can_rename_item("doesnotexist", "somethingelse", &ss)); + EXPECT_EQ(-ENOENT, c->rename_item("doesnotexist", "somethingelse", &ss)); + EXPECT_EQ(-ENOENT, c->can_rename_bucket("doesnotexist", "somethingelse", &ss)); + EXPECT_EQ(-ENOENT, c->rename_bucket("doesnotexist", "somethingelse", &ss)); + + EXPECT_EQ(-ENOTDIR, c->can_rename_bucket("osd.1", "somethingelse", &ss)); + EXPECT_EQ(-ENOTDIR, c->rename_bucket("osd.1", "somethingelse", &ss)); + + int host0id = c->get_item_id("host0"); + EXPECT_EQ(0, c->rename_bucket("host0", "host0renamed", &ss)); + EXPECT_EQ(host0id, c->get_item_id("host0renamed")); + + int osd0id = c->get_item_id("osd0"); + EXPECT_EQ(0, c->rename_item("osd.0", "osd0renamed", &ss)); + EXPECT_EQ(osd0id, c->get_item_id("osd0renamed")); + + delete c; +} + TEST(CrushWrapper, check_item_loc) { CrushWrapper *c = new CrushWrapper; int item = 0;