diff options
Diffstat (limited to 'tests/geo-rep.rc')
| -rw-r--r-- | tests/geo-rep.rc | 495 |
1 files changed, 495 insertions, 0 deletions
diff --git a/tests/geo-rep.rc b/tests/geo-rep.rc new file mode 100644 index 00000000000..9ba4262730e --- /dev/null +++ b/tests/geo-rep.rc @@ -0,0 +1,495 @@ +GEO_REP_TIMEOUT=120 +CHECK_MOUNT_TIMEOUT=50 +#check for mount point +function check_mounted () { + df | grep $1 | wc -l +} + +function check_status_num_rows() +{ + local search_key=$1 + $GEOREP_CLI $master $slave status | grep -F "$search_key" | wc -l +} + +function check_fanout_status_num_rows() +{ + local search_key=$1 + $GEOREP_CLI $master status | grep -F "$search_key" | wc -l +} + +function check_fanout_status_detail_num_rows() +{ + local search_key=$1 + $GEOREP_CLI $master status detail | grep -F "$search_key" | wc -l +} + +function check_all_status_num_rows() +{ + local search_key=$1 + $GEOREP_CLI status | grep -F "$search_key" | wc -l +} + +function check_all_status_detail_num_rows() +{ + local search_key=$1 + $GEOREP_CLI status detail | grep -F "$search_key" | wc -l +} + +function verify_checkpoint_met() +{ + local master=$1 + local slave=$2 + $GEOREP_CLI $master $slave status detail| grep -F "Yes" | wc -l +} + +function check_keys_distributed() +{ + local search_key=$(cat /var/lib/glusterd/geo-replication/master_slave_common_secret.pem.pub) + grep -F "$search_key" ~/.ssh/authorized_keys > /dev/null + echo $? +} + +function check_common_secret_file() +{ + stat /var/lib/glusterd/geo-replication/master_slave_common_secret.pem.pub + echo $? +} + +function create_rename_symlink_case() +{ + mkdir ${mastermnt}/MUL_REN_SYMLINK + cd ${mastermnt}/MUL_REN_SYMLINK + mkdir sym_dir1 + ln -s "sym_dir1" sym1 + mv sym1 sym2 + mv sym2 sym3 + mv sym3 sym4 + cd - +} + +function create_data() +{ + prefix=$1 + + # GF_FOP_MKNOD + # GF_FOP_MKDIR + # GF_FOP_UNLINK + # GF_FOP_RMDIR + # GF_FOP_SYMLINK + # GF_FOP_RENAME + # GF_FOP_LINK + # GF_FOP_SETXATTR + # GF_FOP_REMOVEXATTR + # GF_FOP_CREATE + # GF_FOP_SETATTR + + # Regular file + data + echo "HelloWorld!" > ${master_mnt}/${prefix}_f1 + touch ${master_mnt}/${prefix}_f2 + touch ${master_mnt}/${prefix}_f3 + + # non-ascii filename test + echo "Hello non-ascii" > ${master_mnt}/${prefix}_f1_ಸಂತಸ + touch ${master_mnt}/${prefix}_f2_ಸಂತಸ + touch ${master_mnt}/${prefix}_f3_ಸಂತಸ + + # dir + mkdir ${master_mnt}/${prefix}_d1 + mkdir ${master_mnt}/${prefix}_d2 + mkdir ${master_mnt}/${prefix}_d3 + + # non-ascii dir and filename test + mkdir ${master_mnt}/${prefix}_d1_ನನ್ನ + mkdir ${master_mnt}/${prefix}_d2_ಸಂತಸ + mkdir ${master_mnt}/${prefix}_d3_ಸಂತಸ + echo "Hello non-ascii" > ${master_mnt}/${prefix}_d1_ನನ್ನ/ಸಂತಸ + + # Hardlink + non-ascii name + ln ${master_mnt}/${prefix}_f1 ${master_mnt}/${prefix}_hl1 + ln ${master_mnt}/${prefix}_f1 ${master_mnt}/${prefix}_hl1_ಸಂತಸ + + # Symlink + cd ${master_mnt} + ln -s ${prefix}_f1 ${prefix}_sl1 + ln -s ${prefix}_f1 ${prefix}_sl1_ಸಂತಸ + cd - + + # UNLINK + rm ${master_mnt}/${prefix}_f2 + rm ${master_mnt}/${prefix}_f2_ಸಂತಸ + + # RMDIR + rmdir ${master_mnt}/${prefix}_d2 + rmdir ${master_mnt}/${prefix}_d2_ಸಂತಸ + + # Rename - File + mv ${master_mnt}/${prefix}_f3 ${master_mnt}/${prefix}_f4 + mv ${master_mnt}/${prefix}_f3_ಸಂತಸ ${master_mnt}/${prefix}_f4_ಸಂತಸ + + # Rename - Dir + mv ${master_mnt}/${prefix}_d3 ${master_mnt}/${prefix}_d4 + mv ${master_mnt}/${prefix}_d3_ಸಂತಸ ${master_mnt}/${prefix}_d4_ಸಂತಸ + + # chown + touch ${master_mnt}/${prefix}_chown_f1 + chown 1000:1000 ${master_mnt}/${prefix}_chown_f1 + touch ${master_mnt}/${prefix}_chown_f1_ಸಂತಸ + chown 1000:1000 ${master_mnt}/${prefix}_chown_f1_ಸಂತಸ +} + +function create_data_hang() +{ + prefix=$1 + mkdir ${master_mnt}/${prefix} + cd ${master_mnt}/${prefix} + # ~1k files is required with 1 sync-job and hang happens if + # stderr buffer of tar/ssh executed with Popen is full (i.e., 64k). + # 64k is hit when ~800 files were not found while syncing data + # from master. So around 1k files is required to hit the condition. + for i in {1..1000} + do + echo "test data" > file$i + mv -f file$i file + done + cd - +} + +function chown_file_ok() +{ + local file_owner=$(stat --format "%u:%g" "$1") + if test "X$file_owner" != "X1000:1000"; then echo 1; else echo 0; fi +} + +function regular_file_ok() +{ + local file_type=$(stat --format "%F" "$1") + if test "X$file_type" != "Xregular file"; then echo 1; else echo 0; fi +} + +function directory_ok() +{ + file_type=$(stat --format "%F" "$1") + if test "X$file_type" != "Xdirectory"; then echo 1; else echo 0; fi +} + +function unlink_ok() +{ + stat "$1" > /dev/null 2>&1 + rc=$? + echo $rc +} + +function hardlink_file_ok() +{ + orig_file=$1 + link_file=$2 + + orig_inode=$(stat --format "%i" "$orig_file") + rc=$? + if test $rc != 0; then + echo $rc + else + link_inode=$(stat --format "%i" "$link_file") + rc=$? + if test $rc != 0; then + echo $rc + else + if test $orig_inode != $link_inode; then + echo 1 + else + echo 0 + fi + fi + fi +} + +function data_ok() +{ + path=$1 + data1="$2" + data2=$(cat $path) + echo "data1:$data1" + echo "data2:$data2" + if test "X$data1" != "X$data2"; then + echo 1 + else + echo 0 + fi +} + +function arequal_checksum() +{ + master=$1 + slave=$2 + ret=$(diff <(arequal-checksum -p $master) <(arequal-checksum -p $slave) | wc -l) + echo x$ret +} + +function symlink_ok() +{ + local orig_file_name=$1 + local symlink_file=$2 + + local file_type=$(stat --format "%F" "$symlink_file") + if test "X$file_type" != "Xsymbolic link"; then + echo 1 + else + local fname=$(readlink $symlink_file) + if test "X$fname" != "X$orig_file_name"; then + echo 2 + else + echo 0 + fi + fi + +} + +function rename_file_ok() +{ + old_name=$1 + new_name=$2 + + if [ -f $old_name ]; then + echo 1 + elif [ ! -f $new_name ]; then + echo 2 + else + echo 0 + fi +} + +function rename_dir_ok() +{ + old_name=$1 + new_name=$2 + + if [ -d $old_name ]; then + echo 1 + elif [ ! -d $new_name ]; then + echo 2 + else + echo 0 + fi +} + +function create_georep_session() +{ + $CLI system:: execute gsec_create + rc=$? + if test $rc != 0; then + echo $rc + else + $CLI volume geo-rep $master $slave create push-pem + rc=$? + if test $rc != 0; then + echo $rc + else + echo 0 + fi + fi +} + +# logrotate_simulate should be called (rotate_count + 1) times to cause +# an unlink and a gfid re-allocation. +# remember to keep the file name and rotate_count the same across the +# calls +function logrotate_simulate() +{ + file_name=$1 + declare -i rotate_count=$2 + + while [ $rotate_count -ge 0 ]; do + source_file="$file_name.$((rotate_count))" + if [ $rotate_count -eq 0 ]; then + source_file="$file_name" + fi + if [ -f "${source_file}" ]; then + mv "${source_file}" "$file_name.$((rotate_count+1))" + fi + ((rotate_count--)) + done + + # logrotate causes gfid to be rellocated to a new file created + # after an unlink and a blind rename later causes georep session + # to go Faulty + # this should not happen if source basename on slave is tested + # to be linked with its own gfid as on master, before invoking + # the rename syscall + touch $file_name + rotate_count=$2 + unlink_file_name="$file_name.$((rotate_count+1))" + unlink $unlink_file_name 2>/dev/null +} + +function create_rename() +{ + file_name=$1 + echo $file_name > $file_name + mv $file_name $file_name.bak +} + +function create_rename_ok() +{ + file_name=$1 + # after a log replay, we don't expect the original file + # to be recreated i.e. a dangling entry without a corresponding + # back-end gfid link should not exist on the slave + if [ -f "$file_name" ]; then + echo 1 + else + echo 0 + fi +} + +function hardlink_rename() +{ + file_name=$1 + echo $file_name > $file_name + ln $file_name $file_name.hl + mv $file_name.hl $file_name.hl1 +} + +function hardlink_rename_ok() +{ + file_name=$1 + # the hardlink file should not exist on the slave after renaming + # to one of its links on changelog reprocessing + if [ ! -f "$file_name" ]; then + echo 1 + elif [ ! -f "$file_name.hl1" ]; then + echo 2 + elif [ -f "$file_name.hl" ]; then + echo 3 + else + echo 0 + fi +} + +function create_symlink_rename_mkdir_data() +{ + mkdir ${master_mnt}/symlink_test1 + touch ${master_mnt}/symlink_test1/file1 + ln -s "./file1" ${master_mnt}/symlink_test1/sym_link + mv ${master_mnt}/symlink_test1/sym_link ${master_mnt}/symlink_test1/rn_sym_link + mkdir ${master_mnt}/symlink_test1/sym_link +} +function verify_symlink_rename_mkdir_data() +{ + sym_dir=$1 + if [ ! -f $sym_dir/file1 ]; then + echo 1 + elif [ ! -h $sym_dir/rn_sym_link ]; then + echo 2 + elif [ ! -d $sym_dir/sym_link ]; then + echo 3 + else + echo 0 + fi +} + +function create_rsnapshot_data() +{ + rm -rf /tmp/rsnapshot_symlinkbug + mkdir /tmp/rsnapshot_symlinkbug + ln -f -s /does/not/exist /tmp/rsnapshot_symlinkbug/a_symlink + rsync -a /tmp/rsnapshot_symlinkbug ${master_mnt}/ + cp -al ${master_mnt}/rsnapshot_symlinkbug ${master_mnt}/rsnapshot_symlinkbug.0 + ln -f -s /does/not/exist2 /tmp/rsnapshot_symlinkbug/a_symlink + rsync -a /tmp/rsnapshot_symlinkbug ${master_mnt}/ + cp -al ${master_mnt}/rsnapshot_symlinkbug ${master_mnt}/rsnapshot_symlinkbug.1 +} + +function verify_rsnapshot_data() +{ + dir="$1/rsnapshot_symlinkbug" + dir0="$1/rsnapshot_symlinkbug.0" + dir1="$1/rsnapshot_symlinkbug.1" + if [ ! -d "$dir" ]; then + echo 1 + elif [ ! -h $dir/a_symlink ]; then + echo 2 + elif test "X$(readlink $dir/a_symlink)" != "X/does/not/exist2"; then + echo 3 + elif [ ! -h $dir0/a_symlink ]; then + echo 4 + elif test "X$(readlink $dir0/a_symlink)" != "X/does/not/exist"; then + echo 5 + elif [ ! -h $dir1/a_symlink ]; then + echo 6 + elif test "X$(readlink $dir1/a_symlink)" != "X/does/not/exist2"; then + echo 7 + else + echo 0 + fi +} + +function create_hardlink_rename_data() +{ + dir=${master_mnt}/hardlink_rename_issue + mkdir $dir + echo "test_data" > $dir/f1 + ln $dir/f1 $dir/f2 + mv $dir/f2 $dir/f3 + unlink $dir/f1 +} + +function verify_hardlink_rename_data() +{ + dir=$1/hardlink_rename_issue + if [ ! -d $dir ]; then + echo 1 + elif [ -f $dir/f1 ]; then + echo 2 + elif [ -f $dir/f2 ]; then + echo 3 + elif [ ! -f $dir/f3 ]; then + echo 4 + elif test "Xtest_data" != "X$(cat $dir/f3)"; then + echo 5 + else + echo 0 + fi +} + +function check_slave_read_only() +{ + volum=$1 + gluster volume info $1 | grep 'features.read-only: on' + echo $? +} + +function create_rename_with_existing_destination() +{ + dir=$1/rename_with_existing_destination + mkdir $dir + for i in {1..5} + do + echo "Data_set$i" > $dir/data_set$i + mv $dir/data_set$i $dir/data_set -f + done +} + +function verify_rename_with_existing_destination() +{ + dir=$1/rename_with_existing_destination + + if [ ! -d $dir ]; then + echo 1 + elif [ ! -f $dir/data_set ]; then + echo 2 + elif [ -f $dir/data_set1 ]; then + echo 3 + elif [ -f $dir/data_set2 ]; then + echo 4 + elif [ -f $dir/data_set3 ]; then + echo 5 + elif [ -f $dir/data_set4 ]; then + echo 6 + elif [ -f $dir/data_set5 ]; then + echo 7 + elif test "XData_set5" != "X$(cat $dir/data_set)"; then + echo 8 + else + echo 0 + fi +} |
