]> git.proxmox.com Git - ceph.git/blob - ceph/qa/workunits/rados/test_rados_tool.sh
update sources to v12.1.1
[ceph.git] / ceph / qa / workunits / rados / test_rados_tool.sh
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"
90 run_expect_succ "$CEPH_TOOL" osd erasure-code-profile set myprofile k=2 m=1 stripe_unit=2K crush-failure-domain=osd --force
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