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