]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | #!/bin/bash |
2 | ||
3 | die() { | |
4 | echo "$@" | |
5 | exit 1 | |
6 | } | |
7 | ||
8 | usage() { | |
9 | cat <<EOF | |
10 | test_rados_tool.sh: tests rados_tool | |
11 | -c: RADOS configuration file to use [optional] | |
12 | -k: keep temp files | |
13 | -h: this help message | |
14 | -p: set temporary pool to use [optional] | |
15 | EOF | |
16 | } | |
17 | ||
18 | do_run() { | |
19 | if [ "$1" == "--tee" ]; then | |
20 | shift | |
21 | tee_out="$1" | |
22 | shift | |
23 | "$@" | tee $tee_out | |
24 | else | |
25 | "$@" | |
26 | fi | |
27 | } | |
28 | ||
29 | run_expect_fail() { | |
30 | echo "RUN_EXPECT_FAIL: " "$@" | |
31 | do_run "$@" | |
32 | [ $? -eq 0 ] && die "expected failure, but got success! cmd: $@" | |
33 | } | |
34 | ||
35 | run_expect_succ() { | |
36 | echo "RUN_EXPECT_SUCC: " "$@" | |
37 | do_run "$@" | |
38 | [ $? -ne 0 ] && die "expected success, but got failure! cmd: $@" | |
39 | } | |
40 | ||
41 | run_expect_nosignal() { | |
42 | echo "RUN_EXPECT_NOSIGNAL: " "$@" | |
43 | do_run "$@" | |
44 | [ $? -ge 128 ] && die "expected succes or fail, but got signal! cmd: $@" | |
45 | } | |
46 | ||
47 | run() { | |
48 | echo "RUN: " $@ | |
49 | do_run "$@" | |
50 | } | |
51 | ||
52 | if [ -n "$CEPH_BIN" ] ; then | |
53 | # CMake env | |
54 | RADOS_TOOL="$CEPH_BIN/rados" | |
55 | CEPH_TOOL="$CEPH_BIN/ceph" | |
56 | else | |
57 | # executables should be installed by the QA env | |
58 | RADOS_TOOL=$(which rados) | |
59 | CEPH_TOOL=$(which ceph) | |
60 | fi | |
61 | ||
62 | KEEP_TEMP_FILES=0 | |
63 | POOL=trs_pool | |
64 | POOL_CP_TARGET=trs_pool.2 | |
65 | POOL_EC=trs_pool_ec | |
66 | ||
67 | [ -x "$RADOS_TOOL" ] || die "couldn't find $RADOS_TOOL binary to test" | |
68 | [ -x "$CEPH_TOOL" ] || die "couldn't find $CEPH_TOOL binary to test" | |
69 | ||
70 | while getopts "c:hkp:" flag; do | |
71 | case $flag in | |
72 | c) RADOS_TOOL="$RADOS_TOOL -c $OPTARG";; | |
73 | k) KEEP_TEMP_FILES=1;; | |
74 | h) usage; exit 0;; | |
75 | p) POOL=$OPTARG;; | |
76 | *) echo; usage; exit 1;; | |
77 | esac | |
78 | done | |
79 | ||
80 | TDIR=`mktemp -d -t test_rados_tool.XXXXXXXXXX` || die "mktemp failed" | |
81 | [ $KEEP_TEMP_FILES -eq 0 ] && trap "rm -rf ${TDIR}; exit" INT TERM EXIT | |
82 | ||
83 | # ensure rados doesn't segfault without --pool | |
84 | run_expect_nosignal "$RADOS_TOOL" --snap "asdf" ls | |
85 | run_expect_nosignal "$RADOS_TOOL" --snapid "0" ls | |
86 | run_expect_nosignal "$RADOS_TOOL" --object_locator "asdf" ls | |
87 | run_expect_nosignal "$RADOS_TOOL" --namespace "asdf" ls | |
88 | ||
89 | run_expect_succ "$RADOS_TOOL" mkpool "$POOL" | |
224ce89b | 90 | run_expect_succ "$CEPH_TOOL" osd erasure-code-profile set myprofile k=2 m=1 stripe_unit=2K crush-failure-domain=osd --force |
7c673cae FG |
91 | run_expect_succ "$CEPH_TOOL" osd pool create "$POOL_EC" 100 100 erasure myprofile |
92 | ||
93 | ||
94 | # expb happens to be the empty export for legacy reasons | |
95 | run_expect_succ "$RADOS_TOOL" -p "$POOL" export "$TDIR/expb" | |
96 | ||
97 | # expa has objects foo, foo2 and bar | |
98 | run_expect_succ "$RADOS_TOOL" -p "$POOL" put foo /etc/fstab | |
99 | run_expect_succ "$RADOS_TOOL" -p "$POOL" put foo2 /etc/fstab | |
100 | run_expect_succ "$RADOS_TOOL" -p "$POOL" put bar /etc/fstab | |
101 | run_expect_succ "$RADOS_TOOL" -p "$POOL" export "$TDIR/expa" | |
102 | ||
103 | # expc has foo and foo2 with some attributes and omaps set | |
104 | run_expect_succ "$RADOS_TOOL" -p "$POOL" rm bar | |
105 | run_expect_succ "$RADOS_TOOL" -p "$POOL" setxattr foo "rados.toothbrush" "toothbrush" | |
106 | run_expect_succ "$RADOS_TOOL" -p "$POOL" setxattr foo "rados.toothpaste" "crest" | |
107 | run_expect_succ "$RADOS_TOOL" -p "$POOL" setomapval foo "rados.floss" "myfloss" | |
108 | run_expect_succ "$RADOS_TOOL" -p "$POOL" setxattr foo2 "rados.toothbrush" "green" | |
109 | run_expect_succ "$RADOS_TOOL" -p "$POOL" setomapheader foo2 "foo2.header" | |
110 | run_expect_succ "$RADOS_TOOL" -p "$POOL" export "$TDIR/expc" | |
111 | ||
112 | # make sure that --create works | |
113 | run "$RADOS_TOOL" rmpool "$POOL" "$POOL" --yes-i-really-really-mean-it | |
114 | run_expect_succ "$RADOS_TOOL" -p "$POOL" --create import "$TDIR/expa" | |
115 | ||
116 | # make sure that lack of --create fails | |
117 | run_expect_succ "$RADOS_TOOL" rmpool "$POOL" "$POOL" --yes-i-really-really-mean-it | |
118 | run_expect_fail "$RADOS_TOOL" -p "$POOL" import "$TDIR/expa" | |
119 | ||
120 | run_expect_succ "$RADOS_TOOL" -p "$POOL" --create import "$TDIR/expa" | |
121 | ||
122 | # inaccessible import src should fail | |
123 | run_expect_fail "$RADOS_TOOL" -p "$POOL" import "$TDIR/dir_nonexistent" | |
124 | ||
125 | # export an empty pool to test purge | |
126 | run_expect_succ "$RADOS_TOOL" purge "$POOL" --yes-i-really-really-mean-it | |
127 | run_expect_succ "$RADOS_TOOL" -p "$POOL" export "$TDIR/empty" | |
128 | cmp -s "$TDIR/expb" "$TDIR/empty" \ | |
129 | || die "failed to export the same stuff we imported!" | |
130 | rm -f "$TDIR/empty" | |
131 | ||
132 | # import some stuff with extended attributes on it | |
133 | run_expect_succ "$RADOS_TOOL" -p "$POOL" import "$TDIR/expc" | |
134 | VAL=`"$RADOS_TOOL" -p "$POOL" getxattr foo "rados.toothbrush"` | |
135 | [ ${VAL} = "toothbrush" ] || die "Invalid attribute after import" | |
136 | ||
137 | # the second time, the xattrs should match, so there should be nothing to do. | |
138 | run_expect_succ "$RADOS_TOOL" -p "$POOL" import "$TDIR/expc" | |
139 | VAL=`"$RADOS_TOOL" -p "$POOL" getxattr foo "rados.toothbrush"` | |
140 | [ "${VAL}" = "toothbrush" ] || die "Invalid attribute after second import" | |
141 | ||
142 | # Now try with --no-overwrite option after changing an attribute | |
143 | run_expect_succ "$RADOS_TOOL" -p "$POOL" setxattr foo "rados.toothbrush" "dentist" | |
144 | run_expect_succ "$RADOS_TOOL" -p "$POOL" import --no-overwrite "$TDIR/expc" | |
145 | VAL=`"$RADOS_TOOL" -p "$POOL" getxattr foo "rados.toothbrush"` | |
146 | [ "${VAL}" = "dentist" ] || die "Invalid attribute after second import" | |
147 | ||
148 | # now force it to copy everything | |
149 | run_expect_succ "$RADOS_TOOL" -p "$POOL" import "$TDIR/expc" | |
150 | VAL=`"$RADOS_TOOL" -p "$POOL" getxattr foo "rados.toothbrush"` | |
151 | [ "${VAL}" = "toothbrush" ] || die "Invalid attribute after second import" | |
152 | ||
153 | # test copy pool | |
154 | run "$RADOS_TOOL" rmpool "$POOL" "$POOL" --yes-i-really-really-mean-it | |
155 | run "$RADOS_TOOL" rmpool "$POOL_CP_TARGET" "$POOL_CP_TARGET" --yes-i-really-really-mean-it | |
156 | run_expect_succ "$RADOS_TOOL" mkpool "$POOL" | |
157 | run_expect_succ "$RADOS_TOOL" mkpool "$POOL_CP_TARGET" | |
158 | ||
159 | # create src files | |
160 | mkdir -p "$TDIR/dir_cp_src" | |
161 | for i in `seq 1 5`; do | |
162 | fname="$TDIR/dir_cp_src/f.$i" | |
163 | objname="f.$i" | |
164 | dd if=/dev/urandom of="$fname" bs=$((1024*1024)) count=$i | |
165 | run_expect_succ "$RADOS_TOOL" -p "$POOL" put $objname "$fname" | |
166 | ||
167 | # a few random attrs | |
168 | for j in `seq 1 4`; do | |
169 | rand_str=`dd if=/dev/urandom bs=4 count=1 | hexdump -x` | |
170 | run_expect_succ "$RADOS_TOOL" -p "$POOL" setxattr $objname attr.$j "$rand_str" | |
171 | run_expect_succ --tee "$fname.attr.$j" "$RADOS_TOOL" -p "$POOL" getxattr $objname attr.$j | |
172 | done | |
173 | ||
174 | rand_str=`dd if=/dev/urandom bs=4 count=1 | hexdump -x` | |
175 | run_expect_succ "$RADOS_TOOL" -p "$POOL" setomapheader $objname "$rand_str" | |
176 | run_expect_succ --tee "$fname.omap.header" "$RADOS_TOOL" -p "$POOL" getomapheader $objname | |
177 | ||
178 | # a few random omap keys | |
179 | for j in `seq 1 4`; do | |
180 | rand_str=`dd if=/dev/urandom bs=4 count=1 | hexdump -x` | |
181 | run_expect_succ "$RADOS_TOOL" -p "$POOL" setomapval $objname key.$j "$rand_str" | |
182 | done | |
183 | run_expect_succ --tee "$fname.omap.vals" "$RADOS_TOOL" -p "$POOL" listomapvals $objname | |
184 | done | |
185 | ||
186 | run_expect_succ "$RADOS_TOOL" cppool "$POOL" "$POOL_CP_TARGET" | |
187 | ||
188 | mkdir -p "$TDIR/dir_cp_dst" | |
189 | for i in `seq 1 5`; do | |
190 | fname="$TDIR/dir_cp_dst/f.$i" | |
191 | objname="f.$i" | |
192 | run_expect_succ "$RADOS_TOOL" -p "$POOL_CP_TARGET" get $objname "$fname" | |
193 | ||
194 | # a few random attrs | |
195 | for j in `seq 1 4`; do | |
196 | run_expect_succ --tee "$fname.attr.$j" "$RADOS_TOOL" -p "$POOL_CP_TARGET" getxattr $objname attr.$j | |
197 | done | |
198 | ||
199 | run_expect_succ --tee "$fname.omap.header" "$RADOS_TOOL" -p "$POOL_CP_TARGET" getomapheader $objname | |
200 | run_expect_succ --tee "$fname.omap.vals" "$RADOS_TOOL" -p "$POOL_CP_TARGET" listomapvals $objname | |
201 | done | |
202 | ||
203 | diff -q -r "$TDIR/dir_cp_src" "$TDIR/dir_cp_dst" \ | |
204 | || die "copy pool validation failed!" | |
205 | ||
206 | for opt in \ | |
207 | block-size \ | |
208 | concurrent-ios \ | |
209 | min-object-size \ | |
210 | max-object-size \ | |
211 | min-op-len \ | |
212 | max-op-len \ | |
213 | max-ops \ | |
214 | max-backlog \ | |
215 | target-throughput \ | |
216 | read-percent \ | |
217 | num-objects \ | |
218 | run-length \ | |
219 | ; do | |
220 | run_expect_succ "$RADOS_TOOL" --$opt 4 df | |
221 | run_expect_fail "$RADOS_TOOL" --$opt 4k df | |
222 | done | |
223 | ||
224 | run_expect_succ "$RADOS_TOOL" lock list f.1 --lock-duration 4 --pool "$POOL" | |
225 | echo # previous command doesn't output an end of line: issue #9735 | |
226 | run_expect_fail "$RADOS_TOOL" lock list f.1 --lock-duration 4k --pool "$POOL" | |
227 | ||
228 | run_expect_succ "$RADOS_TOOL" mksnap snap1 --pool "$POOL" | |
229 | snapid=$("$RADOS_TOOL" lssnap --pool "$POOL" | grep snap1 | cut -f1) | |
230 | [ $? -ne 0 ] && die "expected success, but got failure! cmd: \"$RADOS_TOOL\" lssnap --pool \"$POOL\" | grep snap1 | cut -f1" | |
231 | run_expect_succ "$RADOS_TOOL" ls --pool "$POOL" --snapid="$snapid" | |
232 | run_expect_fail "$RADOS_TOOL" ls --pool "$POOL" --snapid="$snapid"k | |
233 | ||
234 | run_expect_succ "$RADOS_TOOL" chown 1 --pool "$POOL" | |
235 | run_expect_fail "$RADOS_TOOL" chown 1k --pool "$POOL" | |
236 | ||
237 | run_expect_succ "$RADOS_TOOL" truncate f.1 0 --pool "$POOL" | |
238 | run_expect_fail "$RADOS_TOOL" truncate f.1 0k --pool "$POOL" | |
239 | ||
240 | run "$RADOS_TOOL" rmpool delete_me_mkpool_test delete_me_mkpool_test --yes-i-really-really-mean-it | |
241 | run_expect_succ "$RADOS_TOOL" mkpool delete_me_mkpool_test 0 0 | |
242 | run_expect_fail "$RADOS_TOOL" mkpool delete_me_mkpool_test2 0k 0 | |
243 | run_expect_fail "$RADOS_TOOL" mkpool delete_me_mkpool_test3 0 0k | |
244 | ||
245 | run_expect_succ "$RADOS_TOOL" --pool "$POOL" bench 1 write | |
246 | run_expect_fail "$RADOS_TOOL" --pool "$POOL" bench 1k write | |
247 | run_expect_succ "$RADOS_TOOL" --pool "$POOL" bench 1 write --format json --output "$TDIR/bench.json" | |
248 | run_expect_fail "$RADOS_TOOL" --pool "$POOL" bench 1 write --output "$TDIR/bench.json" | |
249 | run_expect_succ "$RADOS_TOOL" --pool "$POOL" bench 5 write --format json --no-cleanup | |
250 | run_expect_succ "$RADOS_TOOL" --pool "$POOL" bench 1 rand --format json | |
251 | run_expect_succ "$RADOS_TOOL" --pool "$POOL" bench 1 seq --format json | |
252 | run_expect_succ "$RADOS_TOOL" --pool "$POOL" bench 5 write --write-omap | |
253 | run_expect_succ "$RADOS_TOOL" --pool "$POOL" bench 5 write --write-object | |
254 | run_expect_succ "$RADOS_TOOL" --pool "$POOL" bench 5 write --write-xattr | |
255 | run_expect_succ "$RADOS_TOOL" --pool "$POOL" bench 5 write --write-xattr --write-object | |
256 | run_expect_succ "$RADOS_TOOL" --pool "$POOL" bench 5 write --write-xattr --write-omap | |
257 | run_expect_succ "$RADOS_TOOL" --pool "$POOL" bench 5 write --write-omap --write-object | |
258 | run_expect_succ "$RADOS_TOOL" --pool "$POOL" bench 5 write --write-xattr --write-omap --write-object | |
259 | run_expect_fail "$RADOS_TOOL" --pool "$POOL" bench 5 read --write-omap | |
260 | run_expect_fail "$RADOS_TOOL" --pool "$POOL" bench 5 read --write-object | |
261 | run_expect_fail "$RADOS_TOOL" --pool "$POOL" bench 5 read --write-xattr | |
262 | run_expect_fail "$RADOS_TOOL" --pool "$POOL" bench 5 read --write-xattr --write-object | |
263 | run_expect_fail "$RADOS_TOOL" --pool "$POOL" bench 5 read --write-xattr --write-omap | |
264 | run_expect_fail "$RADOS_TOOL" --pool "$POOL" bench 5 read --write-omap --write-object | |
265 | run_expect_fail "$RADOS_TOOL" --pool "$POOL" bench 5 read --write-xattr --write-omap --write-object | |
266 | ||
267 | for i in $("$RADOS_TOOL" --pool "$POOL" ls | grep "benchmark_data"); do | |
268 | "$RADOS_TOOL" --pool "$POOL" truncate $i 0 | |
269 | done | |
270 | ||
271 | run_expect_nosignal "$RADOS_TOOL" --pool "$POOL" bench 1 rand | |
272 | run_expect_nosignal "$RADOS_TOOL" --pool "$POOL" bench 1 seq | |
273 | ||
274 | set -e | |
275 | ||
276 | OBJ=test_rados_obj | |
277 | ||
278 | expect_false() | |
279 | { | |
280 | if "$@"; then return 1; else return 0; fi | |
281 | } | |
282 | ||
283 | cleanup() { | |
284 | $RADOS_TOOL -p $POOL rm $OBJ > /dev/null 2>&1 || true | |
285 | $RADOS_TOOL -p $POOL_EC rm $OBJ > /dev/null 2>&1 || true | |
286 | } | |
287 | ||
288 | test_omap() { | |
289 | cleanup | |
290 | for i in $(seq 1 1 10) | |
291 | do | |
292 | if [ $(($i % 2)) -eq 0 ]; then | |
293 | $RADOS_TOOL -p $POOL setomapval $OBJ $i $i | |
294 | else | |
295 | echo -n "$i" | $RADOS_TOOL -p $POOL setomapval $OBJ $i | |
296 | fi | |
297 | $RADOS_TOOL -p $POOL getomapval $OBJ $i | grep -q "|$i|\$" | |
298 | done | |
299 | $RADOS_TOOL -p $POOL listomapvals $OBJ | grep -c value | grep 10 | |
300 | for i in $(seq 1 1 5) | |
301 | do | |
302 | $RADOS_TOOL -p $POOL rmomapkey $OBJ $i | |
303 | done | |
304 | $RADOS_TOOL -p $POOL listomapvals $OBJ | grep -c value | grep 5 | |
305 | cleanup | |
306 | ||
307 | for i in $(seq 1 1 10) | |
308 | do | |
309 | dd if=/dev/urandom bs=128 count=1 > $TDIR/omap_key | |
310 | if [ $(($i % 2)) -eq 0 ]; then | |
311 | $RADOS_TOOL -p $POOL --omap-key-file $TDIR/omap_key setomapval $OBJ $i | |
312 | else | |
313 | echo -n "$i" | $RADOS_TOOL -p $POOL --omap-key-file $TDIR/omap_key setomapval $OBJ | |
314 | fi | |
315 | $RADOS_TOOL -p $POOL --omap-key-file $TDIR/omap_key getomapval $OBJ | grep -q "|$i|\$" | |
316 | $RADOS_TOOL -p $POOL --omap-key-file $TDIR/omap_key rmomapkey $OBJ | |
317 | $RADOS_TOOL -p $POOL listomapvals $OBJ | grep -c value | grep 0 | |
318 | done | |
319 | cleanup | |
320 | } | |
321 | ||
322 | test_xattr() { | |
323 | cleanup | |
324 | $RADOS_TOOL -p $POOL put $OBJ /etc/passwd | |
325 | V1=`mktemp fooattrXXXXXXX` | |
326 | V2=`mktemp fooattrXXXXXXX` | |
327 | echo -n fooval > $V1 | |
328 | expect_false $RADOS_TOOL -p $POOL setxattr $OBJ 2>/dev/null | |
329 | expect_false $RADOS_TOOL -p $POOL setxattr $OBJ foo fooval extraarg 2>/dev/null | |
330 | $RADOS_TOOL -p $POOL setxattr $OBJ foo fooval | |
331 | $RADOS_TOOL -p $POOL getxattr $OBJ foo > $V2 | |
332 | cmp $V1 $V2 | |
333 | cat $V1 | $RADOS_TOOL -p $POOL setxattr $OBJ bar | |
334 | $RADOS_TOOL -p $POOL getxattr $OBJ bar > $V2 | |
335 | cmp $V1 $V2 | |
336 | $RADOS_TOOL -p $POOL listxattr $OBJ > $V1 | |
337 | grep -q foo $V1 | |
338 | grep -q bar $V1 | |
339 | [ `cat $V1 | wc -l` -eq 2 ] | |
340 | rm $V1 $V2 | |
341 | cleanup | |
342 | } | |
343 | test_rmobj() { | |
344 | p=`uuidgen` | |
345 | $CEPH_TOOL osd pool create $p 1 | |
346 | $CEPH_TOOL osd pool set-quota $p max_objects 1 | |
347 | V1=`mktemp fooattrXXXXXXX` | |
348 | $RADOS_TOOL put $OBJ $V1 -p $p | |
349 | while ! $CEPH_TOOL osd dump | grep 'full max_objects' | |
350 | do | |
351 | sleep 2 | |
352 | done | |
353 | $RADOS_TOOL -p $p rm $OBJ --force-full | |
354 | $RADOS_TOOL rmpool $p $p --yes-i-really-really-mean-it | |
355 | rm $V1 | |
356 | } | |
357 | ||
358 | test_ls() { | |
359 | echo "Testing rados ls command" | |
360 | p=`uuidgen` | |
361 | $CEPH_TOOL osd pool create $p 1 | |
362 | NS=10 | |
363 | OBJS=20 | |
364 | # Include default namespace (0) in the total | |
365 | TOTAL=$(expr $OBJS \* $(expr $NS + 1)) | |
366 | ||
367 | for nsnum in `seq 0 $NS` | |
368 | do | |
369 | for onum in `seq 1 $OBJS` | |
370 | do | |
371 | if [ "$nsnum" = "0" ]; | |
372 | then | |
373 | "$RADOS_TOOL" -p $p put obj${onum} /etc/fstab 2> /dev/null | |
374 | else | |
375 | "$RADOS_TOOL" -p $p -N "NS${nsnum}" put obj${onum} /etc/fstab 2> /dev/null | |
376 | fi | |
377 | done | |
378 | done | |
379 | CHECK=$("$RADOS_TOOL" -p $p ls 2> /dev/null | wc -l) | |
380 | if [ "$OBJS" -ne "$CHECK" ]; | |
381 | then | |
382 | die "Created $OBJS objects in default namespace but saw $CHECK" | |
383 | fi | |
384 | TESTNS=NS${NS} | |
385 | CHECK=$("$RADOS_TOOL" -p $p -N $TESTNS ls 2> /dev/null | wc -l) | |
386 | if [ "$OBJS" -ne "$CHECK" ]; | |
387 | then | |
388 | die "Created $OBJS objects in $TESTNS namespace but saw $CHECK" | |
389 | fi | |
390 | CHECK=$("$RADOS_TOOL" -p $p --all ls 2> /dev/null | wc -l) | |
391 | if [ "$TOTAL" -ne "$CHECK" ]; | |
392 | then | |
393 | die "Created $TOTAL objects but saw $CHECK" | |
394 | fi | |
395 | ||
396 | $RADOS_TOOL rmpool $p $p --yes-i-really-really-mean-it | |
397 | } | |
398 | ||
399 | test_cleanup() { | |
400 | echo "Testing rados cleanup command" | |
401 | p=`uuidgen` | |
402 | $CEPH_TOOL osd pool create $p 1 | |
403 | NS=5 | |
404 | OBJS=4 | |
405 | # Include default namespace (0) in the total | |
406 | TOTAL=$(expr $OBJS \* $(expr $NS + 1)) | |
407 | ||
408 | for nsnum in `seq 0 $NS` | |
409 | do | |
410 | for onum in `seq 1 $OBJS` | |
411 | do | |
412 | if [ "$nsnum" = "0" ]; | |
413 | then | |
414 | "$RADOS_TOOL" -p $p put obj${onum} /etc/fstab 2> /dev/null | |
415 | else | |
416 | "$RADOS_TOOL" -p $p -N "NS${nsnum}" put obj${onum} /etc/fstab 2> /dev/null | |
417 | fi | |
418 | done | |
419 | done | |
420 | ||
421 | $RADOS_TOOL -p $p --all ls > $TDIR/before.ls.out 2> /dev/null | |
422 | ||
423 | $RADOS_TOOL -p $p bench 3 write --no-cleanup 2> /dev/null | |
424 | $RADOS_TOOL -p $p -N NS1 bench 3 write --no-cleanup 2> /dev/null | |
425 | $RADOS_TOOL -p $p -N NS2 bench 3 write --no-cleanup 2> /dev/null | |
426 | $RADOS_TOOL -p $p -N NS3 bench 3 write --no-cleanup 2> /dev/null | |
427 | # Leave dangling objects without a benchmark_last_metadata in NS4 | |
428 | expect_false timeout 3 $RADOS_TOOL -p $p -N NS4 bench 30 write --no-cleanup 2> /dev/null | |
429 | $RADOS_TOOL -p $p -N NS5 bench 3 write --no-cleanup 2> /dev/null | |
430 | ||
431 | $RADOS_TOOL -p $p -N NS3 cleanup 2> /dev/null | |
432 | #echo "Check NS3 after specific cleanup" | |
433 | CHECK=$($RADOS_TOOL -p $p -N NS3 ls | wc -l) | |
434 | if [ "$OBJS" -ne "$CHECK" ] ; | |
435 | then | |
436 | die "Expected $OBJS objects in NS3 but saw $CHECK" | |
437 | fi | |
438 | ||
439 | #echo "Try to cleanup all" | |
440 | $RADOS_TOOL -p $p --all cleanup | |
441 | #echo "Check all namespaces" | |
442 | $RADOS_TOOL -p $p --all ls > $TDIR/after.ls.out 2> /dev/null | |
443 | CHECK=$(cat $TDIR/after.ls.out | wc -l) | |
444 | if [ "$TOTAL" -ne "$CHECK" ]; | |
445 | then | |
446 | die "Expected $TOTAL objects but saw $CHECK" | |
447 | fi | |
448 | if ! diff $TDIR/before.ls.out $TDIR/after.ls.out | |
449 | then | |
450 | die "Different objects found after cleanup" | |
451 | fi | |
452 | ||
453 | set +e | |
454 | run_expect_fail $RADOS_TOOL -p $p cleanup --prefix illegal_prefix | |
455 | run_expect_succ $RADOS_TOOL -p $p cleanup --prefix benchmark_data_otherhost | |
456 | set -e | |
457 | ||
458 | $RADOS_TOOL rmpool $p $p --yes-i-really-really-mean-it | |
459 | } | |
460 | ||
461 | function test_append() | |
462 | { | |
463 | cleanup | |
464 | ||
465 | # create object | |
466 | touch ./rados_append_null | |
467 | $RADOS_TOOL -p $POOL append $OBJ ./rados_append_null | |
468 | $RADOS_TOOL -p $POOL get $OBJ ./rados_append_0_out | |
469 | cmp ./rados_append_null ./rados_append_0_out | |
470 | ||
471 | # append 4k, total size 4k | |
472 | dd if=/dev/zero of=./rados_append_4k bs=4k count=1 | |
473 | $RADOS_TOOL -p $POOL append $OBJ ./rados_append_4k | |
474 | $RADOS_TOOL -p $POOL get $OBJ ./rados_append_4k_out | |
475 | cmp ./rados_append_4k ./rados_append_4k_out | |
476 | ||
477 | # append 4k, total size 8k | |
478 | $RADOS_TOOL -p $POOL append $OBJ ./rados_append_4k | |
479 | $RADOS_TOOL -p $POOL get $OBJ ./rados_append_4k_out | |
480 | read_size=`ls -l ./rados_append_4k_out | awk -F ' ' '{print $5}'` | |
481 | if [ 8192 -ne $read_size ]; | |
482 | then | |
483 | die "Append failed expecting 8192 read $read_size" | |
484 | fi | |
485 | ||
486 | # append 10M, total size 10493952 | |
487 | dd if=/dev/zero of=./rados_append_10m bs=10M count=1 | |
488 | $RADOS_TOOL -p $POOL append $OBJ ./rados_append_10m | |
489 | $RADOS_TOOL -p $POOL get $OBJ ./rados_append_10m_out | |
490 | read_size=`ls -l ./rados_append_10m_out | awk -F ' ' '{print $5}'` | |
491 | if [ 10493952 -ne $read_size ]; | |
492 | then | |
493 | die "Append failed expecting 10493952 read $read_size" | |
494 | fi | |
495 | ||
496 | # cleanup | |
497 | cleanup | |
498 | ||
499 | # create object | |
500 | $RADOS_TOOL -p $POOL_EC append $OBJ ./rados_append_null | |
501 | $RADOS_TOOL -p $POOL_EC get $OBJ ./rados_append_0_out | |
502 | cmp rados_append_null rados_append_0_out | |
503 | ||
504 | # append 4k, total size 4k | |
505 | $RADOS_TOOL -p $POOL_EC append $OBJ ./rados_append_4k | |
506 | $RADOS_TOOL -p $POOL_EC get $OBJ ./rados_append_4k_out | |
507 | cmp rados_append_4k rados_append_4k_out | |
508 | ||
509 | # append 4k, total size 8k | |
510 | $RADOS_TOOL -p $POOL_EC append $OBJ ./rados_append_4k | |
511 | $RADOS_TOOL -p $POOL_EC get $OBJ ./rados_append_4k_out | |
512 | read_size=`ls -l ./rados_append_4k_out | awk -F ' ' '{print $5}'` | |
513 | if [ 8192 -ne $read_size ]; | |
514 | then | |
515 | die "Append failed expecting 8192 read $read_size" | |
516 | fi | |
517 | ||
518 | # append 10M, total size 10493952 | |
519 | $RADOS_TOOL -p $POOL_EC append $OBJ ./rados_append_10m | |
520 | $RADOS_TOOL -p $POOL_EC get $OBJ ./rados_append_10m_out | |
521 | read_size=`ls -l ./rados_append_10m_out | awk -F ' ' '{print $5}'` | |
522 | if [ 10493952 -ne $read_size ]; | |
523 | then | |
524 | die "Append failed expecting 10493952 read $read_size" | |
525 | fi | |
526 | ||
527 | cleanup | |
528 | rm -rf ./rados_append_null ./rados_append_0_out | |
529 | rm -rf ./rados_append_4k ./rados_append_4k_out ./rados_append_10m ./rados_append_10m_out | |
530 | } | |
531 | ||
532 | function test_put() | |
533 | { | |
534 | # rados put test: | |
535 | cleanup | |
536 | ||
537 | # create file in local fs | |
538 | dd if=/dev/urandom of=rados_object_10k bs=1K count=10 | |
539 | ||
540 | # test put command | |
541 | $RADOS_TOOL -p $POOL put $OBJ ./rados_object_10k | |
542 | $RADOS_TOOL -p $POOL get $OBJ ./rados_object_10k_out | |
543 | cmp ./rados_object_10k ./rados_object_10k_out | |
544 | cleanup | |
545 | ||
546 | # test put command with offset 0 | |
547 | $RADOS_TOOL -p $POOL put $OBJ ./rados_object_10k --offset 0 | |
548 | $RADOS_TOOL -p $POOL get $OBJ ./rados_object_offset_0_out | |
549 | cmp ./rados_object_10k ./rados_object_offset_0_out | |
550 | cleanup | |
551 | ||
552 | # test put command with offset 1000 | |
553 | $RADOS_TOOL -p $POOL put $OBJ ./rados_object_10k --offset 1000 | |
554 | $RADOS_TOOL -p $POOL get $OBJ ./rados_object_offset_1000_out | |
555 | cmp ./rados_object_10k ./rados_object_offset_1000_out 0 1000 | |
556 | cleanup | |
557 | ||
558 | rm -rf ./rados_object_10k ./rados_object_10k_out ./rados_object_offset_0_out ./rados_object_offset_1000_out | |
559 | } | |
560 | ||
561 | test_xattr | |
562 | test_omap | |
563 | test_rmobj | |
564 | test_ls | |
565 | test_cleanup | |
566 | test_append | |
567 | test_put | |
568 | ||
569 | # clean up environment, delete pool | |
570 | $CEPH_TOOL osd pool delete $POOL $POOL --yes-i-really-really-mean-it | |
571 | $CEPH_TOOL osd pool delete $POOL_EC $POOL_EC --yes-i-really-really-mean-it | |
572 | $CEPH_TOOL osd pool delete $POOL_CP_TARGET $POOL_CP_TARGET --yes-i-really-really-mean-it | |
573 | ||
574 | echo "SUCCESS!" | |
575 | exit 0 |