diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/bitrot/br-stub.c | 47 | ||||
| -rw-r--r-- | tests/bitrot/br-stub.t | 21 | 
2 files changed, 54 insertions, 14 deletions
diff --git a/tests/bitrot/br-stub.c b/tests/bitrot/br-stub.c index 6cb12ed0a8e..e164170bb83 100644 --- a/tests/bitrot/br-stub.c +++ b/tests/bitrot/br-stub.c @@ -31,8 +31,10 @@ brstub_validate_version (char *bpath, unsigned long version)          if (ret < 0)                  goto err; -        if (xv->ongoingversion != version) +        if (xv->ongoingversion != version) {                  match = -1; +                fprintf (stderr, "ongoingversion: %lu\n", xv->ongoingversion); +        }          free (xv);          return match; @@ -42,11 +44,12 @@ brstub_validate_version (char *bpath, unsigned long version)  }  int -brstub_open_validation (char *filp, char *bpath, unsigned long startversion) +brstub_write_validation (char *filp, char *bpath, unsigned long startversion)  {          int fd1 = 0;          int fd2 = 0;          int ret = 0; +        char *string = "string\n";          /* read only check */          fd1 = open (filp, O_RDONLY); @@ -55,18 +58,37 @@ brstub_open_validation (char *filp, char *bpath, unsigned long startversion)          close (fd1);          ret = brstub_validate_version (bpath, startversion); -        if (ret < 0) +        if (ret == 0)                  goto err; -          /* single open (write/) check */          fd1 = open (filp, O_RDWR);          if (fd1 < 0)                  goto err; -        close (fd1); +        ret = write (fd1, string, strlen (string)); +        if (ret <= 0) +                goto err; +        /** +         * Fsync is done so that the write call has properly reached the +         * disk. For fuse mounts write-behind xlator would have held the +         * writes with itself and for nfs, client would have held the +         * write in its cache. So write fop would not have triggered the +         * versioning as it would have not reached the bit-rot-stub. +         */ +        fsync (fd1);          startversion++;          ret = brstub_validate_version (bpath, startversion); +        if (ret < 0) +                goto err; +        ret = write (fd1, string, strlen (string)); +        if (ret <= 0) +                goto err; +        ret = brstub_validate_version (bpath, startversion); +        if (ret < 0) +                goto err; + +        close (fd1);          /* multi open (write/) check */          fd1 = open (filp, O_RDWR);          if (fd1 < 0) @@ -74,13 +96,20 @@ brstub_open_validation (char *filp, char *bpath, unsigned long startversion)          fd2 = open (filp, O_WRONLY);          if (fd1 < 0)                  goto err; + +        ret = write (fd1, string, strlen (string)); +        if (ret <= 0) +                goto err; + +        ret = write (fd1, string, strlen (string)); +        if (ret <= 0) +                goto err;          close (fd1);          close (fd2);          /** -         * incremented once per open()/open().../close()/close() sequence +         * incremented once per write()/write().../close()/close() sequence           */ -        startversion++;          ret = brstub_validate_version (bpath, startversion);          if (ret < 0)                  goto err; @@ -106,11 +135,11 @@ brstub_new_object_validate (char *filp, char *brick)          printf ("Validating initial version..\n");          ret = brstub_validate_version (bpath, 1); -        if (ret < 0) +        if (ret == 0)                  goto err;          printf ("Validating version on modifications..\n"); -        ret = brstub_open_validation (filp, bpath, 1); +        ret = brstub_write_validation (filp, bpath, 1);          if (ret < 0)                  goto err; diff --git a/tests/bitrot/br-stub.t b/tests/bitrot/br-stub.t index 11d02418785..bab4c7cdbd1 100644 --- a/tests/bitrot/br-stub.t +++ b/tests/bitrot/br-stub.t @@ -2,6 +2,7 @@  . $(dirname $0)/../include.rc  . $(dirname $0)/../volume.rc +. $(dirname $0)/../nfs.rc  STUB_SOURCE=$(dirname $0)/br-stub.c  STUB_EXEC=$(dirname $0)/br-stub @@ -17,9 +18,9 @@ EXPECT "$V0" volinfo_field $V0 'Volume Name';  EXPECT 'Created' volinfo_field $V0 'Status';  EXPECT '2' brick_count $V0 -## Turn off open-behind (stub does not work with anonfd yet..) -TEST $CLI volume set $V0 performance.open-behind off -EXPECT 'off' volinfo_field $V0 'performance.open-behind' +## Turn off write-behind (write-behind clubs writes together) +TEST $CLI volume set $V0 performance.write-behind off +#EXPECT 'off' volinfo_field $V0 'performance.open-behind'  ## Start the volume  TEST $CLI volume start $V0; @@ -27,6 +28,7 @@ EXPECT 'Started' volinfo_field $V0 'Status';  ## Mount the volume  TEST $GFS --volfile-server=$H0 --volfile-id=$V0 $M0; +TEST mount_nfs $H0:/$V0 $N0 nolock;  ## Build stub C source  build_tester $STUB_SOURCE -o $STUB_EXEC -I$(dirname $0)/../../xlators/features/bit-rot/src/stub @@ -34,11 +36,20 @@ TEST [ -e $STUB_EXEC ]  ## create & check version  fname="$M0/filezero" -touch $fname +touch $fname;  backpath=$(get_backend_paths $fname) + +TEST $STUB_EXEC $fname $(dirname $backpath) + +rm -f $fname; + +## test nfs +fname="$N0/filezero" +touch $fname; # backpath remains same.. +  TEST $STUB_EXEC $fname $(dirname $backpath) -## cleanups.. +##cleanups..  rm -f $STUB_EXEC  cleanup;  | 
