From 586e1cabf850211b9e6856fcb8c42c696de6d484 Mon Sep 17 00:00:00 2001 From: Avra Sengupta Date: Tue, 4 Mar 2014 00:45:48 +0000 Subject: glusterd/mgmt_v3 locks. Testcase for mgmt_v3 locks. Ported upstream volume-locks.t as mgmt-v3-locks.t Change-Id: Id4824716cde4ac54efbf1c1dd9a5f530b0324e39 Signed-off-by: Avra Sengupta Reviewed-on: http://review.gluster.org/7190 Reviewed-by: Rajesh Joseph Tested-by: Rajesh Joseph --- tests/basic/mgmt_v3-locks.t | 121 ++++++++++++++++++++++++++++++++++++++++++ tests/basic/volume-snapshot.t | 8 +-- tests/include.rc | 1 + tests/snapshot.rc | 5 +- 4 files changed, 129 insertions(+), 6 deletions(-) create mode 100755 tests/basic/mgmt_v3-locks.t diff --git a/tests/basic/mgmt_v3-locks.t b/tests/basic/mgmt_v3-locks.t new file mode 100755 index 000000000..22ca27b9f --- /dev/null +++ b/tests/basic/mgmt_v3-locks.t @@ -0,0 +1,121 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../cluster.rc + +function check_peers { + $CLI_1 peer status | grep 'Peer in Cluster (Connected)' | wc -l +} + +function volume_count { + local cli=$1; + if [ $cli -eq '1' ] ; then + $CLI_1 volume info | grep 'Volume Name' | wc -l; + else + $CLI_2 volume info | grep 'Volume Name' | wc -l; + fi +} + +function volinfo_field() +{ + local vol=$1; + local field=$2; + + $CLI_1 volume info $vol | grep "^$field: " | sed 's/.*: //'; +} + +function two_diff_vols_create { + # Both volume creates should be successful + $CLI_1 volume create $V0 $H1:$B1/$V0 $H2:$B2/$V0 $H3:$B3/$V0 & + PID_1=$! + + $CLI_2 volume create $V1 $H1:$B1/$V1 $H2:$B2/$V1 $H3:$B3/$V1 & + PID_2=$! + + wait $PID_1 $PID_2 +} + +function two_diff_vols_start { + # Both volume starts should be successful + $CLI_1 volume start $V0 & + PID_1=$! + + $CLI_2 volume start $V1 & + PID_2=$! + + wait $PID_1 $PID_2 +} + +function two_diff_vols_stop_force { + # Force stop, so that if rebalance from the + # remove bricks is in progress, stop can + # still go ahead. Both volume stops should + # be successful + $CLI_1 volume stop $V0 force & + PID_1=$! + + $CLI_2 volume stop $V1 force & + PID_2=$! + + wait $PID_1 $PID_2 +} + +function same_vol_remove_brick { + + # Running two same vol commands at the same time can result in + # two success', two failures, or one success and one failure, all + # of which are valid. The only thing that shouldn't happen is a + # glusterd crash. + + local vol=$1 + local brick=$2 + $CLI_1 volume remove-brick $1 $2 start & + $CLI_2 volume remove-brick $1 $2 start +} + +cleanup; + +TEST launch_cluster 3; +TEST $CLI_1 peer probe $H2; +TEST $CLI_1 peer probe $H3; + +EXPECT_WITHIN 20 2 check_peers + +two_diff_vols_create +EXPECT 'Created' volinfo_field $V0 'Status'; +EXPECT 'Created' volinfo_field $V1 'Status'; + +two_diff_vols_start +EXPECT 'Started' volinfo_field $V0 'Status'; +EXPECT 'Started' volinfo_field $V1 'Status'; + +same_vol_remove_brick $V0 $H2:$B2/$V0 +# Checking glusterd crashed or not after same volume remove brick +# on both nodes. +EXPECT_WITHIN 20 2 check_peers + +same_vol_remove_brick $V1 $H2:$B2/$V1 +# Checking glusterd crashed or not after same volume remove brick +# on both nodes. +EXPECT_WITHIN 20 2 check_peers + +$CLI_1 volume set $V0 diagnostics.client-log-level DEBUG & +$CLI_1 volume set $V1 diagnostics.client-log-level DEBUG +kill_glusterd 3 +$CLI_1 volume status $V0 +$CLI_2 volume status $V1 +$CLI_1 peer status +EXPECT_WITHIN 20 1 check_peers +EXPECT 'Started' volinfo_field $V0 'Status'; +EXPECT 'Started' volinfo_field $V1 'Status'; + +TEST $glusterd_3 +$CLI_1 volume status $V0 +$CLI_2 volume status $V1 +$CLI_1 peer status +#EXPECT_WITHIN 20 2 check_peers +#EXPECT 'Started' volinfo_field $V0 'Status'; +#EXPECT 'Started' volinfo_field $V1 'Status'; +#two_diff_vols_stop_force +#EXPECT_WITHIN 20 2 check_peers +cleanup; diff --git a/tests/basic/volume-snapshot.t b/tests/basic/volume-snapshot.t index bea11e215..35c748372 100755 --- a/tests/basic/volume-snapshot.t +++ b/tests/basic/volume-snapshot.t @@ -56,8 +56,8 @@ EXPECT 'Started' volinfo_field $V1 'Status'; #Snapshot Operations create_snapshots -TEST snapshot_exists ${V0}_snap -TEST snapshot_exists ${V1}_snap +TEST snapshot_exists $V0 ${V0}_snap +TEST snapshot_exists $V1 ${V1}_snap TEST $CLI_1 snapshot config $V0 snap-max-hard-limit 100 TEST $CLI_1 snapshot config $V1 snap-max-hard-limit 100 @@ -69,8 +69,8 @@ TEST umount -f $M0 #Clean up delete_snapshots -TEST ! snapshot_exists ${V0}_snap -TEST ! snapshot_exists ${V1}_snap +TEST ! snapshot_exists $V0 ${V0}_snap +TEST ! snapshot_exists $V1 ${V1}_snap stop_force_volumes 2 EXPECT 'Stopped' volinfo_field $V0 'Status'; diff --git a/tests/include.rc b/tests/include.rc index 042626cb8..80457f124 100644 --- a/tests/include.rc +++ b/tests/include.rc @@ -3,6 +3,7 @@ M1=${M1:=/mnt/glusterfs/1}; # 1st mount point for FUSE N0=${N0:=/mnt/nfs/0}; # 0th mount point for NFS N1=${N1:=/mnt/nfs/1}; # 1st mount point for NFS V0=${V0:=patchy}; # volume name to use in tests +V1=${V1:=patchy1}; # volume name to use in tests B0=${B0:=/d/backends}; # top level of brick directories H0=${H0:=`hostname --fqdn`}; # hostname DEBUG=${DEBUG:=0} # turn on debugging? diff --git a/tests/snapshot.rc b/tests/snapshot.rc index 5dc2e904a..20bddcf0f 100755 --- a/tests/snapshot.rc +++ b/tests/snapshot.rc @@ -171,8 +171,9 @@ function _remove_vhd() { # Utility Functions ######################################################## function snapshot_exists() { - local snapname=$1 - $CLI snapshot list | egrep -q "^$snapname\$" + local volname=$1 + local snapname=$2 + $CLI snapshot list $volname | egrep -q "^$snapname\$" return $? } -- cgit