From: Rishabh Dave Date: Fri, 9 May 2025 16:02:27 +0000 (+0530) Subject: qa/cephfs: add test to check clone source info's present in... X-Git-Tag: v20.2.1~38^2~30^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cf3347c8742097247c523126aa7f2ca7680320bd;p=ceph.git qa/cephfs: add test to check clone source info's present in... .meta file of a cloned subvolume after cloning is finished and in the output of "ceph fs subvolume info" command. Signed-off-by: Rishabh Dave (cherry picked from commit 44cacaf1e46b46f96ac3641cad02f27c4c753532) --- diff --git a/qa/tasks/cephfs/test_volumes.py b/qa/tasks/cephfs/test_volumes.py index 8986af873908..a026bf008be5 100644 --- a/qa/tasks/cephfs/test_volumes.py +++ b/qa/tasks/cephfs/test_volumes.py @@ -2845,12 +2845,34 @@ class TestSubvolumes(TestVolumesHelper): self.assertEqual(subvol_info["earmark"], earmark) + self.assertNotIn('source', subvol_info) + # remove subvolumes self._fs_cmd("subvolume", "rm", self.volname, subvolume) # verify trash dir is clean self._wait_for_trash_empty() + def test_subvol_src_info_with_custom_group(self): + ''' + Test that source info is NOT printed by "subvolume info" command for a + subvolume that is not created by cloning even when it is located in a + custom group. + ''' + subvol_name = self._gen_subvol_name() + group_name = self._gen_subvol_grp_name() + + self.run_ceph_cmd(f'fs subvolumegroup create {self.volname} ' + f'{group_name}') + self.run_ceph_cmd(f'fs subvolume create {self.volname} {subvol_name} ' + f'{group_name}') + + subvol_info = self.get_ceph_cmd_stdout( + f'fs subvolume info {self.volname} {subvol_name} {group_name}') + subvol_info = json.loads(subvol_info) + + self.assertNotIn('source', subvol_info) + def test_subvolume_ls(self): # tests the 'fs subvolume ls' command @@ -6609,6 +6631,7 @@ class TestSubvolumeSnapshotClones(TestVolumesHelper): # remove snapshot self._fs_cmd("subvolume", "snapshot", "rm", self.volname, subvolume, snapshot) + # actual testing begins now... subvol_info = json.loads(self._get_subvolume_info(self.volname, clone)) if len(subvol_info) == 0: raise RuntimeError("Expected the 'fs subvolume info' command to list metadata of subvolume") @@ -6618,6 +6641,11 @@ class TestSubvolumeSnapshotClones(TestVolumesHelper): if subvol_info["type"] != "clone": raise RuntimeError("type should be set to clone") + self.assertEqual(subvol_info['source']['volume'], self.volname) + self.assertEqual(subvol_info['source']['subvolume'], subvolume) + self.assertEqual(subvol_info['source']['snapshot'], snapshot) + self.assertEqual(subvol_info['source']['group'], '_nogroup') + # remove subvolumes self._fs_cmd("subvolume", "rm", self.volname, subvolume) self._fs_cmd("subvolume", "rm", self.volname, clone) @@ -6625,6 +6653,36 @@ class TestSubvolumeSnapshotClones(TestVolumesHelper): # verify trash dir is clean self._wait_for_trash_empty() + def test_clone_src_info_with_custom_group(self): + ''' + Test that clone's source subvolume's group is printed properly when + "subvolume info" command is run for clone. + ''' + subvol_name = self._gen_subvol_name() + group_name = self._gen_subvol_grp_name() + snap_name = self._gen_subvol_snap_name() + clone_name = self._gen_subvol_clone_name() + + self.run_ceph_cmd(f'fs subvolumegroup create {self.volname} ' + f'{group_name} --mode=777') + self.run_ceph_cmd(f'fs subvolume create {self.volname} {subvol_name} ' + f'{group_name} --mode=777') + self._do_subvolume_io(subvol_name, group_name, number_of_files=1) + self.run_ceph_cmd(f'fs subvolume snapshot create {self.volname} ' + f'{subvol_name} {snap_name} {group_name}') + self.run_ceph_cmd(f'fs subvolume snapshot clone {self.volname} ' + f'{subvol_name} {snap_name} {clone_name} ' + f'--group-name {group_name}') + self._wait_for_clone_to_complete(clone_name) + + subvol_info = self.get_ceph_cmd_stdout( + f'fs subvolume info {self.volname} {clone_name}') + subvol_info = json.loads(subvol_info) + self.assertEqual(subvol_info['source']['volume'], self.volname) + self.assertEqual(subvol_info['source']['subvolume'], subvol_name) + self.assertEqual(subvol_info['source']['snapshot'], snap_name) + self.assertEqual(subvol_info['source']['group'], group_name) + def test_subvolume_snapshot_info_without_snapshot_clone(self): """ Verify subvolume snapshot info output without cloning snapshot.