]> git.proxmox.com Git - ceph.git/blob - ceph/src/test/encoding/check-generated.sh
d89952710f884c0d6ea1b25c394ded91a4f8c701
[ceph.git] / ceph / src / test / encoding / check-generated.sh
1 #!/usr/bin/env bash
2 set -e
3
4 source $(dirname $0)/../detect-build-env-vars.sh
5 source $CEPH_ROOT/qa/standalone/ceph-helpers.sh
6
7 dir=$1
8
9 tmp1=`mktemp /tmp/typ-XXXXXXXXX`
10 tmp2=`mktemp /tmp/typ-XXXXXXXXX`
11 tmp3=`mktemp /tmp/typ-XXXXXXXXX`
12 tmp4=`mktemp /tmp/typ-XXXXXXXXX`
13
14 failed=0
15 numtests=0
16 echo "checking ceph-dencoder generated test instances..."
17 echo "numgen type"
18 while read type; do
19 num=`ceph-dencoder type $type count_tests`
20 echo "$num $type"
21 for n in `seq 1 1 $num 2>/dev/null`; do
22
23 pids=""
24 run_in_background pids save_stdout "$tmp1" ceph-dencoder type "$type" select_test "$n" dump_json
25 run_in_background pids save_stdout "$tmp2" ceph-dencoder type "$type" select_test "$n" encode decode dump_json
26 run_in_background pids save_stdout "$tmp3" ceph-dencoder type "$type" select_test "$n" copy dump_json
27 run_in_background pids save_stdout "$tmp4" ceph-dencoder type "$type" select_test "$n" copy_ctor dump_json
28 wait_background pids
29
30 if [ $? -ne 0 ]; then
31 echo "**** $type test $n encode+decode check failed ****"
32 echo " ceph-dencoder type $type select_test $n encode decode"
33 failed=$(($failed + 3))
34 continue
35 fi
36
37 # nondeterministic classes may dump nondeterministically. compare
38 # the sorted json output. this is a weaker test, but is better
39 # than nothing.
40 deterministic=0
41 if ceph-dencoder type "$type" is_deterministic; then
42 deterministic=1
43 fi
44
45 if [ $deterministic -eq 0 ]; then
46 echo " sorting json output for nondeterministic object"
47 for f in $tmp1 $tmp2 $tmp3 $tmp4; do
48 sort $f | sed 's/,$//' > $f.new
49 mv $f.new $f
50 done
51 fi
52
53 if ! cmp $tmp1 $tmp2; then
54 echo "**** $type test $n dump_json check failed ****"
55 echo " ceph-dencoder type $type select_test $n dump_json > $tmp1"
56 echo " ceph-dencoder type $type select_test $n encode decode dump_json > $tmp2"
57 diff $tmp1 $tmp2
58 failed=$(($failed + 1))
59 fi
60
61 if ! cmp $tmp1 $tmp3; then
62 echo "**** $type test $n copy dump_json check failed ****"
63 echo " ceph-dencoder type $type select_test $n dump_json > $tmp1"
64 echo " ceph-dencoder type $type select_test $n copy dump_json > $tmp2"
65 diff $tmp1 $tmp2
66 failed=$(($failed + 1))
67 fi
68
69 if ! cmp $tmp1 $tmp4; then
70 echo "**** $type test $n copy_ctor dump_json check failed ****"
71 echo " ceph-dencoder type $type select_test $n dump_json > $tmp1"
72 echo " ceph-dencoder type $type select_test $n copy_ctor dump_json > $tmp2"
73 diff $tmp1 $tmp2
74 failed=$(($failed + 1))
75 fi
76
77 if [ $deterministic -ne 0 ]; then
78 run_in_background pids ceph-dencoder type "$type" select_test $n encode export "$tmp1"
79 run_in_background pids ceph-dencoder type "$type" select_test $n encode decode encode export "$tmp2"
80 wait_background pids
81
82 if ! cmp $tmp1 $tmp2; then
83 echo "**** $type test $n binary reencode check failed ****"
84 echo " ceph-dencoder type $type select_test $n encode export $tmp1"
85 echo " ceph-dencoder type $type select_test $n encode decode encode export $tmp2"
86 echo " cmp $tmp1 $tmp2"
87 failed=$(($failed + 1))
88 fi
89 fi
90
91 numtests=$(($numtests + 3))
92 done
93 done < <(ceph-dencoder list_types)
94
95 rm -f $tmp1 $tmp2 $tmp3 $tmp4
96
97 if [ $failed -gt 0 ]; then
98 echo "FAILED $failed / $numtests tests."
99 exit 1
100 fi
101 echo "passed $numtests tests."