File: unit.sh

package info (click to toggle)
ctdb 2.5.4%2Bdebian0-4
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 6,084 kB
  • sloc: ansic: 53,406; sh: 18,954; xml: 6,545; python: 1,217; makefile: 443; perl: 228
file content (141 lines) | stat: -rw-r--r-- 2,606 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# Hey Emacs, this is a -*- shell-script -*- !!!  :-)

. "${TEST_SCRIPTS_DIR}/common.sh"

# Common variables and functions for CTDB unit tests.

# Set the required result for a test.
# - Argument 1 is exit code.
# - Argument 2, if present is the required test output but "--"
#   indicates empty output.
# If argument 2 is not present or null then read required test output
# from stdin.
required_result ()
{
    required_rc="${1:-0}"
    if [ -n "$2" ] ; then
	if [ "$2" = "--" ] ; then
	    required_output=""
	else
	    required_output="$2"
	fi
    else
	if ! tty -s ; then
	    required_output=$(cat)
	else
	    required_output=""
	fi
    fi
}

ok ()
{
    required_result 0 "$@"
}

ok_null ()
{
    ok --
}

result_print ()
{
    _passed="$1"
    _out="$2"
    _rc="$3"
    _extra_header="$4"

    if "$TEST_VERBOSE" || ! $_passed ; then
	if [ -n "$_extra_header" ] ; then
	    cat <<EOF

##################################################
$_extra_header
EOF
	fi

cat <<EOF
--------------------------------------------------
Output (Exit status: ${_rc}):
--------------------------------------------------
EOF
	echo "$_out" | cat $TEST_CAT_RESULTS_OPTS
    fi

    if ! $_passed ; then
	cat <<EOF
--------------------------------------------------
Required output (Exit status: ${required_rc}):
--------------------------------------------------
EOF
	echo "$required_output" | cat $TEST_CAT_RESULTS_OPTS

	if $TEST_DIFF_RESULTS ; then
	    _outr=$(mktemp)
	    echo "$required_output" >"$_outr"

	    _outf=$(mktemp)
	    echo "$_fout" >"$_outf"

	    cat <<EOF
--------------------------------------------------
Diff:
--------------------------------------------------
EOF
	    diff -u "$_outr" "$_outf" | cat -A
	    rm "$_outr" "$_outf"
	fi
    fi
}

result_footer ()
{
    _passed="$1"
    _extra_footer="$2"

    if "$TEST_VERBOSE" || ! $_passed ; then
	if [ -n "$_extra_footer" ] ; then
	    cat <<EOF
--------------------------------------------------
$_extra_footer
--------------------------------------------------
EOF
	fi
    fi

    if $_passed ; then
	echo "PASSED"
	return 0
    else
	echo
	echo "FAILED"
	return 1
    fi
}

result_check ()
{
    _rc=$?

    _extra_header="$1"

    if [ -n "$OUT_FILTER" ] ; then
	_fout=$(echo "$_out" | eval sed -r $OUT_FILTER)
    else
	_fout="$_out"
    fi

    if [ "$_fout" = "$required_output" -a $_rc = $required_rc ] ; then
	_passed=true
    else
	_passed=false
    fi

    result_print "$_passed" "$_out" "$_rc" "$_extra_header"
    result_footer "$_passed"
}

local="${TEST_SUBDIR}/scripts/local.sh"
if [ -r "$local" ] ; then
    . "$local"
fi