summaryrefslogtreecommitdiff
path: root/qa/workunits
diff options
context:
space:
mode:
authorJosh Durgin <josh.durgin@dreamhost.com>2011-12-06 10:31:17 -0800
committerJosh Durgin <josh.durgin@dreamhost.com>2011-12-06 10:31:17 -0800
commit66b6b1bff88b35eaf1c10bfe9e7afb113aa18d62 (patch)
tree36b3c37246ab7fa0c1806fd6fea2e756c3a33dc8 /qa/workunits
parentfd9556f0ac804a2fed298394177b140a9f5b820c (diff)
downloadceph-66b6b1bff88b35eaf1c10bfe9e7afb113aa18d62.tar.gz
workunits: add some tests for kernel rbd
This covers some snapshot and resize functions that aren't tested by fs benchmarks. Signed-off-by: Josh Durgin <josh.durgin@dreamhost.com>
Diffstat (limited to 'qa/workunits')
-rw-r--r--qa/workunits/rbd/kernel.sh101
1 files changed, 101 insertions, 0 deletions
diff --git a/qa/workunits/rbd/kernel.sh b/qa/workunits/rbd/kernel.sh
new file mode 100644
index 00000000000..d7e72a3f519
--- /dev/null
+++ b/qa/workunits/rbd/kernel.sh
@@ -0,0 +1,101 @@
+#!/bin/bash -ex
+
+CEPH_SECRET_FILE=${CEPH_SECRET_FILE:-}
+CEPH_ID=${CEPH_ID:-admin}
+SECRET_ARGS=''
+if [ -z $CEPH_SECRET_FILE ]; then
+ SECRET_ARGS="--secret $CEPH_SECRET_FILE"
+fi
+
+TMP_FILES="/tmp/img1 /tmp/img1.small /tmp/img1.snap1 /tmp/img1.export /tmp/img1.trunc"
+
+function get_device_dir {
+ local POOL=$1
+ local IMAGE=$2
+ local SNAP=$3
+ rbd showmapped | tail -n +2 | egrep "\s+$POOL\s+$IMAGE\s+$SNAP\s+" | cut -f 1
+}
+
+function clean_up {
+ rbd unmap /dev/rbd/rbd/testimg1 || true
+ rbd unmap /dev/rbd/rbd/testimg1@snap1 || true
+ sudo chown root /sys/bus/rbd/add /sys/bus/rbd/remove
+ rbd rm testimg1 || true
+ rm -f $TMP_FILES
+}
+
+clean_up
+
+trap clean_up INT TERM EXIT
+
+# allow ubuntu user to map/unmap rbd devices
+sudo chown ubuntu /sys/bus/rbd/add /sys/bus/rbd/remove
+
+# create an image
+dd if=/bin/sh of=/tmp/img1 bs=1k count=1 seek=10
+dd if=/bin/dd of=/tmp/img1 bs=1k count=10 seek=100
+dd if=/bin/rm of=/tmp/img1 bs=1k count=100 seek=1000
+dd if=/bin/ls of=/tmp/img1 bs=1k seek=10000
+dd if=/bin/ln of=/tmp/img1 bs=1k seek=100000
+dd if=/dev/zero of=/tmp/img1 count=0 seek=150000
+
+# import
+rbd import /tmp/img1 testimg1
+rbd map testimg1 --user $CEPH_ID $SECRET_ARGS
+DEV_ID1=$(get_device_dir rbd testimg1 -)
+echo "dev_id1 = $DEV_ID1"
+cat /sys/bus/rbd/devices/$DEV_ID1/size
+cat /sys/bus/rbd/devices/$DEV_ID1/size | grep 76800000
+
+# wait for udev to catch up
+while test ! -e /dev/rbd/rbd/testimg1
+do
+ sleep 1
+done
+sudo dd if=/dev/rbd/rbd/testimg1 of=/tmp/img1.export
+cmp /tmp/img1 /tmp/img1.export
+
+# snapshot
+rbd snap create testimg1 --snap=snap1
+cat /sys/bus/rbd/devices/$DEV_ID1/snap_snap1/snap_size | grep 76800000
+rbd map --snap=snap1 testimg1 --user $CEPH_ID $SECRET_ARGS
+DEV_ID2=$(get_device_dir rbd testimg1 snap1)
+cat /sys/bus/rbd/devices/$DEV_ID2/size | grep 76800000
+
+# wait for udev to catch up
+while test ! -e /dev/rbd/rbd/testimg1@snap1
+do
+ sleep 1
+done
+sudo dd if=/dev/rbd/rbd/testimg1@snap1 of=/tmp/img1.snap1
+cmp /tmp/img1 /tmp/img1.snap1
+
+# resize
+rbd resize testimg1 --size=40
+echo 1 | sudo tee /sys/bus/rbd/devices/$DEV_ID1/refresh
+cat /sys/bus/rbd/devices/$DEV_ID1/size | grep 41943040
+echo 1 | sudo tee /sys/bus/rbd/devices/$DEV_ID2/refresh
+cat /sys/bus/rbd/devices/$DEV_ID2/size | grep 76800000
+
+sudo dd if=/dev/rbd/rbd/testimg1 of=/tmp/img1.small
+cp /tmp/img1 /tmp/img1.trunc
+truncate -s 41943040 /tmp/img1.trunc
+cmp /tmp/img1.trunc /tmp/img1.small
+
+# rollback and check data again
+rbd snap rollback --snap=snap1 testimg1
+echo 1 | sudo tee /sys/bus/rbd/devices/$DEV_ID1/refresh
+cat /sys/bus/rbd/devices/$DEV_ID1/snap_snap1/snap_size | grep 76800000
+cat /sys/bus/rbd/devices/$DEV_ID1/size | grep 76800000
+rm -f /tmp/img1.snap1 /tmp/img1.export
+
+sudo dd if=/dev/rbd/rbd/testimg1@snap1 of=/tmp/img1.snap1
+cmp /tmp/img1 /tmp/img1.snap1
+sudo dd if=/dev/rbd/rbd/testimg1 of=/tmp/img1.export
+cmp /tmp/img1 /tmp/img1.export
+
+# remove snapshot and detect error from mapped snapshot
+rbd snap rm --snap=snap1 testimg1
+sudo dd if=/dev/rbd/rbd/testimg1@snap1 of=/tmp/img1.snap1 2>&1 | grep 'Input/output error'
+
+echo OK