Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / qa / workunits / objectstore / test_fuse.sh
1 #!/bin/sh -ex
2
3 if ! id -u | grep -q '^0$'; then
4     echo "not root, re-running self via sudo"
5     sudo PATH=$PATH TYPE=$TYPE $0
6     exit 0
7 fi
8
9 expect_false()
10 {
11         set -x
12         if "$@"; then return 1; else return 0; fi
13 }
14
15 COT=ceph-objectstore-tool
16 DATA=store_test_fuse_dir
17 [ -z "$TYPE" ] && TYPE=bluestore
18 MNT=store_test_fuse_mnt
19
20 rm -rf $DATA
21 mkdir -p $DATA
22
23 test -d $MNT && fusermount -u $MNT || true
24 rmdir $MNT || true
25 mkdir $MNT
26
27 export CEPH_ARGS=--enable_experimental_unrecoverable_data_corrupting_features=bluestore
28
29 $COT --op mkfs --data-path $DATA --type $TYPE
30 $COT --op fuse --data-path $DATA --mountpoint $MNT &
31
32 while ! test -e $MNT/type ; do
33     echo waiting for $MNT/type to appear
34     sleep 1
35 done
36
37 umask 0
38
39 grep $TYPE $MNT/type
40
41 # create collection
42 mkdir $MNT/meta
43 test -e $MNT/meta/bitwise_hash_start
44 test -d $MNT/meta/all
45 test -d $MNT/meta/by_bitwise_hash
46
47 # create object
48 mkdir $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#
49 test -e $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/data
50 test -d $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/attr
51 test -d $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/omap
52 test -e $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/bitwise_hash
53 test -e $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/omap_header
54
55 # omap header
56 echo omap header > $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/omap_header
57 grep -q omap $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/omap_header
58
59 # omap
60 echo value a > $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/omap/keya
61 echo value b > $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/omap/keyb
62 ls $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/omap | grep -c key | grep -q 2
63 grep 'value a' $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/omap/keya
64 grep 'value b' $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/omap/keyb
65 rm $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/omap/keya
66 test ! -e $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/omap/keya
67 rm $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/omap/keyb
68 test ! -e $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/omap/keyb
69
70 # attr
71 echo value a > $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/attr/keya
72 echo value b > $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/attr/keyb
73 ls $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/attr | grep -c key | grep -q 2
74 grep 'value a' $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/attr/keya
75 grep 'value b' $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/attr/keyb
76 rm $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/attr/keya
77 test ! -e $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/attr/keya
78 rm $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/attr/keyb
79 test ! -e $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/attr/keyb
80
81 # data
82 test ! -s $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/data
83 echo asdfasdfasdf > $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/data
84 test -s $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/data
85 grep -q asdfasdfasdf $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/data
86 truncate --size 4 $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/data
87 stat --format=%s $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/data | grep -q ^4$
88 expect_false grep -q asdfasdfasdf $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/data
89 rm $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/data
90 test ! -s $MNT/meta/all/#-1:7b3f43c4:::osd_superblock:0#/data
91
92
93 # create pg collection
94 mkdir --mode 0003 $MNT/0.0_head
95 grep -q 00000000 $MNT/0.0_head/bitwise_hash_start
96 if [ "$TYPE" = "bluestore" ]; then
97     cat $MNT/0.0_head/bitwise_hash_bits
98     grep -q 3 $MNT/0.0_head/bitwise_hash_bits
99     grep -q 1fffffff $MNT/0.0_head/bitwise_hash_end
100 fi
101 test -d $MNT/0.0_head/all
102
103 mkdir --mode 0003 $MNT/0.1_head
104 grep -q 80000000 $MNT/0.1_head/bitwise_hash_start
105 if [ "$TYPE" = "bluestore" ]; then
106     grep -q 3 $MNT/0.1_head/bitwise_hash_bits
107     grep -q 9fffffff $MNT/0.1_head/bitwise_hash_end
108 fi
109
110 # create pg object
111 mkdir $MNT/0.0_head/all/#0:00000000::::head#/
112 mkdir $MNT/0.0_head/all/#0:10000000:::foo:head#/
113
114 # verify pg bounds check
115 if [ "$TYPE" = "bluestore" ]; then
116     expect_false mkdir $MNT/0.0_head/all/#0:20000000:::bar:head#/
117 fi
118
119 # remove a collection
120 expect_false rmdir $MNT/0.0_head
121 rmdir $MNT/0.0_head/all/#0:10000000:::foo:head#/
122 rmdir $MNT/0.0_head/all/#0:00000000::::head#/
123 rmdir $MNT/0.0_head
124 rmdir $MNT/0.1_head
125
126 fusermount -u $MNT
127 wait
128
129 echo OK