summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/README20
-rwxr-xr-xtests/basic/mount.t62
-rwxr-xr-xtests/basic/volume.t47
-rwxr-xr-xtests/bugs/bug-000000.t9
-rw-r--r--tests/include.rc93
5 files changed, 231 insertions, 0 deletions
diff --git a/tests/README b/tests/README
new file mode 100644
index 00000000..fe45f5bb
--- /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 00000000..0fdef65d
--- /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 00000000..de3f001e
--- /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 00000000..7f3d15c9
--- /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 00000000..bc9784cf
--- /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