diff options
Diffstat (limited to 'tests/basic')
| -rwxr-xr-x | tests/basic/bd.t | 117 | ||||
| -rwxr-xr-x | tests/basic/file-snapshot.t | 55 | ||||
| -rwxr-xr-x | tests/basic/mount.t | 78 | ||||
| -rw-r--r-- | tests/basic/nufa.t | 32 | ||||
| -rwxr-xr-x | tests/basic/posixonly.t | 30 | ||||
| -rw-r--r-- | tests/basic/pump.t | 44 | ||||
| -rwxr-xr-x | tests/basic/quota.t | 51 | ||||
| -rwxr-xr-x | tests/basic/rpm.t | 116 | ||||
| -rw-r--r-- | tests/basic/self-heald.t | 48 | ||||
| -rw-r--r-- | tests/basic/volume-status.t | 66 | ||||
| -rwxr-xr-x | tests/basic/volume.t | 34 |
11 files changed, 671 insertions, 0 deletions
diff --git a/tests/basic/bd.t b/tests/basic/bd.t new file mode 100755 index 00000000..3201b746 --- /dev/null +++ b/tests/basic/bd.t @@ -0,0 +1,117 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc + +cleanup; + + +function execute() +{ + cmd=$1 + shift + ${cmd} $@ >/dev/null 2>&1 +} + +function bd_cleanup() +{ + execute vgremove -f ${VG} + execute pvremove ${ld} + execute losetup -d ${ld} + execute rm ${BD_DISK} + execute $CLI volume delete ${V0} + cleanup +} + +function check() +{ + if [ $? -ne 0 ]; then + echo prerequsite $@ failed + bd_cleanup + exit + fi +} + +VG=__bd_vg +SIZE=256 #in MB + +## Configure environment needed for BD backend volumes +## Create a file with configured size and +## set it as a temporary loop device to create +## physical volume & VG. These are basic things needed +## for testing BD xlator if anyone of these steps fail, +## test script exits +function configure() +{ + GLDIR=`$CLI system:: getwd` + BD_DISK=${GLDIR}/bd_disk + + execute truncate -s${SIZE}M ${BD_DISK} + check ${BD_DISK} creation + + execute losetup -f + check losetup + ld=`losetup -f` + + execute losetup ${ld} ${BD_DISK} + check losetup ${BD_DISK} + execute pvcreate -f ${ld} + check pvcreate ${ld} + execute vgcreate ${VG} ${ld} + check vgcreate ${VG} +} + +function volinfo_field() +{ + local vol=$1; + local field=$2; + + $CLI volume info $vol | grep "^$field: " | sed 's/.*: //'; +} + +TEST glusterd +TEST pidof glusterd +configure + +TEST $CLI volume create $V0 device vg ${H0}:/${VG} +EXPECT "$V0" volinfo_field $V0 'Volume Name'; +EXPECT 'Created' volinfo_field $V0 'Status'; + +## Start volume and verify +TEST $CLI volume start $V0; +EXPECT 'Started' volinfo_field $V0 'Status' + +TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $M0 + +## Create file (LV) +TEST touch $M0/$VG/lv1 +TEST stat /dev/$VG/lv1 + +TEST rm $M0/$VG/lv1; +TEST ! stat $M0/$VG/lv1; + +TEST touch $M0/$VG/lv1 +TEST truncate -s64M $M0/$VG/lv1 + +TEST ln $M0/$VG/lv1 $M0/$VG/lv2 +TEST stat /dev/$VG/lv2 + +rm $M0/$VG/lv1 +rm $M0/$VG/lv2 + +TEST $CLI bd create $V0:/$VG/lv1 4MB +TEST stat /dev/$VG/lv1 + +TEST $CLI bd clone $V0:/$VG/lv1 lv2 +TEST stat /dev/$VG/lv2 +TEST $CLI bd delete $V0:/$VG/lv2 + +TEST $CLI bd snapshot $V0:/$VG/lv1 lv2 1 +TEST stat /dev/$VG/lv2 +rm $M0/$VG/lv2 +rm $M0/$VG/lv1 + +TEST umount $M0 +TEST $CLI volume stop ${V0} +TEST $CLI volume delete ${V0} + +bd_cleanup diff --git a/tests/basic/file-snapshot.t b/tests/basic/file-snapshot.t new file mode 100755 index 00000000..93726f4b --- /dev/null +++ b/tests/basic/file-snapshot.t @@ -0,0 +1,55 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../volume.rc + +cleanup; + +TEST glusterd +TEST pidof glusterd +TEST $CLI volume info; + +TEST $CLI volume create $V0 $H0:$B0/$V0; + +EXPECT "$V0" volinfo_field $V0 'Volume Name'; +EXPECT 'Created' volinfo_field $V0 'Status'; + +TEST $CLI volume start $V0; +EXPECT 'Started' volinfo_field $V0 'Status'; + +TEST $CLI volume set $V0 features.file-snapshot on; + +TEST $CLI volume set $V0 performance.quick-read off; +TEST $CLI volume set $V0 performance.io-cache off; +TEST glusterfs -s $H0 --volfile-id $V0 $M0 --attribute-timeout=0; + +TEST touch $M0/big-file; + +TEST setfattr -n trusted.glusterfs.block-format -v qcow2:10GB $M0/big-file; + +TEST [ `stat -c '%s' $M0/big-file` = 10737418240 ] + +echo 'ABCDEFGHIJ' > $M0/data-file1 +TEST dd if=$M0/data-file1 of=$M0/big-file conv=notrunc; +TEST setfattr -n trusted.glusterfs.block-snapshot-create -v image1 $M0/big-file; + +echo '1234567890' > $M0/data-file2 +TEST dd if=$M0/data-file2 of=$M0/big-file conv=notrunc; +TEST setfattr -n trusted.glusterfs.block-snapshot-create -v image2 $M0/big-file; + +TEST setfattr -n trusted.glusterfs.block-snapshot-goto -v image1 $M0/big-file; +TEST dd if=$M0/big-file of=$M0/out-file1 bs=11 count=1; + +TEST setfattr -n trusted.glusterfs.block-snapshot-goto -v image2 $M0/big-file; +TEST dd if=$M0/big-file of=$M0/out-file2 bs=11 count=1; + +TEST cmp $M0/data-file1 $M0/out-file1; +TEST cmp $M0/data-file2 $M0/out-file2; + +TEST $CLI volume stop $V0; +EXPECT 'Stopped' volinfo_field $V0 'Status'; + +TEST $CLI volume delete $V0; +TEST ! $CLI volume info $V0; + +cleanup; diff --git a/tests/basic/mount.t b/tests/basic/mount.t new file mode 100755 index 00000000..90e522c5 --- /dev/null +++ b/tests/basic/mount.t @@ -0,0 +1,78 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc + +cleanup; + + +## Start and create a volume +TEST glusterd +TEST pidof glusterd +TEST $CLI volume info; + +TEST $CLI volume create $V0 replica 2 stripe 2 $H0:$B0/${V0}{1,2,3,4,5,6,7,8}; + +function volinfo_field() +{ + local vol=$1; + local field=$2; + + $CLI volume info $vol | grep "^$field: " | sed 's/.*: //'; +} + + +## Verify volume is is created +EXPECT "$V0" volinfo_field $V0 'Volume Name'; +EXPECT 'Created' volinfo_field $V0 'Status'; + + +## Start volume and verify +TEST $CLI volume start $V0; +EXPECT 'Started' volinfo_field $V0 'Status'; + + +## Make volume tightly consistent for metdata +TEST $CLI volume set $V0 performance.stat-prefetch off; + +## Mount FUSE with caching disabled (read-write) +TEST glusterfs --entry-timeout=0 --attribute-timeout=0 -s $H0 --volfile-id $V0 $M0; + +## Check consistent "rw" option +TEST 'mount -t fuse.glusterfs | grep -E "^$H0:$V0 .+ \(rw,"'; +TEST 'grep -E "^$H0:$V0 .+ ,?rw," /proc/mounts'; + +## Mount FUSE with caching disabled (read-only) +TEST glusterfs --entry-timeout=0 --attribute-timeout=0 --read-only -s $H0 --volfile-id $V0 $M1; + +## Check consistent "ro" option +TEST 'mount -t fuse.glusterfs | grep -E "^$H0:$V0 .+ \(ro,"'; +TEST 'grep -E "^$H0:$V0 .+ ,?ro,.+" /proc/mounts'; + +## Wait for volume to register with rpc.mountd +sleep 5; + +## Mount NFS +TEST mount -t nfs -o nolock,soft,intr $H0:/$V0 $N0; + + +## Test for consistent views between NFS and FUSE mounts +## write access to $M1 should fail +TEST ! stat $M0/newfile; +TEST ! touch $M1/newfile; +TEST touch $M0/newfile; +TEST stat $M1/newfile; +TEST stat $N0/newfile; +TEST ! rm $M1/newfile; +TEST rm $N0/newfile; +TEST ! stat $M0/newfile; +TEST ! stat $M1/newfile; + + +## Finish up +TEST $CLI volume stop $V0; +EXPECT 'Stopped' volinfo_field $V0 'Status'; + +TEST $CLI volume delete $V0; +TEST ! $CLI volume info $V0; + +cleanup; diff --git a/tests/basic/nufa.t b/tests/basic/nufa.t new file mode 100644 index 00000000..0d4c229a --- /dev/null +++ b/tests/basic/nufa.t @@ -0,0 +1,32 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../volume.rc + +cleanup; + +TEST glusterd +TEST pidof glusterd +TEST $CLI volume info; + +TEST $CLI volume create $V0 replica 2 stripe 2 $H0:$B0/${V0}{1,2,3,4,5,6,7,8}; + +EXPECT "$V0" volinfo_field $V0 'Volume Name'; +EXPECT 'Created' volinfo_field $V0 'Status'; +EXPECT '8' brick_count $V0 + +TEST $CLI volume set $V0 nufa on; + +TEST $CLI volume start $V0; +EXPECT 'Started' volinfo_field $V0 'Status'; + +## Mount FUSE with caching disabled (read-only) +TEST glusterfs --entry-timeout=0 --attribute-timeout=0 --read-only -s $H0 --volfile-id $V0 $M1; + +## Wait for volume to register with rpc.mountd +sleep 5; + +## Mount NFS +TEST mount -t nfs -o nolock,soft,intr $H0:/$V0 $N0; + +cleanup; diff --git a/tests/basic/posixonly.t b/tests/basic/posixonly.t new file mode 100755 index 00000000..b9de317a --- /dev/null +++ b/tests/basic/posixonly.t @@ -0,0 +1,30 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc + +cleanup; + +TEST mkdir -p $B0/posixonly +cat > $B0/posixonly.vol <<EOF +volume poisxonly + type storage/posix + option directory $B0/posixonly +end-volume +EOF + +TEST glusterfs -f $B0/posixonly.vol $M0; + +TEST touch $M0/filename; +TEST stat $M0/filename; +TEST mkdir $M0/dirname; +TEST stat $M0/dirname; +TEST touch $M0/dirname/filename; +TEST stat $M0/dirname/filename; +TEST ln $M0/dirname/filename $M0/dirname/linkname; +TEST chown 100:100 $M0/dirname/filename; +TEST chown 100:100 $M0/dirname; +TEST rm -rf $M0/filename $M0/dirname; + +TEST umount $M0; + +cleanup; diff --git a/tests/basic/pump.t b/tests/basic/pump.t new file mode 100644 index 00000000..3faf06f0 --- /dev/null +++ b/tests/basic/pump.t @@ -0,0 +1,44 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../volume.rc + +cleanup; + +TEST glusterd +TEST pidof glusterd +TEST $CLI volume create $V0 $H0:$B0/${V0}0 +TEST $CLI volume start $V0 +TEST glusterfs --volfile-id=/$V0 --volfile-server=$H0 $M0 --attribute-timeout=0 --entry-timeout=0 +cd $M0 +for i in {1..3} +do + for j in {1..10} + do + dd if=/dev/urandom of=file$j bs=128K count=10 2>/dev/null 1>/dev/null + done + mkdir dir$i && cd dir$i +done +cd +TEST umount $M0 +TEST $CLI volume replace-brick $V0 $H0:$B0/${V0}0 $H0:$B0/${V0}1 start +EXPECT_WITHIN 60 "Y" gd_is_replace_brick_completed $H0 $V0 $H0:$B0/${V0}0 $H0:$B0/${V0}1 +TEST $CLI volume replace-brick $V0 $H0:$B0/${V0}0 $H0:$B0/${V0}1 commit +TEST $CLI volume stop $V0 +TEST diff -r --exclude=.glusterfs $B0/${V0}0 $B0/${V0}1 + +files="" + +cd $B0/${V0}0 +for f in `find . -path ./.glusterfs -prune -o -print`; +do + if [ -d $f ]; then continue; fi + cmp $f $B0/${V0}1/$f + if [ $? -ne 0 ]; then + files="$files $f" + fi +done + +EXPECT "" echo $files + +cleanup diff --git a/tests/basic/quota.t b/tests/basic/quota.t new file mode 100755 index 00000000..ef015a30 --- /dev/null +++ b/tests/basic/quota.t @@ -0,0 +1,51 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../volume.rc + +cleanup; + +TEST glusterd +TEST pidof glusterd +TEST $CLI volume info; + +TEST $CLI volume create $V0 replica 2 stripe 2 $H0:$B0/${V0}{1,2,3,4,5,6,7,8}; + +function limit_on() +{ + local QUOTA_PATH=$1; + $CLI volume quota $V0 list | grep "$QUOTA_PATH" | awk '{print $2}' +} + +EXPECT "$V0" volinfo_field $V0 'Volume Name'; +EXPECT 'Created' volinfo_field $V0 'Status'; +EXPECT '8' brick_count $V0 + +TEST $CLI volume start $V0; +EXPECT 'Started' volinfo_field $V0 'Status'; + +## ------------------------------ +## Verify quota commands +## ------------------------------ +TEST $CLI volume quota $V0 enable + +TEST $CLI volume quota $V0 limit-usage /test_dir 100MB + +TEST $CLI volume quota $V0 limit-usage /test_dir/in_test_dir 150MB + +EXPECT "150MB" limit_on "/test_dir/in_test_dir"; + +TEST $CLI volume quota $V0 remove /test_dir/in_test_dir + +EXPECT "100MB" limit_on "/test_dir"; + +TEST $CLI volume quota $V0 disable +## ------------------------------ + +TEST $CLI volume stop $V0; +EXPECT 'Stopped' volinfo_field $V0 'Status'; + +TEST $CLI volume delete $V0; +TEST ! $CLI volume info $V0; + +cleanup; diff --git a/tests/basic/rpm.t b/tests/basic/rpm.t new file mode 100755 index 00000000..e2c630f8 --- /dev/null +++ b/tests/basic/rpm.t @@ -0,0 +1,116 @@ +#!/bin/bash +# +# This test will run mock and rebuild the srpm for the latest two EPEL version. +# By default, the results and the chroots are deleted. +# +# When debugging is needed, make sure to set DEBUG=1 in the environment or this +# script. When debugging is enabled, the resulting log files and chroots are +# kept. With debugging enabled, this test will fail the regression test, and +# all output is saved to rpmbuild-mock.log. Tests are run in parallel, so the +# logfile may be difficult to read. +# +# chroots are configured in /etc/mock/*.cfg, with site-defaults.cfg as main +# configuration file. The default for chroots is /var/lib/mock, but this +# depends on the 'basedir' configuration option set in the mentioned files. +# + +. $(dirname $0)/../include.rc + +# enable some extra debugging +if [ -n "${DEBUG}" -a "${DEBUG}" != "0" ] +then + exec &> rpmbuild-mock.log + set -x + MOCK_CLEANUP='--no-cleanup-after' +else + MOCK_CLEANUP='--cleanup-after' +fi + +# detect the branch we're based off +if [ -n "${BRANCH}" ] ; then + # $BRANCH is set in the environment (by Jenkins or other) + GIT_PARENT="origin/${BRANCH}" +else + # get a reference to the latest clean tree + GIT_PARENT=$(git describe --abbrev=0) +fi + +# check for changed files +CHANGED_FILES=$(git diff --name-only ${GIT_PARENT}) +# if a commit changes this test, we should not skip it +SELFTEST=$(grep -e 'tests/basic/rpm.t' <<< "${CHANGED_FILES}") +# filter out any files not affecting the build itself +CHANGED_FILES=$(grep -E -v \ + -e '\.c$' \ + -e '\.h$' \ + -e '\.py$' \ + -e '^tests/' \ + <<< "${CHANGED_FILES}") +if [ -z "${CHANGED_FILES}" -a -z "${SELFTEST}" ] +then + # nothing affecting packaging changed, no need to retest rpmbuild + SKIP_TESTS + cleanup + exit 0 +fi + +# checkout the sources to a new directory to execute ./configure and all +REPO=${PWD} +COMMIT=$(git describe) +mkdir rpmbuild-mock.d +pushd rpmbuild-mock.d 2>/dev/null +git clone -q -s file://${REPO} . +git checkout -q -b rpm-test ${COMMIT} + +# build the glusterfs-*.tar.gz +[ -e configure ] || ./autogen.sh 2>&1 > /dev/null +TEST ./configure --enable-fusermount +TEST make dist + +# build the glusterfs src.rpm +ls extras +TEST make -C extras/LinuxRPM testsrpm + +# build for the last two Fedora EPEL releases (x86_64 only) +for MOCK_CONF in $(ls -x1 /etc/mock/*.cfg | egrep -e 'epel-[0-9]+-x86_64.cfg$' | tail -n2) +do + EPEL_RELEASE=$(basename ${MOCK_CONF} .cfg) + # expand the mock command line + MOCK_CMD="/usr/bin/mock ${MOCK_CLEANUP} \ + -r ${EPEL_RELEASE} --rebuild ${PWD}/*.src.rpm" + + # write the mock command to a file, so that its easier to execute + cat << EOF > mock-${EPEL_RELEASE}.sh +#!/bin/sh +${MOCK_CMD} +EOF + chmod +x mock-${EPEL_RELEASE}.sh + + # root can not run 'mock', it needs to drop priviledges + if (groups | grep -q mock) + then + # the current user is in group 'mock' + ${PWD}/mock-${EPEL_RELEASE}.sh & + else + # "su" might not work, using sudo instead + sudo -u mock -E ${PWD}/mock-${EPEL_RELEASE}.sh & + fi + sleep 5 +done + +# TAP and Prove aren't smart about loops +TESTS_EXPECTED_IN_LOOP=2 +for mockjob in $(jobs -p) +do + TEST_IN_LOOP wait ${mockjob} +done + +# we could build for the last two Fedora releases too, but that is not +# possible on EPEL-5/6 installations, Fedora 17 and newer have unmet +# dependencies on the build-server :-/ + +popd 2>/dev/null +# only remove rpmbuild-mock.d if we're not debugging +[ "${DEBUG}" = "0" ] && rm -rf rpmbuild-mock.d + +cleanup diff --git a/tests/basic/self-heald.t b/tests/basic/self-heald.t new file mode 100644 index 00000000..4468c881 --- /dev/null +++ b/tests/basic/self-heald.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/${V0}{0,1,2,3,4,5} +TEST $CLI volume set $V0 cluster.background-self-heal-count 0 +TEST $CLI volume set $V0 cluster.eager-lock off +TEST $CLI volume start $V0 +TEST glusterfs --volfile-id=/$V0 --volfile-server=$H0 $M0 --attribute-timeout=0 --entry-timeout=0 +TEST kill_brick $V0 $H0 $B0/${V0}0 +TEST kill_brick $V0 $H0 $B0/${V0}2 +TEST kill_brick $V0 $H0 $B0/${V0}4 +cd $M0 +HEAL_FILES=0 +for i in {1..10} +do + dd if=/dev/urandom of=f bs=1M count=10 2>/dev/null + HEAL_FILES=$(($HEAL_FILES+1)) + mkdir a; cd a; + HEAL_FILES=$(($HEAL_FILES+3)) #As many times as distribute subvols +done +HEAL_FILES=$(($HEAL_FILES + 3)) #Count the brick root dir + +cd ~ +EXPECT "$HEAL_FILES" afr_get_pending_heal_count $V0 +TEST ! $CLI volume heal $V0 +TEST $CLI volume set $V0 cluster.self-heal-daemon off +TEST ! $CLI volume heal $V0 info +TEST ! $CLI volume heal $V0 +TEST $CLI volume start $V0 force +TEST $CLI volume set $V0 cluster.self-heal-daemon on +EXPECT_WITHIN 20 "Y" glustershd_up_status +EXPECT_WITHIN 20 "1" afr_child_up_status_in_shd $V0 0 +EXPECT_WITHIN 20 "1" afr_child_up_status_in_shd $V0 2 +EXPECT_WITHIN 20 "1" afr_child_up_status_in_shd $V0 4 +TEST $CLI volume heal $V0 +sleep 5 #Until the heal-statistics command implementation +#check that this heals the contents partially +TEST [ $HEAL_FILES -gt $(afr_get_pending_heal_count $V0) ] + +TEST $CLI volume heal $V0 full +EXPECT_WITHIN 30 "0" afr_get_pending_heal_count $V0 +cleanup diff --git a/tests/basic/volume-status.t b/tests/basic/volume-status.t new file mode 100644 index 00000000..f4196ac3 --- /dev/null +++ b/tests/basic/volume-status.t @@ -0,0 +1,66 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../volume.rc + +cleanup; + +TEST glusterd +TEST pidof glusterd +TEST $CLI volume info; + +TEST $CLI volume create $V0 replica 2 stripe 2 $H0:$B0/${V0}{1,2,3,4,5,6,7,8}; + +TEST $CLI volume start $V0; + +sleep 2 + +## Mount FUSE +TEST glusterfs -s $H0 --volfile-id $V0 $M0; + +## Mount NFS +TEST mount -t nfs -o vers=3,nolock,soft,intr $H0:/$V0 $N0; + +TEST $CLI volume status all +TEST $CLI volume status $V0 + +EXPECT_WITHIN 10 'Y' nfs_up_status +EXPECT_WITHIN 10 'Y' glustershd_up_status +function test_nfs_cmds () { + local ret=0 + declare -a nfs_cmds=("clients" "mem" "inode" "callpool") + for cmd in ${nfs_cmds[@]}; do + $CLI volume status $V0 nfs $cmd + (( ret += $? )) + done + return $ret +} + +function test_shd_cmds () { + local ret=0 + declare -a shd_cmds=("mem" "inode" "callpool") + for cmd in ${shd_cmds[@]}; do + $CLI volume status $V0 shd $cmd + (( ret += $? )) + done + return $ret +} + +function test_brick_cmds () { + local ret=0 + declare -a cmds=("detail" "clients" "mem" "inode" "fd" "callpool") + for cmd in ${cmds[@]}; do + for i in {1..2}; do + $CLI volume status $V0 $H0:$B0/${V0}$i $cmd + (( ret += $? )) + done + done + return $ret +} + +TEST test_shd_cmds; +TEST test_nfs_cmds; +TEST test_brick_cmds; + +cleanup; + diff --git a/tests/basic/volume.t b/tests/basic/volume.t new file mode 100755 index 00000000..2f909605 --- /dev/null +++ b/tests/basic/volume.t @@ -0,0 +1,34 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../volume.rc + +cleanup; + +TEST glusterd +TEST pidof glusterd +TEST $CLI volume info; + +TEST $CLI volume create $V0 replica 2 stripe 2 $H0:$B0/${V0}{1,2,3,4,5,6,7,8}; + + +EXPECT "$V0" volinfo_field $V0 'Volume Name'; +EXPECT 'Created' volinfo_field $V0 'Status'; +EXPECT '8' brick_count $V0 + +TEST $CLI volume start $V0; +EXPECT 'Started' volinfo_field $V0 'Status'; + +TEST $CLI volume add-brick $V0 $H0:$B0/${V0}{9,10,11,12}; +EXPECT '12' brick_count $V0 + +TEST $CLI volume remove-brick $V0 $H0:$B0/${V0}{1,2,3,4}; +EXPECT '8' brick_count $V0 + +TEST $CLI volume stop $V0; +EXPECT 'Stopped' volinfo_field $V0 'Status'; + +TEST $CLI volume delete $V0; +TEST ! $CLI volume info $V0; + +cleanup; |
