Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / qa / workunits / rbd / kernel.sh
1 #!/bin/bash -ex
2
3 CEPH_SECRET_FILE=${CEPH_SECRET_FILE:-}
4 CEPH_ID=${CEPH_ID:-admin}
5 SECRET_ARGS=''
6 if [ ! -z $CEPH_SECRET_FILE ]; then
7         SECRET_ARGS="--secret $CEPH_SECRET_FILE"
8 fi
9
10 TMP_FILES="/tmp/img1 /tmp/img1.small /tmp/img1.snap1 /tmp/img1.export /tmp/img1.trunc"
11
12 function get_device_dir {
13         local POOL=$1
14         local IMAGE=$2
15         local SNAP=$3
16         rbd showmapped | tail -n +2 | egrep "\s+$POOL\s+$IMAGE\s+$SNAP\s+" | awk '{print $1;}'
17 }
18
19 function clean_up {
20         [ -e /dev/rbd/rbd/testimg1@snap1 ] &&
21                 sudo rbd unmap /dev/rbd/rbd/testimg1@snap1
22         if [ -e /dev/rbd/rbd/testimg1 ]; then
23                 sudo rbd unmap /dev/rbd/rbd/testimg1
24                 rbd snap purge testimg1 || true
25         fi
26         rbd ls | grep testimg1 > /dev/null && rbd rm testimg1 || true
27         sudo rm -f $TMP_FILES
28 }
29
30 clean_up
31
32 trap clean_up INT TERM EXIT
33
34 # create an image
35 dd if=/bin/sh of=/tmp/img1 bs=1k count=1 seek=10
36 dd if=/bin/dd of=/tmp/img1 bs=1k count=10 seek=100
37 dd if=/bin/rm of=/tmp/img1 bs=1k count=100 seek=1000
38 dd if=/bin/ls of=/tmp/img1 bs=1k seek=10000
39 dd if=/bin/ln of=/tmp/img1 bs=1k seek=100000
40 dd if=/dev/zero of=/tmp/img1 count=0 seek=150000
41
42 # import
43 rbd import /tmp/img1 testimg1
44 sudo rbd map testimg1 --user $CEPH_ID $SECRET_ARGS
45
46 DEV_ID1=$(get_device_dir rbd testimg1 -)
47 echo "dev_id1 = $DEV_ID1"
48 cat /sys/bus/rbd/devices/$DEV_ID1/size
49 cat /sys/bus/rbd/devices/$DEV_ID1/size | grep 76800000
50
51 sudo dd if=/dev/rbd/rbd/testimg1 of=/tmp/img1.export
52 cmp /tmp/img1 /tmp/img1.export
53
54 # snapshot
55 rbd snap create testimg1 --snap=snap1
56 sudo rbd map --snap=snap1 testimg1 --user $CEPH_ID $SECRET_ARGS
57
58 DEV_ID2=$(get_device_dir rbd testimg1 snap1)
59 cat /sys/bus/rbd/devices/$DEV_ID2/size | grep 76800000
60
61 sudo dd if=/dev/rbd/rbd/testimg1@snap1 of=/tmp/img1.snap1
62 cmp /tmp/img1 /tmp/img1.snap1
63
64 # resize
65 rbd resize testimg1 --size=40 --allow-shrink
66 cat /sys/bus/rbd/devices/$DEV_ID1/size | grep 41943040
67 cat /sys/bus/rbd/devices/$DEV_ID2/size | grep 76800000
68
69 sudo dd if=/dev/rbd/rbd/testimg1 of=/tmp/img1.small
70 cp /tmp/img1 /tmp/img1.trunc
71 truncate -s 41943040 /tmp/img1.trunc
72 cmp /tmp/img1.trunc /tmp/img1.small
73
74 # rollback and check data again
75 rbd snap rollback --snap=snap1 testimg1
76 cat /sys/bus/rbd/devices/$DEV_ID1/size | grep 76800000
77 cat /sys/bus/rbd/devices/$DEV_ID2/size | grep 76800000
78 sudo rm -f /tmp/img1.snap1 /tmp/img1.export
79
80 sudo dd if=/dev/rbd/rbd/testimg1@snap1 of=/tmp/img1.snap1
81 cmp /tmp/img1 /tmp/img1.snap1
82 sudo dd if=/dev/rbd/rbd/testimg1 of=/tmp/img1.export
83 cmp /tmp/img1 /tmp/img1.export
84
85 # remove snapshot and detect error from mapped snapshot
86 rbd snap rm --snap=snap1 testimg1
87 sudo dd if=/dev/rbd/rbd/testimg1@snap1 of=/tmp/img1.snap1 2>&1 | grep 'Input/output error'
88
89 echo OK