diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/geo-rep.rc | 70 | ||||
| -rw-r--r-- | tests/geo-rep/georep-basic-dr-rsync.t | 26 | 
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  | 
