From 4896d3fc612ad686b1830054e8f9207b19dd6e9f Mon Sep 17 00:00:00 2001 From: shaver Date: Sat, 26 Jul 2003 02:57:06 +0000 Subject: [PATCH] Add multi-operation microshell to aid in the testing of different replay patterns. --- lustre/tests/multiop.c | 99 +++++++++++++++++++++++++++++++++++++++++++ lustre/tests/replay-single.sh | 21 +++++++-- 2 files changed, 117 insertions(+), 3 deletions(-) create mode 100755 lustre/tests/multiop.c diff --git a/lustre/tests/multiop.c b/lustre/tests/multiop.c new file mode 100755 index 0000000..c656b0f --- /dev/null +++ b/lustre/tests/multiop.c @@ -0,0 +1,99 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define T1 "write data before unlink\n" +#define T2 "write data after unlink\n" +char buf[128]; + +char usage[] = +"Usage: %s filename command-sequence\n" +" command-sequence items:\n" +" o open(O_RDONLY)\n" +" O open(O_CREAT|O_RDWR)\n" +" u unlink\n" +" m mknod\n" +" c close\n" +" _ wait for signal\n" +" s stat\n" +" S fstat\n"; + +int main(int argc, char **argv) +{ + char *fname, *commands; + struct stat st; + int fd; + + if (argc != 3) { + fprintf(stderr, usage, argv[0]); + exit(1); + } + + fname = argv[1]; + commands = argv[2]; + + while (*commands) { + switch (*commands) { + case 'o': + fd = open(fname, O_RDONLY); + if (fd == -1) { + perror("open(O_RDONLY)"); + exit(1); + } + break; + case 'O': + fd = open(fname, O_CREAT|O_RDWR, 0644); + if (fd == -1) { + perror("open(O_RDWR|O_CREAT"); + exit(1); + } + break; + case 'm': + if (mknod(fname, S_IFREG | 0644, 0) == -1) { + perror("mknod(S_IFREG|0644, 0)"); + exit(1); + } + break; + case 'u': + if (unlink(fname) == -1) { + perror("unlink"); + exit(1); + } + break; + case 'c': + if (close(fd) == -1) { + perror("close"); + exit(1); + } + break; + case '_': + pause(); + break; + case 's': + if (stat(fname, &st) == -1) { + perror("stat"); + exit(1); + } + break; + case 'S': + if (fstat(fd, &st) == -1) { + perror("fstat"); + exit(1); + } + break; + default: + fprintf(stderr, "unknown command \"%c\"\n", *commands); + fprintf(stderr, usage, argv[0]); + exit(1); + } + + commands++; + } + + return 0; +} diff --git a/lustre/tests/replay-single.sh b/lustre/tests/replay-single.sh index 6fe23bd..8dc0dc1 100755 --- a/lustre/tests/replay-single.sh +++ b/lustre/tests/replay-single.sh @@ -79,9 +79,9 @@ run_test() { message=$2 # Pretty tests run faster. - echo '=====' $testnum: $message + echo -n '=====' $testnum: $message local suffixlen=$((65 - `echo -n $2 | wc -c | awk '{print $1}'`)) - printf '%.*s\n' $suffixlen $EQUALS + printf ' %.*s\n' $suffixlen $EQUALS test_${testnum} || error "test_$testnum failed with $?" } @@ -95,6 +95,7 @@ test_1() { replay_barrier mds mcreate $MOUNTPT/f1 fail + ls $MOUNTPT/f1 rm $MOUNTPT/f1 } run_test 1 "simple create" @@ -104,6 +105,7 @@ test_2() { mkdir $MOUNTPT/d2 mcreate $MOUNTPT/d2/f2 fail + ls $MOUNTPT/d2/fs rm -fr $MOUNTPT/d2 } run_test 2 "mkdir + contained create" @@ -113,10 +115,23 @@ test_3() { replay_barrier mds mcreate $MOUNTPT/d3/f3 fail + ls $MOUNTPT/d3/f3 rm -fr $MOUNTPT/d3 } run_test 3 "mkdir |X| contained create" +test_4() { + multiop $MOUNTPT/f4 mo_c & + MULTIPID=$! + sleep 1 + fail + ls $MOUNTPT/f4 + kill -USR1 $MULTIPID + wait + rm $MOUNTPT/f4 +} +run_test 4 "open |X| close" + stop client $CLIENTLCONFARGS stop ost -stop mds +stop mds $MDSLCONFARGS -- 1.8.3.1