From fca26b6d87e7b5580ca912279b0af381d377502c Mon Sep 17 00:00:00 2001 From: rread Date: Thu, 4 Sep 2003 07:51:41 +0000 Subject: [PATCH] refactor the replay testing framework into test-framework.sh. I'll bet sanity*.sh can use this too, but I haven't checked. Also adding an embryonic replay-ost-single.sh. --- lustre/tests/replay-ost-single.sh | 90 +++++++++++++++++++++++++++ lustre/tests/test-framework.sh | 126 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 216 insertions(+) create mode 100755 lustre/tests/replay-ost-single.sh create mode 100644 lustre/tests/test-framework.sh diff --git a/lustre/tests/replay-ost-single.sh b/lustre/tests/replay-ost-single.sh new file mode 100755 index 0000000..eabee0a --- /dev/null +++ b/lustre/tests/replay-ost-single.sh @@ -0,0 +1,90 @@ +#!/bin/sh + +set -e + +# Skip these tests +# 3 - bug 1852 +ALWAYS_EXCEPT="3" + +LUSTRE=${LUSTRE:-`dirname $0`/..} +LTESTDIR=${LTESTDIR:-$LUSTRE/../ltest} +PATH=$LUSTRE/utils:$LUSTRE/tests:$PATH + +RLUSTRE=${RLUSTRE:-$LUSTRE} +RPWD=${RPWD:-$PWD} + +XMLCONFIG="`basename $0 .sh`.xml" + +. $LUSTRE/tests/test-framework.sh + +CHECKSTAT="${CHECKSTAT:-checkstat} -v" + +# XXX I wish all this stuff was in some default-config.sh somewhere +MOUNT=${MOUNT:-/mnt/lustre} +DIR=${DIR:-$MOUNT} +MDSDEV=${MDSDEV:-/tmp/mds-`hostname`} +MDSSIZE=${MDSSIZE:-100000} +OSTDEV=${OSTDEV:-/tmp/ost-`hostname`} +OSTSIZE=${OSTSIZE:-100000} +UPCALL=${UPCALL:-$PWD/replay-single-upcall.sh} +FSTYPE=${FSTYPE:-ext3} +TIMEOUT=${TIMEOUT:-5} + +STRIPE_BYTES=65536 +STRIPES_PER_OBJ=1 + + +gen_config() { + rm -f $XMLCONFIG + add_facet mds + add_facet ost + add_facet client --lustre_upcall $UPCALL + do_lmc --add mds --node mds_facet --mds mds1 --dev $MDSDEV --size $MDSSIZE + do_lmc --add lov --mds mds1 --lov lov1 --stripe_sz $STRIPE_BYTES --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0 + do_lmc --add ost --lov lov1 --failover --node ost_facet --ost ost1 --dev $OSTDEV --size $OSTSIZE + do_lmc --add mtpt --node client_facet --path $MOUNT --mds mds1 --ost lov1 +} + + +build_test_filter + +gen_config +start mds --reformat $MDSLCONFARGS +start ost --reformat $OSTLCONFARGS +start client --gdb $CLIENTLCONFARGS + +mkdir -p $DIR + +test_0() { + replay_barrier ost + fail ost +} +run_test 0 "empty replay" + +test_1() { + replay_barrier ost + touch $DIR/$tfile + fail ost + $CHECKSTAT -t file $DIR/$tfile || return 1 +} +run_test 1 "touch" + +test_2() { + replay_barrier ost + for i in `seq 10`; do + echo "tag-$i" > $DIR/$tfile-$i + done + fail ost + for i in `seq 10`; do + grep -q "tag-$i" $DIR/$tfile-$i || error "f1c-$i" + done +} +run_test 2 "|x| 10 open(O_CREAT)s" + +exit 0 + +equals_msg test complete, cleaning up +stop client ${FORCE:=--force} $CLIENTLCONFARGS +stop ost ${FORCE} +stop mds ${FORCE} $MDSLCONFARGS --dump cleanup.log + diff --git a/lustre/tests/test-framework.sh b/lustre/tests/test-framework.sh new file mode 100644 index 0000000..3ba7402 --- /dev/null +++ b/lustre/tests/test-framework.sh @@ -0,0 +1,126 @@ +#!/bin/sh + +set -e + +init_test_env() { + export TESTSUITE=`basename $0 .sh` + export XMLCONFIG="${TESTSUITE}.xml" + export LTESTDIR=${LTESTDIR:-$LUSTRE/../ltest} + export PATH=$LUSTRE/utils:$LUSTRE/tests:$PATH + + export RLUSTRE=${RLUSTRE:-$LUSTRE} + export RPWD=${RPWD:-$PWD} + export CHECKSTAT="${CHECKSTAT:-checkstat} -v" +} + +start() { + facet=$1 + shift + lconf --node ${facet}_facet $@ $XMLCONFIG +} + +stop() { + facet=$1 + shift + lconf --node ${facet}_facet $@ --cleanup $XMLCONFIG +} + +replay_barrier() { + local dev=$1 + sync + df $MOUNT + lctl --device %${dev}1 readonly + lctl --device %${dev}1 notransno + lctl mark "REPLAY BARRIER" +} + +fail() { + local facet=$1 + stop $facet --force --failover --nomod + start $facet --nomod + df $MOUNT +} + +do_lmc() { + lmc -m ${XMLCONFIG} $@ +} + +add_facet() { + local facet=$1 + shift + do_lmc --add node --node ${facet}_facet $@ --timeout $TIMEOUT + do_lmc --add net --node ${facet}_facet --nid localhost --nettype tcp +} + +error() { + echo "${TESTSUITE}: **** FAIL:" $@ + exit 1 +} + +build_test_filter() { + for O in $ONLY; do + eval ONLY_${O}=true + done + for E in $EXCEPT $ALWAYS_EXCEPT; do + eval EXCEPT_${E}=true + done +} + +_basetest() { + echo $* +} + +basetest() { + IFS=abcdefghijklmnopqrstuvwxyz _basetest $1 +} + +run_test() { + export base=`basetest $1` + if [ ! -z "$ONLY" ]; then + testname=ONLY_$1 + if [ ${!testname}x != x ]; then + run_one $1 "$2" + return $? + fi + testname=ONLY_$base + if [ ${!testname}x != x ]; then + run_one $1 "$2" + return $? + fi + echo -n "." + return 0 + fi + testname=EXCEPT_$1 + if [ ${!testname}x != x ]; then + echo "skipping excluded test $1" + return 0 + fi + testname=EXCEPT_$base + if [ ${!testname}x != x ]; then + echo "skipping excluded test $1 (base $base)" + return 0 + fi + run_one $1 "$2" + + return $? +} + +EQUALS="======================================================================" +equals_msg() { + msg="$@" + + local suffixlen=$((65 - ${#msg})) + printf '===== %s %.*s\n' "$msg" $suffixlen $EQUALS +} + +run_one() { + testnum=$1 + message=$2 + tfile=f$base + tdir=d$base + + # Pretty tests run faster. + equals_msg $testnum: $message + + test_${testnum} || error "test_$testnum failed with $?" +} -- 1.8.3.1