summaryrefslogtreecommitdiffstats
path: root/tests/bitrot
diff options
context:
space:
mode:
Diffstat (limited to 'tests/bitrot')
-rw-r--r--tests/bitrot/br-stub.c47
-rw-r--r--tests/bitrot/br-stub.t21
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;