From c2b0696f0c2b901b8c34c732c1ba85c364ff2f04 Mon Sep 17 00:00:00 2001 From: N Balachandran Date: Fri, 7 Sep 2018 20:48:59 +0530 Subject: tests/dht: Add a test file for file renames Test the various combinations of hashed and cached subvols for the src and dst. Change-Id: I41416f9e5f2b7ea1c880d1913fdd6576da1ee868 fixes: bz#1626543 Signed-off-by: N Balachandran --- tests/basic/distribute/file-rename.t | 1021 ++++++++++++++++++++++++++++++++++ 1 file changed, 1021 insertions(+) create mode 100644 tests/basic/distribute/file-rename.t diff --git a/tests/basic/distribute/file-rename.t b/tests/basic/distribute/file-rename.t new file mode 100644 index 00000000000..63111b8ad8f --- /dev/null +++ b/tests/basic/distribute/file-rename.t @@ -0,0 +1,1021 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc +. $(dirname $0)/../../nfs.rc +. $(dirname $0)/../../common-utils.rc + +# Test overview: +# Test all combinations of src-hashed/src-cached/dst-hashed/dst-cached + +hashdebugxattr="dht.file.hashed-subvol." + +function get_brick_index { + local inpath=$1 + brickroot=$(getfattr -m . -n trusted.glusterfs.pathinfo $inpath | tr ' ' '\n' | sed -n 's/.*/\1/p') + echo ${brickroot:(-1)} +} + +function get_brick_path_for_subvol { + local in_subvol=$1 + local in_brickpath + + in_brickpath=$(cat "$M0/.meta/graphs/active/$in_subvol/options/remote-subvolume") + echo $in_brickpath + +} + +#Checks that file exists only on hashed and/or cached +function file_existence_check +{ + local in_file_path=$1 + local in_hashed=$2 + local in_cached=$3 + local in_client_subvol + local in_brickpath + local ret + + for i in {0..3} + do + in_client_subvol="$V0-client-$i" + in_brickpath=$(cat "$M0/.meta/graphs/active/$in_client_subvol/options/remote-subvolume") + stat "$in_brickpath/$in_file_path" 2>/dev/null + ret=$? + # Either the linkto or the data file must exist on the hashed + if [ "$in_client_subvol" == "$in_hashed" ]; then + if [ $ret -ne 0 ]; then + return 1 + fi + continue + fi + + # If the cached is non-null, we expect the file to exist on it + if [ "$in_client_subvol" == "$in_cached" ]; then + if [ $ret -ne 0 ]; then + return 1 + fi + continue + fi + + if [ $ret -eq 0 ]; then + return 2 + fi + done + return 0 +} + + +# Check if file exists on any of the bricks of the volume +function file_does_not_exist +{ + local inpath=$1 + for i in `seq 0 3` + do + file_path=$B0/$V0-$i/$inpath + if [ -f "$file_path" ]; then + echo "1" + return 1 + fi + done + return 0 +} + + +# Input: filename dirpath +function get_hash_subvol +{ + hash_subvol=$(getfattr --only-values -n "$hashdebugxattr$1" $2 2>/dev/null) +} + + + +# Find the first filename that hashes to a subvol +# other than $1 + +function first_filename_with_diff_hashsubvol +{ + local in_subvol=$1 + local in_path=$2 + local file_pattern=$3 + local in_hash_subvol + + for i in {1..100} + do + dstfilename="$file_pattern$i" + in_hash_subvol=$(get_hash_subvol "$dstfilename" "$in_path") + echo $in_hash_subvol + if [ "$in_subvol" != "$in_hash_subvol" ]; then + return 0 + fi + done + return 1 +} + +# Find the first filename that hashes to the same subvol +# as $1 +function first_filename_with_same_hashsubvol +{ + local in_subvol=$1 + local in_path=$2 + local in_hash_subvol + local file_pattern=$3 + + for i in {1..100} + do + dstfilename="$file_pattern$i" + get_hash_subvol "$dstfilename" "$in_path" + in_hash_subvol=$hash_subvol +# echo $in_hash_subvol + if [ "$in_subvol" == "$in_hash_subvol" ]; then + return 0 + fi + done + return 1 +} + +function file_is_linkto +{ + local brick_filepath=$1 + + test=$(stat $brick_filepath 2>&1) + if [ $? -ne 0 ]; then + echo "2" + return + fi + + test=$(getfattr -n trusted.glusterfs.dht.linkto -e text $brick_filepath 2>&1) + + if [ $? -eq 0 ]; then + echo "1" + else + echo "0" + fi +} + + + + +cleanup + +TEST glusterd +TEST pidof glusterd + + +# We need at least 4 bricks to test all combinations of hashed and +# cached files + +TEST $CLI volume create $V0 $H0:$B0/$V0-{0..3} +TEST $CLI volume start $V0 + +# Mount using FUSE +TEST glusterfs -s $H0 --volfile-id $V0 $M0 + + +################################################################ +# The first set of tests are those where the Dst file does not exist +# dst-cached = NULL +# +############################################################### + +################### Test 1 #################################### +# +# src-hashed = src-cached = dst-hashed +# dst-cached = null +# src-file = src-1 + +echo " **** Test 1 **** " + +src_file="src-1" + +TEST mkdir $M0/test-1 +TEST touch $M0/test-1/$src_file + +TEST get_hash_subvol $src_file $M0/test-1 +src_hashed=$hash_subvol +#echo "Hashed subvol for $src_file: " $src_hashed + +# Find a file name that hashes to the same subvol as $src_file +TEST first_filename_with_same_hashsubvol "$src_hashed" "$M0/test-1" "dst-" +#echo "dst-file name: " $dstfilename +dst_hashed=$src_hashed + +src_hash_brick=$(get_brick_path_for_subvol $src_hashed) + +echo "Renaming $src_file to $dstfilename" + +TEST mv $M0/test-1/$src_file $M0/test-1/$dstfilename + +# Expected: +# dst file is accessible from the mount point +# dst file exists only on the hashed brick. +# no linkto files on any bricks +# src files do not exist + + +TEST stat $M0/test-1/$dstfilename 2>/dev/null +TEST file_existence_check test-1/$dstfilename $src_hashed +TEST file_does_not_exist test-1/$src_file +EXPECT "0" file_is_linkto $src_hash_brick/test-1/$dstfilename + + +################### Test 2 #################################### + +# src-hashed = src-cached != dst-hashed +# dst-cached = null + +echo " **** Test 2 **** " + +src_file="src-1" + +TEST mkdir $M0/test-2 +TEST touch $M0/test-2/$src_file + +TEST get_hash_subvol $src_file $M0/test-2 +src_hashed=$hash_subvol +#echo "Hashed subvol for $src_file: " $src_hashed + +# Find a file name that hashes to a diff hashed subvol than $src_file +TEST first_filename_with_diff_hashsubvol "$src_hashed" "$M0/test-2" "dst-" +echo "dst-file name: " $dstfilename +TEST get_hash_subvol $dstfilename $M0/test-2 +dst_hashed=$hash_subvol + +src_hash_brick=$(get_brick_path_for_subvol $src_hashed) +dst_hash_brick=$(get_brick_path_for_subvol $dst_hashed) + +echo "Renaming $src_file to $dstfilename" + +TEST mv $M0/test-2/$src_file $M0/test-2/$dstfilename + + +# Expected: +# dst file is accessible from the mount point +# dst data file on src_hashed and dst linkto file on dst_hashed +# src files do not exist + + +TEST stat $M0/test-2/$dstfilename 2>/dev/null +TEST file_existence_check test-2/$dstfilename $dst_hashed $src_hashed +TEST file_does_not_exist test-2/$src_file +EXPECT "1" file_is_linkto $dst_hash_brick/test-2/$dstfilename +EXPECT "0" file_is_linkto $src_hash_brick/test-2/$dstfilename + +################### Test 3 #################################### + +# src-hashed = dst-hashed != src-cached + +echo " **** Test 3 **** " + +src_file0="abc-1" + +# 1. Create src file with src_cached != src_hashed +TEST mkdir $M0/test-3 +TEST touch $M0/test-3/$src_file0 + +TEST get_hash_subvol $src_file0 $M0/test-3 +src_cached=$hash_subvol +#echo "Hashed subvol for $src_file0: " $src_cached + +# Find a file name that hashes to a diff hashed subvol than $src_file0 +TEST first_filename_with_diff_hashsubvol "$src_cached" "$M0/test-3" "src-" +echo "dst-file name: " $dstfilename +src_file=$dstfilename + +TEST mv $M0/test-3/$src_file0 $M0/test-3/$src_file + +TEST get_hash_subvol $src_file $M0/test-3 +src_hashed=$hash_subvol + + +# 2. Rename src to dst +TEST first_filename_with_same_hashsubvol "$src_hashed" "$M0/test-3" "dst-" +#echo "dst-file name: " $dstfilename + +src_hash_brick=$(get_brick_path_for_subvol $src_hashed) +src_cached_brick=$(get_brick_path_for_subvol $src_cached) + +echo "Renaming $src_file to $dstfilename" + +TEST mv $M0/test-3/$src_file $M0/test-3/$dstfilename + + +# Expected: +# dst file is accessible from the mount point +TEST stat $M0/test-3/$dstfilename 2>/dev/null + +# src file does not exist +TEST file_does_not_exist test-3/$src_file + +# dst linkto file on src_hashed and dst data file on src_cached +TEST file_existence_check test-3/$dstfilename $src_hashed $src_cached + +EXPECT "1" file_is_linkto $src_hash_brick/test-3/$dstfilename +EXPECT "0" file_is_linkto $src_cached_brick/test-3/$dstfilename + + + +################### Test 4 #################################### + +# src-cached = dst-hashed != src-hashed + +echo " **** Test 4 **** " + +src_file0="abc-1" + +# 1. Create src file with src_cached != src_hashed +TEST mkdir $M0/test-4 +TEST touch $M0/test-4/$src_file0 + +TEST get_hash_subvol $src_file0 $M0/test-4 +src_cached=$hash_subvol +#echo "Hashed subvol for $src_file0: " $src_cached + +# Find a file name that hashes to a diff hashed subvol than $src_file0 +TEST first_filename_with_diff_hashsubvol "$src_cached" "$M0/test-4" "src-" +src_file=$dstfilename + +TEST mv $M0/test-4/$src_file0 $M0/test-4/$src_file + +TEST get_hash_subvol $src_file $M0/test-4 +src_hashed=$hash_subvol + + +# 2. Rename src to dst +TEST first_filename_with_same_hashsubvol "$src_cached" "$M0/test-4" "dst-" +#echo "dst-file name: " $dstfilename + +src_hash_brick=$(get_brick_path_for_subvol $src_hashed) +src_cached_brick=$(get_brick_path_for_subvol $src_cached) + +echo "Renaming $src_file to $dstfilename" + +TEST mv $M0/test-4/$src_file $M0/test-4/$dstfilename + +# Expected: +# dst file is accessible from the mount point +TEST stat $M0/test-4/$dstfilename 2>/dev/null + +# src file does not exist +TEST file_does_not_exist test-4/$src_file + +# dst linkto file on src_hashed and dst data file on src_cached +TEST file_existence_check test-4/$dstfilename $src_cached + +EXPECT "0" file_is_linkto $src_cached_brick/test-4/$dstfilename + + +################### Test 5 #################################### + +# src-cached != src-hashed +# src-hashed != dst-hashed +# src-cached != dst-hashed + + +echo " **** Test 5 **** " + +# 1. Create src and dst files + +TEST mkdir $M0/test-5 + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-5" "abc-" +src_file0=$dstfilename + +TEST touch $M0/test-5/$src_file0 + +TEST get_hash_subvol $src_file0 $M0/test-5 +src_cached=$hash_subvol +#echo "Hashed subvol for $src_file0: " $src_cached + +# Find a file name that hashes to a diff hashed subvol than $src_file0 +TEST first_filename_with_same_hashsubvol "$V0-client-1" "$M0/test-5" "src-" +src_file=$dstfilename + +TEST mv $M0/test-5/$src_file0 $M0/test-5/$src_file + +TEST get_hash_subvol $src_file $M0/test-5 +src_hashed=$hash_subvol + +TEST first_filename_with_same_hashsubvol "$V0-client-2" "$M0/test-5" "dst-" +#echo "dst-file name: " $dstfilename + +dst_hash_brick=$(get_brick_path_for_subvol "$V0-client-2") +src_cached_brick=$(get_brick_path_for_subvol $src_cached) + + +# 2. Rename src to dst +echo "Renaming $src_file to $dstfilename" + +TEST mv $M0/test-5/$src_file $M0/test-5/$dstfilename + + +# 3. Validate + +# Expected: +# dst file is accessible from the mount point +TEST stat $M0/test-5/$dstfilename 2>/dev/null + +# src file does not exist +TEST file_does_not_exist test-5/$src_file + +# dst linkto file on src_hashed and dst data file on src_cached + +EXPECT "0" file_is_linkto $src_cached_brick/test-5/$dstfilename +EXPECT "1" file_is_linkto $dst_hash_brick/test-5/$dstfilename + + +######################################################################## +# +# The Dst file exists +# +######################################################################## + +################### Test 6 #################################### + +# src_hash = src_cached +# dst_hash = dst_cached +# dst_hash = src_hash + + +TEST mkdir $M0/test-6 + +# 1. Create src and dst files + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-6" "src-" +src_file=$dstfilename + +TEST touch $M0/test-6/$src_file + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-6" "dst-" +dst_file=$dstfilename + +TEST touch $M0/test-6/$dst_file + + +# 2. Rename src to dst + +TEST mv $M0/test-6/$src_file $M0/test-6/$dst_file + + +# 3. Validate + +dst_hash_brick=$(get_brick_path_for_subvol "$V0-client-0") + +TEST stat $M0/test-6/$dst_file 2>/dev/null +TEST file_existence_check test-6/$dst_file "$V0-client-0" +TEST file_does_not_exist test-6/$src_file +EXPECT "0" file_is_linkto $dst_hash_brick/test-6/$dst_file + + +################### Test 7 #################################### + +# src_hash = src_cached +# dst_hash = dst_cached +# dst_hash != src_hash + + +echo " **** Test 7 **** " + +TEST mkdir $M0/test-7 + +# 1. Create src and dst files + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-7" "src-" +src_file=$dstfilename + +TEST touch $M0/test-7/$src_file + +TEST first_filename_with_same_hashsubvol "$V0-client-1" "$M0/test-7" "dst-" +dst_file=$dstfilename + +TEST touch $M0/test-7/$dst_file + + +# 2. Rename src to dst + +TEST mv $M0/test-7/$src_file $M0/test-7/$dst_file + + +# 3. Validate + +dst_hash_brick=$(get_brick_path_for_subvol "$V0-client-1") +src_hash_brick=$(get_brick_path_for_subvol "$V0-client-0") + +TEST stat $M0/test-7/$dst_file 2>/dev/null +TEST file_existence_check test-7/$dst_file "$V0-client-1" "$V0-client-0" +TEST file_does_not_exist test-7/$src_file + +EXPECT "0" file_is_linkto $src_hash_brick/test-7/$dst_file +EXPECT "1" file_is_linkto $dst_hash_brick/test-7/$dst_file + + +################### Test 8 #################################### + +# src_hash = src_cached +# dst_hash != dst_cached +# dst_hash != src_hash +# dst_cached != src_hash + +echo " **** Test 8 **** " + +TEST mkdir $M0/test-8 + + +# 1. Create src and dst files + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-8" "src-" +src_file=$dstfilename +TEST touch $M0/test-8/$src_file + +TEST first_filename_with_same_hashsubvol "$V0-client-1" "$M0/test-8" "dst0-" +dst_file0=$dstfilename +TEST touch $M0/test-8/$dst_file0 + +TEST first_filename_with_same_hashsubvol "$V0-client-2" "$M0/test-8" "dst-" +dst_file=$dstfilename + +mv $M0/test-8/$dst_file0 $M0/test-8/$dst_file + + +# 2. Rename the file + +mv $M0/test-8/$src_file $M0/test-8/$dst_file + + +# 3. Validate + +dst_hash_brick=$(get_brick_path_for_subvol "$V0-client-2") +src_hash_brick=$(get_brick_path_for_subvol "$V0-client-0") + +TEST stat $M0/test-8/$dst_file 2>/dev/null +TEST file_existence_check test-8/$dst_file "$V0-client-2" "$V0-client-0" +TEST file_does_not_exist test-8/$src_file + +EXPECT "0" file_is_linkto $src_hash_brick/test-8/$dst_file +EXPECT "1" file_is_linkto $dst_hash_brick/test-8/$dst_file + +################### Test 9 #################################### + +# src_hash = src_cached = dst_hash +# dst_hash != dst_cached + +echo " **** Test 9 **** " + +TEST mkdir $M0/test-9 + + +# 1. Create src and dst files + + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-9" "src-" +src_file=$dstfilename +TEST touch $M0/test-9/$src_file + + +TEST first_filename_with_same_hashsubvol "$V0-client-1" "$M0/test-9" "dst0-" +dst0_file=$dstfilename +TEST touch $M0/test-9/$dst0_file + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-9" "dst-" +dst_file=$dstfilename + +TEST mv $M0/test-9/$dst0_file $M0/test-9/$dst_file + +# 2. Rename the file + +mv $M0/test-9/$src_file $M0/test-9/$dst_file + + +# 3. Validate + +dst_hash_brick=$(get_brick_path_for_subvol "$V0-client-0") + +TEST stat $M0/test-9/$dst_file 2>/dev/null +TEST file_existence_check test-9/$dst_file "$V0-client-0" +TEST file_does_not_exist test-9/$src_file +EXPECT "0" file_is_linkto $dst_hash_brick/test-9/$dst_file + + +################### Test 10 #################################### + +# src_hash = src_cached = dst_cached +# dst_hash != dst_cached + +echo " **** Test 10 **** " + +TEST mkdir $M0/test-10 + + +# 1. Create src and dst files + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-10" "src-" +src_file=$dstfilename +TEST touch $M0/test-10/$src_file + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-10" "dst0-" +dst0_file=$dstfilename +TEST touch $M0/test-10/$dst0_file + +TEST first_filename_with_same_hashsubvol "$V0-client-1" "$M0/test-10" "dst-" +dst_file=$dstfilename + +mv $M0/test-10/$dst0_file $M0/test-10/$dst_file + + +# 2. Rename the file + +mv $M0/test-10/$src_file $M0/test-10/$dst_file + + +# 3. Validate + +dst_hash_brick=$(get_brick_path_for_subvol "$V0-client-1") +dst_cached_brick=$(get_brick_path_for_subvol "$V0-client-0") + +TEST stat $M0/test-10/$dst_file 2>/dev/null +TEST file_existence_check test-10/$dst_file "$V0-client-1" "$V0-client-0" +TEST file_does_not_exist test-10/$src_file +EXPECT "1" file_is_linkto $dst_hash_brick/test-10/$dst_file +EXPECT "0" file_is_linkto $dst_cached_brick/test-10/$dst_file + + +################### Test 11 #################################### + +# src_hash != src_cached +# dst_hash = dst_cached = src_cached + +echo " **** Test 11 **** " + +TEST mkdir $M0/test-11 + + +# 1. Create src and dst files + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-11" "src0-" +src0_file=$dstfilename +TEST touch $M0/test-11/$src0_file + +TEST first_filename_with_same_hashsubvol "$V0-client-1" "$M0/test-11" "src-" +src_file=$dstfilename + +mv $M0/test-11/$src0_file $M0/test-11/$src_file + + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-11" "dst-" +dst_file=$dstfilename +TEST touch $M0/test-11/$dst_file + + +# 2. Rename the file + +mv $M0/test-11/$src_file $M0/test-11/$dst_file + + +# 3. Validate + +dst_hash_brick=$(get_brick_path_for_subvol "$V0-client-0") + +TEST stat $M0/test-11/$dst_file 2>/dev/null +TEST file_existence_check test-11/$dst_file "$V0-client-0" +TEST file_does_not_exist test-11/$src_file +EXPECT "0" file_is_linkto $dst_hash_brick/test-11/$dst_file + + +################### Test 12 #################################### + +# src_hash != src_cached +# dst_hash = dst_cached = src_hash + +echo " **** Test 12 **** " + +TEST mkdir $M0/test-12 + + +# 1. Create src and dst files + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-12" "src0-" +src0_file=$dstfilename +TEST touch $M0/test-12/$src0_file + +TEST first_filename_with_same_hashsubvol "$V0-client-1" "$M0/test-12" "src-" +src_file=$dstfilename + +mv $M0/test-12/$src0_file $M0/test-12/$src_file + + +TEST first_filename_with_same_hashsubvol "$V0-client-1" "$M0/test-12" "dst-" +dst_file=$dstfilename +TEST touch $M0/test-12/$dst_file + + +# 2. Rename the file + +mv $M0/test-12/$src_file $M0/test-12/$dst_file + + +# 3. Validate + +dst_hash_brick=$(get_brick_path_for_subvol "$V0-client-1") +dst_cached_brick=$(get_brick_path_for_subvol "$V0-client-0") + +TEST stat $M0/test-12/$dst_file 2>/dev/null +TEST file_existence_check test-12/$dst_file "$V0-client-1" "$V0-client-0" +TEST file_does_not_exist test-12/$src_file +EXPECT "1" file_is_linkto $dst_hash_brick/test-12/$dst_file +EXPECT "0" file_is_linkto $dst_cached_brick/test-12/$dst_file + +################### Test 13 #################################### + +# src_hash != src_cached +# dst_hash = dst_cached +# dst_hash != src_cached +# dst_hash != src_hash + +echo " **** Test 13 **** " + +TEST mkdir $M0/test-13 + + +# 1. Create src and dst files + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-13" "src0-" +src0_file=$dstfilename +TEST touch $M0/test-13/$src0_file + +TEST first_filename_with_same_hashsubvol "$V0-client-1" "$M0/test-13" "src-" +src_file=$dstfilename + +mv $M0/test-13/$src0_file $M0/test-13/$src_file + + +TEST first_filename_with_same_hashsubvol "$V0-client-2" "$M0/test-13" "dst-" +dst_file=$dstfilename +TEST touch $M0/test-13/$dst_file + +# 2. Rename the file + +mv $M0/test-13/$src_file $M0/test-13/$dst_file + + +# 3. Validate + +dst_hash_brick=$(get_brick_path_for_subvol "$V0-client-2") +dst_cached_brick=$(get_brick_path_for_subvol "$V0-client-0") + +TEST stat $M0/test-13/$dst_file 2>/dev/null +TEST file_existence_check test-13/$dst_file "$V0-client-2" "$V0-client-0" +TEST file_does_not_exist test-13/$src_file +EXPECT "1" file_is_linkto $dst_hash_brick/test-13/$dst_file +EXPECT "0" file_is_linkto $dst_cached_brick/test-13/$dst_file + + +################### Test 14 #################################### + +# src_hash != src_cached +# dst_hash = src_hash +# dst_cached = src_cached + +echo " **** Test 14 **** " + +TEST mkdir $M0/test-14 + + +# 1. Create src and dst files + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-14" "src0-" +src0_file=$dstfilename +TEST touch $M0/test-14/$src0_file + +TEST first_filename_with_same_hashsubvol "$V0-client-1" "$M0/test-14" "src-" +src_file=$dstfilename + +mv $M0/test-14/$src0_file $M0/test-14/$src_file + + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-14" "dst0-" +dst0_file=$dstfilename +TEST touch $M0/test-14/$dst0_file + +TEST first_filename_with_same_hashsubvol "$V0-client-1" "$M0/test-14" "dst-" +dst_file=$dstfilename + +mv $M0/test-14/$dst0_file $M0/test-14/$dst_file + + +# 2. Rename the file + +mv $M0/test-14/$src_file $M0/test-14/$dst_file + + +# 3. Validate + +dst_hash_brick=$(get_brick_path_for_subvol "$V0-client-1") +dst_cached_brick=$(get_brick_path_for_subvol "$V0-client-0") + +TEST stat $M0/test-14/$dst_file 2>/dev/null +TEST file_existence_check test-14/$dst_file "$V0-client-1" "$V0-client-0" +TEST file_does_not_exist test-14/$src_file +EXPECT "1" file_is_linkto $dst_hash_brick/test-14/$dst_file +EXPECT "0" file_is_linkto $dst_cached_brick/test-14/$dst_file + +################### Test 15 #################################### + +# src_hash != src_cached +# dst_hash != src_hash +# dst_hash != src_cached +# dst_cached = src_cached + +echo " **** Test 15 **** " + +TEST mkdir $M0/test-15 + + +# 1. Create src and dst files + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-15" "src0-" +src0_file=$dstfilename +TEST touch $M0/test-15/$src0_file + +TEST first_filename_with_same_hashsubvol "$V0-client-1" "$M0/test-15" "src-" +src_file=$dstfilename + +mv $M0/test-15/$src0_file $M0/test-15/$src_file + + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-15" "dst0-" +dst0_file=$dstfilename +TEST touch $M0/test-15/$dst0_file + +TEST first_filename_with_same_hashsubvol "$V0-client-2" "$M0/test-15" "dst-" +dst_file=$dstfilename + +mv $M0/test-15/$dst0_file $M0/test-15/$dst_file + + +# 2. Rename the file + +mv $M0/test-15/$src_file $M0/test-15/$dst_file + +# 3. Validate + +dst_hash_brick=$(get_brick_path_for_subvol "$V0-client-2") +dst_cached_brick=$(get_brick_path_for_subvol "$V0-client-0") + +TEST stat $M0/test-15/$dst_file 2>/dev/null +TEST file_existence_check test-15/$dst_file "$V0-client-2" "$V0-client-0" +TEST file_does_not_exist test-15/$src_file +EXPECT "1" file_is_linkto $dst_hash_brick/test-15/$dst_file +EXPECT "0" file_is_linkto $dst_cached_brick/test-15/$dst_file + + + +################### Test 16 #################################### + +# src_hash != src_cached +# dst_hash = src_cached +# dst_cached = src_hash + +echo " **** Test 16 **** " + +TEST mkdir $M0/test-16 + + +# 1. Create src and dst files + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-16" "src0-" +src0_file=$dstfilename +TEST touch $M0/test-16/$src0_file + +TEST first_filename_with_same_hashsubvol "$V0-client-1" "$M0/test-16" "src-" +src_file=$dstfilename + +mv $M0/test-16/$src0_file $M0/test-16/$src_file + + +TEST first_filename_with_same_hashsubvol "$V0-client-1" "$M0/test-16" "dst0-" +dst0_file=$dstfilename +TEST touch $M0/test-16/$dst0_file + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-16" "dst-" +dst_file=$dstfilename + +mv $M0/test-16/$dst0_file $M0/test-16/$dst_file + + +# 2. Rename the file + +mv $M0/test-16/$src_file $M0/test-16/$dst_file + +# 3. Validate + +dst_hash_brick=$(get_brick_path_for_subvol "$V0-client-0") + +TEST stat $M0/test-16/$dst_file 2>/dev/null +TEST file_existence_check test-16/$dst_file "$V0-client-0" +TEST file_does_not_exist test-16/$src_file +EXPECT "0" file_is_linkto $dst_hash_brick/test-16/$dst_file + + +################### Test 17 #################################### + +# src_hash != src_cached +# dst_hash != dst_cached +# dst_hash != src_hash != src_cached +# dst_cached = src_hash + + +echo " **** Test 17 **** " + +TEST mkdir $M0/test-17 + + +# 1. Create src and dst files + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-17" "src0-" +src0_file=$dstfilename +TEST touch $M0/test-17/$src0_file + +TEST first_filename_with_same_hashsubvol "$V0-client-1" "$M0/test-17" "src-" +src_file=$dstfilename + +mv $M0/test-17/$src0_file $M0/test-17/$src_file + + +TEST first_filename_with_same_hashsubvol "$V0-client-1" "$M0/test-17" "dst0-" +dst0_file=$dstfilename +TEST touch $M0/test-17/$dst0_file + +TEST first_filename_with_same_hashsubvol "$V0-client-2" "$M0/test-17" "dst-" +dst_file=$dstfilename + +mv $M0/test-17/$dst0_file $M0/test-17/$dst_file + + +# 2. Rename the file + +mv $M0/test-17/$src_file $M0/test-17/$dst_file + +# 3. Validate + +dst_hash_brick=$(get_brick_path_for_subvol "$V0-client-2") +dst_cached_brick=$(get_brick_path_for_subvol "$V0-client-0") + +TEST stat $M0/test-17/$dst_file 2>/dev/null +TEST file_existence_check test-17/$dst_file "$V0-client-2" "$V0-client-0" +TEST file_does_not_exist test-17/$src_file +EXPECT "1" file_is_linkto $dst_hash_brick/test-17/$dst_file +EXPECT "0" file_is_linkto $dst_cached_brick/test-17/$dst_file + + +################### Test 18 #################################### + +# src_hash != src_cached +# dst_hash != dst_cached +# dst_hash != src_hash != src_cached != dst_cached + + +echo " **** Test 18 **** " + +TEST mkdir $M0/test-18 + + +# 1. Create src and dst files + +TEST first_filename_with_same_hashsubvol "$V0-client-0" "$M0/test-18" "src0-" +src0_file=$dstfilename +TEST touch $M0/test-18/$src0_file + +TEST first_filename_with_same_hashsubvol "$V0-client-1" "$M0/test-18" "src-" +src_file=$dstfilename + +mv $M0/test-18/$src0_file $M0/test-18/$src_file + + +TEST first_filename_with_same_hashsubvol "$V0-client-2" "$M0/test-18" "dst0-" +dst0_file=$dstfilename +TEST touch $M0/test-18/$dst0_file + +TEST first_filename_with_same_hashsubvol "$V0-client-3" "$M0/test-18" "dst-" +dst_file=$dstfilename + +mv $M0/test-18/$dst0_file $M0/test-18/$dst_file + + +# 2. Rename the file + +mv $M0/test-18/$src_file $M0/test-18/$dst_file + +# 3. Validate + +dst_hash_brick=$(get_brick_path_for_subvol "$V0-client-3") +dst_cached_brick=$(get_brick_path_for_subvol "$V0-client-0") + +TEST stat $M0/test-18/$dst_file 2>/dev/null +TEST file_existence_check test-18/$dst_file "$V0-client-3" "$V0-client-0" +TEST file_does_not_exist test-18/$src_file +EXPECT "1" file_is_linkto $dst_hash_brick/test-18/$dst_file +EXPECT "0" file_is_linkto $dst_cached_brick/test-18/$dst_file + + +# Cleanup +cleanup + -- cgit