summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/geo-rep.rc70
-rw-r--r--tests/geo-rep/georep-basic-dr-rsync.t26
2 files changed, 96 insertions, 0 deletions
diff --git a/tests/geo-rep.rc b/tests/geo-rep.rc
index e811f9a5b76..1a44b4a3941 100644
--- a/tests/geo-rep.rc
+++ b/tests/geo-rep.rc
@@ -160,3 +160,73 @@ function create_georep_session()
rc=$?
if test $rc != 0; then return $rc; 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="${master_mnt}/$file_name.$((rotate_count))"
+ if [ $rotate_count -eq 0 ]; then
+ source_file="${master_mnt}/$file_name"
+ fi
+ if [ -f "${source_file}" ]; then
+ mv "${source_file}" "${master_mnt}/$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 ${master_mnt}/$file_name
+ rotate_count=$2
+ unlink_file_name="${master_mnt}/$file_name.$((rotate_count+1))"
+ unlink $unlink_file_name
+}
+
+function create_rename()
+{
+ file_name=$1
+ echo $file_name > ${master_mnt}/$file_name
+ mv ${master_mnt}/$file_name ${master_mnt}/$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 "${slave_mnt}/$file_name" ]; then
+ return 1
+ fi
+ return 0
+}
+
+function hardlink_rename()
+{
+ file_name=$1
+ echo $file_name > ${master_mnt}/$file_name
+ ln ${master_mnt}/$file_name ${master_mnt}/$file_name.hl
+ mv ${master_mnt}/$file_name.hl ${master_mnt}/$file_name
+}
+
+function hardlink_rename_ok()
+{
+ file_name=$1
+ # the hardlink file should not exist on the slave after renaming
+ # to one of its links
+ if [ -f "${slave_mnt}/$file_name.hl" ]; then
+ return 1
+ fi
+ return 0
+}
diff --git a/tests/geo-rep/georep-basic-dr-rsync.t b/tests/geo-rep/georep-basic-dr-rsync.t
index e8b39938082..39da524f639 100644
--- a/tests/geo-rep/georep-basic-dr-rsync.t
+++ b/tests/geo-rep/georep-basic-dr-rsync.t
@@ -119,6 +119,32 @@ TEST unlink_ok ${slave_mnt}/changelog_d2
TEST data_ok ${slave_mnt}/changelog_f1 "HelloWorld!" #55
TEST chown_file_ok ${slave_mnt}/changelog_chown_f1
+# logrotate test
+logrotate_simulate logrotate_test_file 2
+logrotate_simulate logrotate_test_file 2
+logrotate_simulate logrotate_test_file 2
+logrotate_simulate logrotate_test_file 2
+sleep 15
+EXPECT 0 check_status_num_rows "Faulty"
+
+# CREATE + RENAME
+create_rename create_rename_test_file
+sleep 15
+TEST $GEOREP_CLI $master $slave stop
+sleep 5
+TEST $GEOREP_CLI $master $slave start
+sleep 15
+TEST create_rename_ok create_rename_test_file #58
+
+# hard-link rename
+hardlink_rename hardlink_rename_test_file
+sleep 15
+TEST $GEOREP_CLI $master $slave stop
+sleep 5
+TEST $GEOREP_CLI $master $slave start
+sleep 15
+TEST hardlink_rename_ok hardlink_rename_test_file
+
#Stop Geo-rep
TEST $GEOREP_CLI $master $slave stop