Message ID | 999924f436ccad26b30f555ee106a131dff015c9.1583914311.git.osandov@fb.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs-progs: fix clone from wrong subvolume | expand |
On Wed, Mar 11, 2020 at 01:17:11AM -0700, Omar Sandoval wrote: > From: Omar Sandoval <osandov@fb.com> > > This test case is the reproducer for the previous fix. > > Reviewed-by: Filipe Manana <fdmanana@suse.com> > Signed-off-by: Omar Sandoval <osandov@fb.com> > --- > .../test.sh | 34 +++++++++++++++++++ > 1 file changed, 34 insertions(+) > create mode 100755 tests/misc-tests/038-receive-clone-from-current-subvolume/test.sh > > diff --git a/tests/misc-tests/038-receive-clone-from-current-subvolume/test.sh b/tests/misc-tests/038-receive-clone-from-current-subvolume/test.sh > new file mode 100755 > index 00000000..be648605 > --- /dev/null > +++ b/tests/misc-tests/038-receive-clone-from-current-subvolume/test.sh > @@ -0,0 +1,34 @@ > +#!/bin/bash > +# Test that when receiving a subvolume whose received UUID already exists in > +# the filesystem, we clone from the correct source (the subvolume that we are > +# receiving, not the existing subvolume). This is a regression test for > +# "btrfs-progs: receive: don't lookup clone root for received subvolume". > + > +source "$TEST_TOP/common" > + > +check_prereq btrfs > +check_prereq mkfs.btrfs > + > +setup_root_helper > + > +rm -f disk > +run_check truncate -s 1G disk > +chmod a+w disk > +run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f disk > +run_check $SUDO_HELPER mount -o loop disk "$TEST_MNT" I don't see any special reason to use the loop device (like an additional one to the default), so I think this should be fine using the default image and the common helpers. > +run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT/subvol" > +run_check $SUDO_HELPER dd if=/dev/urandom of="$TEST_MNT/subvol/foo" \ > + bs=1M count=1 status=none > +run_check $SUDO_HELPER cp --reflink "$TEST_MNT/subvol/foo" "$TEST_MNT/subvol/bar" > +run_check $SUDO_HELPER mkdir "$TEST_MNT/subvol/dir" > +run_check $SUDO_HELPER mv "$TEST_MNT/subvol/foo" "$TEST_MNT/subvol/dir" > +run_check $SUDO_HELPER "$TOP/btrfs" property set "$TEST_MNT/subvol" ro true > +run_check $SUDO_HELPER "$TOP/btrfs" send -f send.data "$TEST_MNT/subvol" > + > +run_check $SUDO_HELPER mkdir "$TEST_MNT/first" "$TEST_MNT/second" > +run_check $SUDO_HELPER "$TOP/btrfs" receive -f send.data "$TEST_MNT/first" > +run_check $SUDO_HELPER "$TOP/btrfs" receive -f send.data "$TEST_MNT/second" All paths are inside $TEST_MNT, so a 'cd' into the directory would save some typing. I'll fix it.
diff --git a/tests/misc-tests/038-receive-clone-from-current-subvolume/test.sh b/tests/misc-tests/038-receive-clone-from-current-subvolume/test.sh new file mode 100755 index 00000000..be648605 --- /dev/null +++ b/tests/misc-tests/038-receive-clone-from-current-subvolume/test.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# Test that when receiving a subvolume whose received UUID already exists in +# the filesystem, we clone from the correct source (the subvolume that we are +# receiving, not the existing subvolume). This is a regression test for +# "btrfs-progs: receive: don't lookup clone root for received subvolume". + +source "$TEST_TOP/common" + +check_prereq btrfs +check_prereq mkfs.btrfs + +setup_root_helper + +rm -f disk +run_check truncate -s 1G disk +chmod a+w disk +run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f disk +run_check $SUDO_HELPER mount -o loop disk "$TEST_MNT" + +run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT/subvol" +run_check $SUDO_HELPER dd if=/dev/urandom of="$TEST_MNT/subvol/foo" \ + bs=1M count=1 status=none +run_check $SUDO_HELPER cp --reflink "$TEST_MNT/subvol/foo" "$TEST_MNT/subvol/bar" +run_check $SUDO_HELPER mkdir "$TEST_MNT/subvol/dir" +run_check $SUDO_HELPER mv "$TEST_MNT/subvol/foo" "$TEST_MNT/subvol/dir" +run_check $SUDO_HELPER "$TOP/btrfs" property set "$TEST_MNT/subvol" ro true +run_check $SUDO_HELPER "$TOP/btrfs" send -f send.data "$TEST_MNT/subvol" + +run_check $SUDO_HELPER mkdir "$TEST_MNT/first" "$TEST_MNT/second" +run_check $SUDO_HELPER "$TOP/btrfs" receive -f send.data "$TEST_MNT/first" +run_check $SUDO_HELPER "$TOP/btrfs" receive -f send.data "$TEST_MNT/second" + +run_check $SUDO_HELPER umount "$TEST_MNT" +rm -f disk send.data