diff options
Diffstat (limited to 'tests/bugs/bitrot')
| -rwxr-xr-x | tests/bugs/bitrot/1207029-bitrot-daemon-should-start-on-valid-node.t | 57 | ||||
| -rw-r--r-- | tests/bugs/bitrot/1209751-bitrot-scrub-tunable-reset.t | 48 | ||||
| -rw-r--r-- | tests/bugs/bitrot/1209752-volume-status-should-show-bitrot-scrub-info.t | 70 | ||||
| -rw-r--r-- | tests/bugs/bitrot/1209818-vol-info-show-scrub-process-properly.t | 48 | ||||
| -rw-r--r-- | tests/bugs/bitrot/bug-1210684-scrub-pause-resume-error-handling.t | 39 | ||||
| -rw-r--r-- | tests/bugs/bitrot/bug-1227996.t | 57 | ||||
| -rw-r--r-- | tests/bugs/bitrot/bug-1228680.t | 48 | ||||
| -rw-r--r-- | tests/bugs/bitrot/bug-1229134-bitd-not-support-vol-set.t | 38 | ||||
| -rw-r--r-- | tests/bugs/bitrot/bug-1245981.t | 55 | ||||
| -rw-r--r-- | tests/bugs/bitrot/bug-1288490.t | 48 |
10 files changed, 508 insertions, 0 deletions
diff --git a/tests/bugs/bitrot/1207029-bitrot-daemon-should-start-on-valid-node.t b/tests/bugs/bitrot/1207029-bitrot-daemon-should-start-on-valid-node.t new file mode 100755 index 00000000000..691ebc303e4 --- /dev/null +++ b/tests/bugs/bitrot/1207029-bitrot-daemon-should-start-on-valid-node.t @@ -0,0 +1,57 @@ +#!/bin/bash + +## Test case for bitrot +## bitd daemon should not start on the node which dont have any brick + + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc +. $(dirname $0)/../../cluster.rc + +cleanup; + +function get_bitd_count { + ps auxw | grep glusterfs | grep bitd.pid | grep -v grep | wc -l +} + +## Start a 2 node virtual cluster +TEST launch_cluster 2; + +## Peer probe server 2 from server 1 cli +TEST $CLI_1 peer probe $H2; + +EXPECT_WITHIN $PROBE_TIMEOUT 1 peer_count + +## Creating a volume which is having brick only on one node +TEST $CLI_1 volume create $V0 $H1:$B1/${V0}0 $H1:$B1/${V0}1 + +## Start the volume +TEST $CLI_1 volume start $V0 + +## Enable bitrot on volume from 2nd node. +TEST $CLI_2 volume bitrot $V0 enable + +## Bitd daemon should be running on the node which is having brick. Here node1 +## only have brick so bitrot daemon count value should be 1. +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" get_bitd_count + +## Bitd daemon should not run on 2nd node and it should not create bitrot +## volfile on this node. Below test case it to check whether its creating bitrot +## volfile or not for 2nd node which dont have any brick. +## Get current working directory of 2nd node which dont have any brick and do +## stat on bitrot volfile. + +cur_wrk_dir2=$($CLI_2 system:: getwd) +TEST ! stat $cur_wrk_dir2/bitd/bitd-server.vol + + +## Bitd daemon should run on 1st node and it should create bitrot +## volfile on this node. Below test case it to check whether its creating bitrot +## volfile or not for 1st node which is having brick. +## Get current working directory of 1st node which have brick and do +## stat on bitrot volfile. + +cur_wrk_dir1=$($CLI_1 system:: getwd) +TEST stat $cur_wrk_dir1/bitd/bitd-server.vol + +cleanup; diff --git a/tests/bugs/bitrot/1209751-bitrot-scrub-tunable-reset.t b/tests/bugs/bitrot/1209751-bitrot-scrub-tunable-reset.t new file mode 100644 index 00000000000..919ffc3ba62 --- /dev/null +++ b/tests/bugs/bitrot/1209751-bitrot-scrub-tunable-reset.t @@ -0,0 +1,48 @@ +#!/bin/bash + +## Test case for bitrot +## On restarting glusterd should not reset bitrot tunable value to default + + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc +. $(dirname $0)/../../cluster.rc + +cleanup; + + +## Start glusterd +TEST glusterd; +TEST pidof glusterd; + +## Lets create and start the volume +TEST $CLI volume create $V0 $H0:$B0/${V0}0 $H0:$B0/${V0}1 +TEST $CLI volume start $V0 + +## Enable bitrot on volume $V0 +TEST $CLI volume bitrot $V0 enable + +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" get_bitd_count + +## Set bitrot scrub-throttle value to lazy +TEST $CLI volume bitrot $V0 scrub-throttle lazy + +## Set bitrot scrub-frequency value to monthly +TEST $CLI volume bitrot $V0 scrub-frequency monthly + +## Set bitrot scrubber to pause state +TEST $CLI volume bitrot $V0 scrub pause + +## restart glusterd process +pkill glusterd; +TEST glusterd; +TEST pidof glusterd; + +## All the bitrot scrub tunable value should come back again. +EXPECT_WITHIN $PROCESS_UP_TIMEOUT 'Started' volinfo_field $V0 'Status'; +EXPECT 'lazy' volinfo_field $V0 'features.scrub-throttle'; +EXPECT 'monthly' volinfo_field $V0 'features.scrub-freq'; +EXPECT 'pause' volinfo_field $V0 'features.scrub'; +EXPECT 'on' volinfo_field $V0 'features.bitrot'; + +cleanup; diff --git a/tests/bugs/bitrot/1209752-volume-status-should-show-bitrot-scrub-info.t b/tests/bugs/bitrot/1209752-volume-status-should-show-bitrot-scrub-info.t new file mode 100644 index 00000000000..6101910666c --- /dev/null +++ b/tests/bugs/bitrot/1209752-volume-status-should-show-bitrot-scrub-info.t @@ -0,0 +1,70 @@ +#!/bin/bash + +## Test case for bitrot +## gluster volume status command should show status of bitrot daemon + + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc +. $(dirname $0)/../../cluster.rc + +cleanup; + + +## Start a 2 node virtual cluster +TEST launch_cluster 2; + +## Peer probe server 2 from server 1 cli +TEST $CLI_1 peer probe $H2; + +EXPECT_WITHIN $PROBE_TIMEOUT 1 peer_count + +## Lets create and start the volume +TEST $CLI_1 volume create $V0 $H1:$B1/${V0}0 $H2:$B2/${V0}1 +TEST $CLI_1 volume start $V0 + +## Enable bitrot on volume $V0 +TEST $CLI_1 volume bitrot $V0 enable + +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "2" get_bitd_count +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "2" get_scrubd_count + +## From node 1 Gluster volume status command should show the status of bitrot +## daemon of all the nodes. there are 2 nodes in a cluster with having brick +## ${V0}1 and ${V0}2 . So there should be 2 bitrot daemon running. + +bitd=$($CLI_1 volume status $V0 | grep "Bitrot Daemon" | grep -v grep | wc -l) +TEST [ "$bitd" -eq 2 ]; + + + +## From node 2 Gluster volume status command should show the status of Scrubber +## daemon of all the nodes. There are 2 nodes in a cluster with having brick +## ${V0}1 and ${V0}2 . So there should be 2 Scrubber daemon running. + +scrub=$($CLI_2 volume status $V0 | grep "Scrubber Daemon" | grep -v grep | \ + wc -l) +TEST [ "$scrub" -eq 2 ]; + + + +## From node 1 Gluster volume status command should print status of only +## scrubber daemon. There should be total 2 scrubber daemon running, one daemon +## for each node + +scrub=$($CLI_1 volume status $V0 scrub | grep "Scrubber Daemon" | \ + grep -v grep | wc -l) +TEST [ "$scrub" -eq 2 ]; + + + +## From node 2 Gluster volume status command should print status of only +## bitd daemon. There should be total 2 bitd daemon running, one daemon +## for each node + +bitd=$($CLI_2 volume status $V0 bitd | grep "Bitrot Daemon" | \ + grep -v grep | wc -l) +TEST [ "$bitd" -eq 2 ]; + + +cleanup; diff --git a/tests/bugs/bitrot/1209818-vol-info-show-scrub-process-properly.t b/tests/bugs/bitrot/1209818-vol-info-show-scrub-process-properly.t new file mode 100644 index 00000000000..4fe02dc7f63 --- /dev/null +++ b/tests/bugs/bitrot/1209818-vol-info-show-scrub-process-properly.t @@ -0,0 +1,48 @@ +#!/bin/bash + +## Test case for bitrot. +## volume info should not show 'features.scrub: resume' if scrub process is +## resumed from paused state. + + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc +. $(dirname $0)/../../cluster.rc + +cleanup; + +## Start glusterd +TEST glusterd; +TEST pidof glusterd; + +## Lets create and start the volume +TEST $CLI volume create $V0 $H0:$B0/${V0}0 $H0:$B0/${V0}1 +TEST $CLI volume start $V0 + +## Enable bitrot on volume $V0 +TEST $CLI volume bitrot $V0 enable + +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" get_bitd_count + +## Set bitrot scrubber process to pause state +TEST $CLI volume bitrot $V0 scrub pause + +## gluster volume info command should show scrub process pause. +EXPECT 'pause' volinfo_field $V0 'features.scrub'; + + +## Resume scrub process on volume $V0 +TEST $CLI volume bitrot $V0 scrub resume + +## gluster volume info command should show scrub process Active +EXPECT 'Active' volinfo_field $V0 'features.scrub'; + + +## Disable bitrot on volume $V0 +TEST $CLI volume bitrot $V0 disable + +## gluster volume info command should show scrub process Inactive +EXPECT 'Inactive' volinfo_field $V0 'features.scrub'; + + +cleanup; diff --git a/tests/bugs/bitrot/bug-1210684-scrub-pause-resume-error-handling.t b/tests/bugs/bitrot/bug-1210684-scrub-pause-resume-error-handling.t new file mode 100644 index 00000000000..b15b908d21a --- /dev/null +++ b/tests/bugs/bitrot/bug-1210684-scrub-pause-resume-error-handling.t @@ -0,0 +1,39 @@ +#!/bin/bash + +## Test case for bitrot BZ:1210684 +## Bitrot scrub pause/resume option should give proper error if scrubber is +## already pause/resume and admin try to perform same operation on a volume + + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc +. $(dirname $0)/../../cluster.rc + +cleanup; + +## Start glusterd +TEST glusterd; +TEST pidof glusterd; + +## Lets create and start the volume +TEST $CLI volume create $V0 $H0:$B0/${V0}{1..2} +TEST $CLI volume start $V0 + +## Enable bitrot for volume $V0 +TEST $CLI volume bitrot $V0 enable + +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" get_bitd_count + +## Pause scrubber operation on volume $V0 +TEST $CLI volume bitrot $V0 scrub pause + +## Pausing scrubber again should not success and should give error +TEST ! $CLI volume bitrot $V0 scrub pause + +## Resume scrubber operation on volume $V0 +TEST $CLI volume bitrot $V0 scrub resume + +## Resuming scrubber again should not success and should give error +TEST ! $CLI volume bitrot $V0 scrub resume + +cleanup; diff --git a/tests/bugs/bitrot/bug-1227996.t b/tests/bugs/bitrot/bug-1227996.t new file mode 100644 index 00000000000..121c7b5f279 --- /dev/null +++ b/tests/bugs/bitrot/bug-1227996.t @@ -0,0 +1,57 @@ +#!/bin/bash + +## Test case for bitrot +## Tunable object signing waiting time value for bitrot. + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc +. $(dirname $0)/../../cluster.rc + +SLEEP_TIME=3 + +cleanup; +## Start glusterd +TEST glusterd; +TEST pidof glusterd; + +## Lets create and start the volume +TEST $CLI volume create $V0 $H0:$B0/${V0}0 $H0:$B0/${V0}1 +TEST $CLI volume start $V0 +## Enable bitrot on volume $V0 +TEST $CLI volume bitrot $V0 enable + +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" get_bitd_count + +# wait a bit for oneshot crawler to finish +sleep $SLEEP_TIME + +## Set object expiry time value +TEST $CLI volume bitrot $V0 signing-time $SLEEP_TIME + +## Mount the volume +TEST $GFS --volfile-server=$H0 --volfile-id=$V0 $M0; + +# create and check object signature +fname="$M0/filezero" +echo "ZZZ" > $fname + +# wait till the object is signed +sleep `expr $SLEEP_TIME \* 2` + +backpath=$(get_backend_paths $fname) +TEST getfattr -m . -n trusted.bit-rot.signature $backpath + +## for now just remove the signature xattr to test for signing +## upon truncate() +TEST setfattr -x trusted.bit-rot.signature $backpath + +## overwrite the file (truncate(), write()) +echo "XYX" > $fname + +# wait till the object is signed +sleep `expr $SLEEP_TIME \* 2` + +# test for new signature +TEST getfattr -m . -n trusted.bit-rot.signature $backpath + +cleanup; diff --git a/tests/bugs/bitrot/bug-1228680.t b/tests/bugs/bitrot/bug-1228680.t new file mode 100644 index 00000000000..23db9d5e208 --- /dev/null +++ b/tests/bugs/bitrot/bug-1228680.t @@ -0,0 +1,48 @@ +#!/bin/bash + +## Test case for bitrot +## Tunable object signing waiting time value for bitrot. + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc +. $(dirname $0)/../../cluster.rc + +SLEEP_TIME=3 + +cleanup; +## Start glusterd +TEST glusterd; +TEST pidof glusterd; + +## Lets create and start the volume +TEST $CLI volume create $V0 $H0:$B0/${V0}0 $H0:$B0/${V0}1 +TEST $CLI volume start $V0 + +## Enable bitrot on volume $V0 +TEST $CLI volume bitrot $V0 enable + +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" get_bitd_count + +# wait a bit for oneshot crawler to finish +sleep $SLEEP_TIME + +## negative test +TEST ! $CLI volume bitrot $V0 signing-time -100 + +## Set object expiry time value 5 second. +TEST $CLI volume bitrot $V0 signing-time $SLEEP_TIME + +## Mount the volume +TEST $GFS --volfile-server=$H0 --volfile-id=$V0 $M0; + +# create and check object signature +fname="$M0/filezero" +echo "ZZZ" > $fname + +# wait till the object is signed +sleep `expr $SLEEP_TIME \* 2` + +backpath=$(get_backend_paths $fname) +TEST getfattr -m . -n trusted.bit-rot.signature $backpath + +cleanup; diff --git a/tests/bugs/bitrot/bug-1229134-bitd-not-support-vol-set.t b/tests/bugs/bitrot/bug-1229134-bitd-not-support-vol-set.t new file mode 100644 index 00000000000..471471f4b6b --- /dev/null +++ b/tests/bugs/bitrot/bug-1229134-bitd-not-support-vol-set.t @@ -0,0 +1,38 @@ +#!/bin/bash + +## Test case for bitrot BZ:1229134 +## gluster volume set <VOLNAME> bitrot * command succeeds, +## which is not supported to enable bitrot. + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc +. $(dirname $0)/../../cluster.rc + +cleanup; + +## Start glusterd +TEST glusterd; +TEST pidof glusterd; + +## Lets create and start the volume +TEST $CLI volume create $V0 $H0:$B0/${V0}{1..2} +TEST $CLI volume start $V0 + +## 'gluster volume set <VOLNAME>' command for bitrot should failed. +TEST ! $CLI volume set $V0 bitrot enable +TEST ! $CLI volume set $V0 bitrot disable +TEST ! $CLI volume set $V0 scrub-frequency daily +TEST ! $CLI volume set $V0 scrub pause +TEST ! $CLI volume set $V0 scrub-throttle lazy + + +## 'gluster volume bitrot <VOLNAME> *' command for bitrot should succeeds. +TEST $CLI volume bitrot $V0 enable +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" get_bitd_count + +TEST $CLI volume bitrot $V0 scrub pause +TEST $CLI volume bitrot $V0 scrub-frequency daily +TEST $CLI volume bitrot $V0 scrub-throttle lazy + +cleanup; + diff --git a/tests/bugs/bitrot/bug-1245981.t b/tests/bugs/bitrot/bug-1245981.t new file mode 100644 index 00000000000..f3955256b01 --- /dev/null +++ b/tests/bugs/bitrot/bug-1245981.t @@ -0,0 +1,55 @@ +#!/bin/bash + +## Test case for bitrot +## Tunable object signing waiting time value for bitrot. + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc +. $(dirname $0)/../../cluster.rc + +SLEEP_TIME=5 + +cleanup; +## Start glusterd +TEST glusterd; +TEST pidof glusterd; + +## Lets create and start the volume +TEST $CLI volume create $V0 $H0:$B0/${V0}0 $H0:$B0/${V0}1 +TEST $CLI volume start $V0 +TEST $CLI volume set $V0 network.inode-lru-limit 1 +## Enable bitrot on volume $V0 +TEST $CLI volume bitrot $V0 enable + +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" get_bitd_count + +# wait a bit for oneshot crawler to finish +sleep 2; + +## Set object expiry time value +TEST $CLI volume bitrot $V0 signing-time $SLEEP_TIME + +## Mount the volume +TEST $GFS --volfile-server=$H0 --volfile-id=$V0 $M0; + +# create and check object signature +fname="$M0/filezero" +echo "ZZZ" > $fname +echo "123" > $M0/new_file; + +touch $M0/1 +touch $M0/2 +touch $M0/3 +touch $M0/4 +touch $M0/5 + +# wait till the object is signed +sleep `expr $SLEEP_TIME \* 2` + +backpath=$(get_backend_paths $fname) +EXPECT_WITHIN $PROCESS_UP_TIMEOUT 'trusted.bit-rot.signature' check_for_xattr 'trusted.bit-rot.signature' $backpath + +backpath=$(get_backend_paths $M0/new_file) +EXPECT_WITHIN $PROCESS_UP_TIMEOUT 'trusted.bit-rot.signature' check_for_xattr 'trusted.bit-rot.signature' $backpath + +cleanup; diff --git a/tests/bugs/bitrot/bug-1288490.t b/tests/bugs/bitrot/bug-1288490.t new file mode 100644 index 00000000000..5f67f4a6ec5 --- /dev/null +++ b/tests/bugs/bitrot/bug-1288490.t @@ -0,0 +1,48 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc + +cleanup; + +TEST glusterd +TEST pidof glusterd + +TEST $CLI volume create $V0 replica 2 $H0:$B0/brick{0,1} +TEST $CLI volume start $V0 + +TEST $CLI volume bitrot $V0 enable +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" get_bitd_count + +TEST $GFS --volfile-id=$V0 --volfile-server=$H0 $M0 +TEST dd if=/dev/urandom of=$M0/FILE bs=1024 count=1 + +# corrupt data -- append 2 bytes +echo -n "~~" >> $B0/brick0/FILE +# manually set bad-file xattr +TEST setfattr -n trusted.bit-rot.bad-file -v 0x3100 $B0/brick0/FILE + +TEST $CLI volume stop $V0 +TEST $CLI volume start $V0 +EXPECT 'Started' volinfo_field $V0 'Status'; +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" brick_up_status $V0 $H0 $B0/brick0 +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" brick_up_status $V0 $H0 $B0/brick1 +EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status $V0 0 +EXPECT_WITHIN $CHILD_UP_TIMEOUT "1" afr_child_up_status $V0 1 +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" get_bitd_count + +# trigger lookup +TEST stat $M0/FILE + +# extend the file +TEST dd if=/dev/urandom of=$M0/FILE bs=1024 count=1 oflag=append conv=notrunc + +# check backend file size +EXPECT "1026" stat -c "%s" $B0/brick0/FILE +EXPECT "2048" stat -c "%s" $B0/brick1/FILE + +# check file size on mount +EXPECT "2048" stat -c "%s" $M0/FILE + +TEST umount $M0 +cleanup |
