Whamcloud - gitweb
Add multi-operation microshell to aid in the testing of different replay
authorshaver <shaver>
Sat, 26 Jul 2003 02:57:06 +0000 (02:57 +0000)
committershaver <shaver>
Sat, 26 Jul 2003 02:57:06 +0000 (02:57 +0000)
patterns.

lustre/tests/multiop.c [new file with mode: 0755]
lustre/tests/replay-single.sh

diff --git a/lustre/tests/multiop.c b/lustre/tests/multiop.c
new file mode 100755 (executable)
index 0000000..c656b0f
--- /dev/null
@@ -0,0 +1,99 @@
+#include <stdio.h>
+#include <fcntl.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#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;
+}
index 6fe23bd..8dc0dc1 100755 (executable)
@@ -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