blob: cf5cbdc30cf942579b0b100dca3a171cbbd11e65 (
plain)
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
|
#!/bin/bash
#configuration
TESTDIR="./$(dirname $0)/"
RETURNCODE_SEPARATOR="_"
XTABLES_MULTI="$(dirname $0)/../../xtables-multi"
DIFF=$(which diff)
msg_error() {
echo "E: $1 ..." >&2
exit 1
}
msg_warn() {
echo "W: $1" >&2
}
msg_info() {
echo "I: $1"
}
if [ "$(id -u)" != "0" ] ; then
msg_error "this requires root!"
fi
[ -z "$IPTABLES" ] && IPTABLES=$XTABLES_MULTI
if [ ! -x "$IPTABLES" ] ; then
msg_error "no xtables-multi binary!"
else
msg_info "using xtables-multi binary $IPTABLES"
fi
if [ ! -d "$TESTDIR" ] ; then
msg_error "missing testdir $TESTDIR"
fi
FIND="$(which find)"
if [ ! -x "$FIND" ] ; then
msg_error "no find binary found"
fi
MODPROBE="$(which modprobe)"
if [ ! -x "$MODPROBE" ] ; then
msg_error "no modprobe binary found"
fi
DEPMOD="$(which depmod)"
if [ ! -x "$DEPMOD" ] ; then
msg_error "no depmod binary found"
fi
if [ "$1" == "-v" ] ; then
VERBOSE=y
shift
fi
for arg in "$@"; do
if grep ^.*${RETURNCODE_SEPARATOR}[0-9]\\+$ <<< $arg >/dev/null ; then
SINGLE+=" $arg"
VERBOSE=y
else
msg_error "unknown parameter '$arg'"
fi
done
kernel_cleanup() {
for it in iptables ip6tables; do
for table in filter mangle nat raw; do
$it -t $table -nL >/dev/null 2>&1 || continue # non-existing table
$it -t $table -F # delete rules
$it -t $table -X # delete custom chains
$it -t $table -Z # zero counters
done
done
$DEPMOD -a
$MODPROBE -raq \
ip_tables iptable_nat iptable_mangle ipt_REJECT
}
find_tests() {
if [ ! -z "$SINGLE" ] ; then
echo $SINGLE
return
fi
${FIND} ${TESTDIR} -executable -regex \
.*${RETURNCODE_SEPARATOR}[0-9]+ | sort
}
echo ""
ok=0
failed=0
for testfile in $(find_tests)
do
for it in iptables ip6tables; do
kernel_cleanup
rc_spec=`echo $(basename ${testfile}) | cut -d _ -f2-`
IPTABLES="$XTABLES_MULTI $it"
msg_info "[EXECUTING] $testfile"
test_output=$(IPTABLES=$IPTABLES ${testfile} 2>&1)
rc_got=$?
echo -en "\033[1A\033[K" # clean the [EXECUTING] foobar line
if [ "$rc_got" == "$rc_spec" ] ; then
msg_info "[OK] $testfile"
[ "$VERBOSE" == "y" ] && [ ! -z "$test_output" ] && echo "$test_output"
((ok++))
else
((failed++))
if [ "$VERBOSE" == "y" ] ; then
msg_warn "[FAILED] $testfile: expected $rc_spec but got $rc_got"
[ ! -z "$test_output" ] && echo "$test_output"
else
msg_warn "[FAILED] $testfile"
fi
fi
done
done
echo ""
msg_info "results: [OK] $ok [FAILED] $failed [TOTAL] $((ok+failed))"
kernel_cleanup
exit 0
|