local snap_name=$2
local image_count=$3
- local snap_info=$(rbd group snap info $group_name@$snap_name --format=json)
- local actual_snap_name=$(jq -r ".name" <<< "$snap_info")
+ local snap_info_json=$(
+ rbd group snap info $group_name@$snap_name --format=json)
+ local actual_snap_name=$(jq -r ".name" <<< "$snap_info_json")
test "$actual_snap_name" = "$snap_name" || return 1
- local snap_state=$(jq -r ".state" <<< "$snap_info")
+ local snap_state=$(jq -r ".state" <<< "$snap_info_json")
test "$snap_state" = "complete" || return 1
- local actual_image_count=$(jq '.images | length' <<< "$snap_info")
- test "$actual_image_count" = "$image_count"
+ local actual_image_count=$(jq '.images | length' <<< "$snap_info_json")
+ test "$actual_image_count" = "$image_count" || return 1
+
+ local image_snap_name=$(jq -r '.image_snap_name' <<< "$snap_info_json")
+ local snap_info=$(rbd group snap info $group_name@$snap_name)
+ local snap_state=$(grep -w 'state:' <<< "$snap_info" | tr -d '\t')
+ test "$snap_state" = "state: complete" || return 1
+ local image_snap_field=$(grep -w 'image snap:' <<< "$snap_info")
+ local images_field=$(grep -w 'images:' <<< "$snap_info")
+ if ((image_count != 0)); then
+ test -n "$image_snap_name" || return 1
+ test -n "$image_snap_field" || return 1
+ test -n "$images_field" || return 1
+ else
+ test -z "$image_snap_name" || return 1
+ test -z "$image_snap_field" || return 1
+ test -z "$images_field" || return 1
+ fi
}
echo "TEST: create remove consistency group"
const char *gp_name = "gp_snapgetinfo";
ASSERT_EQ(0, rbd_group_create(ioctx2, gp_name));
- ASSERT_EQ(0, rbd_group_image_add(ioctx2, gp_name, ioctx,
- m_image_name.c_str()));
const char *gp_snap_name = "snap_snapshot";
ASSERT_EQ(0, rbd_group_snap_create(ioctx2, gp_name, gp_snap_name));
ASSERT_EQ(-ENOENT, rbd_group_snap_get_info(ioctx2, gp_name, "absent",
&gp_snap_info));
+ ASSERT_EQ(0, rbd_group_snap_get_info(ioctx2, gp_name, gp_snap_name,
+ &gp_snap_info));
+ ASSERT_STREQ(gp_snap_name, gp_snap_info.name);
+ ASSERT_EQ(RBD_GROUP_SNAP_STATE_COMPLETE, gp_snap_info.state);
+ ASSERT_STREQ("", gp_snap_info.image_snap_name);
+ ASSERT_EQ(0U, gp_snap_info.image_snaps_count);
+
+ rbd_group_snap_get_info_cleanup(&gp_snap_info);
+ ASSERT_EQ(0, rbd_group_snap_remove(ioctx2, gp_name, gp_snap_name));
+
+ ASSERT_EQ(0, rbd_group_image_add(ioctx2, gp_name, ioctx,
+ m_image_name.c_str()));
+ ASSERT_EQ(0, rbd_group_snap_create(ioctx2, gp_name, gp_snap_name));
+
ASSERT_EQ(0, rbd_group_snap_get_info(ioctx2, gp_name, gp_snap_name,
&gp_snap_info));
ASSERT_STREQ(gp_snap_name, gp_snap_info.name);
const char *gp_name = "gp_snapgetinfoPP";
ASSERT_EQ(0, m_rbd.group_create(ioctx2, gp_name));
- ASSERT_EQ(0, m_rbd.group_image_add(ioctx2, gp_name, m_ioctx,
- m_image_name.c_str()));
const char *gp_snap_name = "snap_snapshot";
ASSERT_EQ(0, m_rbd.group_snap_create(ioctx2, gp_name, gp_snap_name));
ASSERT_EQ(-ENOENT, m_rbd.group_snap_get_info(ioctx2, gp_name, "absent",
&gp_snap_info));
+ ASSERT_EQ(0, m_rbd.group_snap_get_info(ioctx2, gp_name, gp_snap_name,
+ &gp_snap_info));
+ ASSERT_EQ(gp_snap_name, gp_snap_info.name);
+ ASSERT_EQ(RBD_GROUP_SNAP_STATE_COMPLETE, gp_snap_info.state);
+ ASSERT_EQ("", gp_snap_info.image_snap_name);
+ ASSERT_EQ(0U, gp_snap_info.image_snaps.size());
+
+ ASSERT_EQ(0, m_rbd.group_snap_remove(ioctx2, gp_name, gp_snap_name));
+
+ ASSERT_EQ(0, m_rbd.group_image_add(ioctx2, gp_name, m_ioctx,
+ m_image_name.c_str()));
+ ASSERT_EQ(0, m_rbd.group_snap_create(ioctx2, gp_name, gp_snap_name));
+
ASSERT_EQ(0, m_rbd.group_snap_get_info(ioctx2, gp_name, gp_snap_name,
&gp_snap_info));
ASSERT_EQ(gp_snap_name, gp_snap_info.name);
self.group.remove_snap(snap_name)
assert_raises(ObjectNotFound, self.group.get_snap_info, snap_name)
+ def test_group_snap_get_info_no_member_images(self):
+ self.group.create_snap(snap_name)
+
+ snap_info_dict = self.group.get_snap_info(snap_name)
+ assert sorted(snap_info_dict.keys()) == self.gp_snap_keys
+ assert snap_info_dict['name'] == snap_name
+ assert snap_info_dict['state'] == RBD_GROUP_SNAP_STATE_COMPLETE
+ assert snap_info_dict['image_snap_name'] == ""
+ assert snap_info_dict['image_snaps'] == []
+
+ self.group.remove_snap(snap_name)
+
def test_group_snap(self):
global snap_name
eq([], list(self.group.list_snaps()))