]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
1 | #!/usr/bin/env bash |
2 | set -e | |
7c673cae FG |
3 | |
4 | source $(dirname $0)/../detect-build-env-vars.sh | |
c07f9fc5 | 5 | source $CEPH_ROOT/qa/standalone/ceph-helpers.sh |
7c673cae FG |
6 | |
7 | dir=$1 | |
8 | ||
7c673cae FG |
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" | |
9f95a23c | 18 | while read type; do |
7c673cae FG |
19 | num=`ceph-dencoder type $type count_tests` |
20 | echo "$num $type" | |
21 | for n in `seq 1 1 $num 2>/dev/null`; do | |
7c673cae FG |
22 | |
23 | pids="" | |
94b18763 FG |
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 | |
7c673cae FG |
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 | |
94b18763 | 41 | if ceph-dencoder type "$type" is_deterministic; then |
7c673cae FG |
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" | |
9f95a23c | 57 | diff $tmp1 $tmp2 |
7c673cae FG |
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" | |
9f95a23c | 65 | diff $tmp1 $tmp2 |
7c673cae FG |
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" | |
9f95a23c | 73 | diff $tmp1 $tmp2 |
7c673cae FG |
74 | failed=$(($failed + 1)) |
75 | fi | |
76 | ||
77 | if [ $deterministic -ne 0 ]; then | |
94b18763 FG |
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" | |
7c673cae FG |
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 | |
9f95a23c | 93 | done < <(ceph-dencoder list_types) |
7c673cae FG |
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." |