diff options
| -rwxr-xr-x | run-tests.sh | 3 | ||||
| -rwxr-xr-x | smoke.sh | 83 | ||||
| -rw-r--r-- | tests/README | 20 | ||||
| -rwxr-xr-x | tests/basic/mount.t | 62 | ||||
| -rwxr-xr-x | tests/basic/volume.t | 47 | ||||
| -rwxr-xr-x | tests/bugs/bug-000000.t | 9 | ||||
| -rw-r--r-- | tests/include.rc | 93 | 
7 files changed, 234 insertions, 83 deletions
diff --git a/run-tests.sh b/run-tests.sh new file mode 100755 index 00000000000..d0a884b92b0 --- /dev/null +++ b/run-tests.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +prove -r $(dirname $0)/tests; diff --git a/smoke.sh b/smoke.sh deleted file mode 100755 index a87908d794e..00000000000 --- a/smoke.sh +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/bash - -set -e; - -M=/mnt; -P=/build; -H=$(hostname); -T=600; -V=patchy; - - -function cleanup() -{ -    killall -15 glusterfs glusterfsd glusterd glusterd 2>&1 || true; -    killall -9 glusterfs glusterfsd glusterd glusterd 2>&1 || true; -    umount -l $M 2>&1 || true; -    rm -rf /var/lib/glusterd /etc/glusterd $P/export; -} - -function start_fs() -{ -    mkdir -p $P/export; -    chmod 0755 $P/export; - -    glusterd; -    gluster --mode=script volume create $V replica 2 $H:$P/export/export{1,2,3,4}; -    gluster volume start $V; -    glusterfs -s $H --volfile-id $V $M; -#    mount -t glusterfs $H:/$V $M; -} - - -function run_tests() -{ -    cd $M; - -    (sleep 1; dbench -s -t 60 10 >/dev/null) & - -    (sleep 1; /opt/qa/tools/posix_compliance.sh) & - -    wait %2 -    wait %3 - -    rm -rf clients; - -    cd -; -} - - -function watchdog () -{ -    # insurance against hangs during the test - -    sleep $1; - -    echo "Kicking in watchdog after $1 secs"; - -    cleanup; -} - - -function finish () -{ -    cleanup; -    kill %1; -} - -function main () -{ -    cleanup; - -    watchdog $T & - -    trap finish EXIT; - -    set -x; - -    start_fs; - -    run_tests; -} - -main "$@"; diff --git a/tests/README b/tests/README new file mode 100644 index 00000000000..fe45f5bb829 --- /dev/null +++ b/tests/README @@ -0,0 +1,20 @@ +How to use use +============== + +- Build and install the version of glusterfs with your changes. Make +  sure the installed version is accessible from $PATH. + +- (optional) Set environment variables to specify location of +  export directories and mount points. Unless you have special +  requirements, the defaults should just work. The variables +  themselves can be found at the top of tests/include.rc. All +  of them can be overriden with environment variables. + +- Execute run-tests.sh in the top level directory as root. + +- If some test cases fail, you can execute the failed test case script +  directly bypassing run-tests.sh. At this time it might be +  useful to set the envrionment variable DEBUG=1 before running +  the individual test script directly by hand. + +- BE WARNED THAT THE TEST CASES DELETE /var/lib/glusterd/* !!! diff --git a/tests/basic/mount.t b/tests/basic/mount.t new file mode 100755 index 00000000000..0fdef65de55 --- /dev/null +++ b/tests/basic/mount.t @@ -0,0 +1,62 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc + +cleanup; + + +## Start and create a volume +TEST glusterd +TEST pidof glusterd +TEST $CLI volume info; + +TEST $CLI volume create $V0 replica 2 stripe 2 $H0:$B0/${V0}{1,2,3,4,5,6,7,8}; + +function volinfo_field() +{ +    local vol=$1; +    local field=$2; + +    $CLI volume info $vol | grep "^$field: " | sed 's/.*: //'; +} + + +## Verify volume is is created +EXPECT "$V0" volinfo_field $V0 'Volume Name'; +EXPECT 'Created' volinfo_field $V0 'Status'; + + +## Start volume and verify +TEST $CLI volume start $V0; +EXPECT 'Started' volinfo_field $V0 'Status'; + + +## Make volume tightly consistent for metdata +TEST $CLI volume set $V0 performance.stat-prefetch off; + +## Mount FUSE with caching disabled +TEST glusterfs --entry-timeout=0 --attribute-timeout=0 -s $H0 --volfile-id $V0 $M0; + +## Wait for volume to register with rpc.mountd +sleep 5; + +## Mount NFS +TEST mount -t nfs -o vers=3,nolock,soft,intr $H0:/$V0 $N0; + + +## Test for consistent views between NFS and FUSE mounts +TEST ! stat $M0/newfile; +TEST touch $M0/newfile; +TEST stat $N0/newfile; +TEST rm $N0/newfile; +TEST ! stat $M0/newfile; + + +## Finish up +TEST $CLI volume stop $V0; +EXPECT 'Stopped' volinfo_field $V0 'Status'; + +TEST $CLI volume delete $V0; +TEST ! $CLI volume info $V0; + +cleanup; diff --git a/tests/basic/volume.t b/tests/basic/volume.t new file mode 100755 index 00000000000..de3f001e09c --- /dev/null +++ b/tests/basic/volume.t @@ -0,0 +1,47 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc + +cleanup; + +TEST glusterd +TEST pidof glusterd +TEST $CLI volume info; + +TEST $CLI volume create $V0 replica 2 stripe 2 $H0:$B0/${V0}{1,2,3,4,5,6,7,8}; + + +function volinfo_field() +{ +    local vol=$1; +    local field=$2; + +    $CLI volume info $vol | grep "^$field: " | sed 's/.*: //'; +} + + +function brick_count() +{ +    local vol=$1; + +    $CLI volume info $vol | egrep "^Brick[0-9]+: " | wc -l; +} + + +EXPECT "$V0" volinfo_field $V0 'Volume Name'; +EXPECT 'Created' volinfo_field $V0 'Status'; +EXPECT '8' brick_count $V0 + +TEST $CLI volume start $V0; +EXPECT 'Started' volinfo_field $V0 'Status'; + +TEST $CLI volume add-brick $V0 $H0:$B0/${V0}{9,10,11,12}; +EXPECT '12' brick_count $V0 + +TEST $CLI volume stop $V0; +EXPECT 'Stopped' volinfo_field $V0 'Status'; + +TEST $CLI volume delete $V0; +TEST ! $CLI volume info $V0; + +cleanup; diff --git a/tests/bugs/bug-000000.t b/tests/bugs/bug-000000.t new file mode 100755 index 00000000000..7f3d15c9d59 --- /dev/null +++ b/tests/bugs/bug-000000.t @@ -0,0 +1,9 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc + +cleanup; + +TEST glusterd + +cleanup; diff --git a/tests/include.rc b/tests/include.rc new file mode 100644 index 00000000000..bc9784cf49b --- /dev/null +++ b/tests/include.rc @@ -0,0 +1,93 @@ +M0=${M0:=/mnt/glusterfs/0};   # 0th mount point for FUSE +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 +B0=${B0:=/d/backends};        # top level of brick directories +H0=${H0:=`hostname --fqdn`};  # hostname +DEBUG=${DEBUG:=0}             # turn on debugging? + +CLI="gluster --mode=script"; + +mkdir -p $B0; +mkdir -p $M0 $M1; +mkdir -p $N0 $N1; + +testcnt=`egrep '^[ \t]*(EXPECT|TEST)' $0 | wc -l`; +echo 1..$testcnt + +t=1 + +function dbg() +{ +	[ "x$DEBUG" = "x0" ] || echo "$*" >&2; +} + + +function test_header() +{ +	dbg "========================="; +	dbg "TEST $t (line $TESTLINE): $*"; +} + + +function test_footer() +{ +	RET=$? + +	if [ $RET -eq 0 ]; then +	     	echo "ok $t"; +	else +		echo "not ok $t"; +	fi + +	dbg "RESULT $t: $RET"; + +	t=`expr $t + 1`; +} + + +function _EXPECT() +{ +	TESTLINE=$1; +	shift; + +	test_header "$@"; + +	e="$1"; +	shift; +	"$@" | tail -1 | egrep '^'${e}'$' >/dev/null 2>&1; + +	test_footer; +} + + +function _TEST() +{ +	TESTLINE=$1; +	shift; + +	test_header "$@"; + +	eval "$@" >/dev/null 2>&1 + +	test_footer; +} + + +function cleanup() +{ +	killall -15 glusterfs glusterfsd glusterd 2>/dev/null || true; +	killall -9 glusterfs glusterfsd glusterd 2>/dev/null || true; +	rm -rf /var/lib/glusterd/* $B0/* /etc/glusterd/*; + +	umount -l $M0 2>/dev/null || true; +	umount -l $M1 2>/dev/null || true; +	umount -l $N0 2>/dev/null || true; +	umount -l $N1 2>/dev/null || true; +} + + +alias EXPECT='_EXPECT $LINENO' +alias TEST='_TEST $LINENO' +shopt -s expand_aliases  | 
