diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/bugs/distribute/bug-1193636.c | 70 | ||||
| -rw-r--r-- | tests/bugs/distribute/bug-1193636.t | 72 | 
2 files changed, 142 insertions, 0 deletions
diff --git a/tests/bugs/distribute/bug-1193636.c b/tests/bugs/distribute/bug-1193636.c new file mode 100644 index 00000000000..eae90783f8e --- /dev/null +++ b/tests/bugs/distribute/bug-1193636.c @@ -0,0 +1,70 @@ +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> +#include <attr/xattr.h> +#include <fcntl.h> +#include <string.h> + + +#define MY_XATTR_NAME   "user.ftest" +#define MY_XATTR_VAL    "ftestval" + + +void usage (void) +{ +        printf ("Usage : bug-1193636 <filename> <xattr_name> <op>\n"); +        printf ("   op : 0 - set, 1 - remove\n"); +} + + +int main (int argc, char **argv) +{ +        int fd; +        int err = 0; +        char *xattr_name = NULL; +        int op = 0; + +        if (argc != 4) { +                usage (); +                exit (1); +        } + +        op = atoi (argv[3]); + +        if ((op != 0) && (op != 1)) { +                printf ("Invalid operation specified.\n"); +                usage (); +                exit (1); +        } + +        xattr_name = argv[2]; + +        fd = open(argv[1], O_RDWR); +        if (fd == -1) { +                printf ("Failed to open file %s\n", argv[1]); +                exit (1); +        } + +        if (!op) { +                err = fsetxattr (fd, xattr_name, MY_XATTR_VAL, +                                 strlen (MY_XATTR_VAL) + 1, XATTR_CREATE); + +                if (err) { +                        printf ("Failed to set xattr %s: %m\n", xattr_name); +                        exit (1); +                } + +        } else { +                err = fremovexattr (fd, xattr_name); + +                if (err) { +                        printf ("Failed to remove xattr %s: %m\n", xattr_name); +                        exit (1); +                } +        } + +        close (fd); + +        return 0; +} + diff --git a/tests/bugs/distribute/bug-1193636.t b/tests/bugs/distribute/bug-1193636.t new file mode 100644 index 00000000000..ccde02edc70 --- /dev/null +++ b/tests/bugs/distribute/bug-1193636.t @@ -0,0 +1,72 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc + + +checksticky () { +        i=0; +        while [ ! -k $1 ]; do +                sleep 1 +                i=$((i+1)); +                if [[ $i == 10 ]]; then +                        return $i +                fi +                echo "Waiting... $i" +        done +        echo "done ...got out @ $i" +        return 0 +} + +cleanup; + +#Basic checks +TEST glusterd +TEST pidof glusterd +TEST $CLI volume info + +#Create a distributed volume +TEST $CLI volume create $V0 $H0:$B0/${V0}{1..3}; +TEST $CLI volume start $V0 + +# Mount FUSE +TEST glusterfs -s $H0 --volfile-id $V0 $M0 + +TEST mkdir $M0/dir1 + +# Create a large file (1GB), so that rebalance takes time +dd if=/dev/zero of=$M0/dir1/FILE2 bs=64k count=10240 + +# Rename the file to create a linkto, for rebalance to +# act on the file +TEST mv $M0/dir1/FILE2 $M0/dir1/FILE1 + +build_tester $(dirname $0)/bug-1193636.c + +TEST $CLI volume rebalance $V0 start force + +TEST checksticky $B0/${V0}3/dir1/FILE1 + +TEST setfattr -n "user.test1" -v "test1" $M0/dir1/FILE1 +TEST setfattr -n "user.test2" -v "test1" $M0/dir1/FILE1 +TEST setfattr -n "user.test3" -v "test1" $M0/dir1/FILE1 + +TEST $(dirname $0)/bug-1193636 $M0/dir1/FILE1 user.fsetx 0 +TEST $(dirname $0)/bug-1193636 $M0/dir1/FILE1 user.fremx 0 + +TEST getfattr -n "user.fremx" $M0/dir1/FILE1 +TEST setfattr -x "user.test2" $M0/dir1/FILE1 + + +TEST $(dirname $0)/bug-1193636 $M0/dir1/FILE1 user.fremx 1 + +EXPECT_WITHIN $REBALANCE_TIMEOUT "completed" rebalance_status_field $V0 + +TEST getfattr -n "user.fsetx" $M0/dir1/FILE1 +TEST getfattr -n "user.test1" $M0/dir1/FILE1 +TEST ! getfattr -n "user.test2" $M0/dir1/FILE1 +TEST ! getfattr -n "user.fremx" $M0/dir1/FILE1 +TEST getfattr -n "user.test3" $M0/dir1/FILE1 + + +cleanup;  | 
