blob: e21ed6880bc1394eb8719ce153201fac494f2345 (
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
|
#!/bin/bash
cd $(dirname $0)
testdir=$(mktemp -d)
if [ ! -d $testdir ]; then
echo "Failed to create test directory" >&2
exit 0
fi
trap "rm -rf $testdir" EXIT
nft=../../src/nft
mydiff() {
diff -w -I '^# ' "$@"
}
command_file=$(mktemp -p $testdir)
output_file=$(mktemp -p $testdir)
cmd_append() {
echo "$*" >>$command_file
}
output_append() {
echo "$*" >>$output_file
}
run_test() {
monitor_output=$(mktemp -p $testdir)
$nft monitor >$monitor_output &
monitor_pid=$!
sleep 0.5
$nft -f $command_file || {
echo "nft command failed!"
kill $monitor_pid
wait >/dev/null 2>&1
exit 1
}
sleep 0.5
kill $monitor_pid
wait >/dev/null 2>&1
if ! mydiff -q $monitor_output $output_file >/dev/null 2>&1; then
echo "monitor output differs!"
mydiff -u $output_file $monitor_output
exit 1
fi
rm $command_file
rm $output_file
touch $command_file
touch $output_file
}
for testcase in testcases/*.t; do
echo "running tests from file $(basename $testcase)"
# files are like this:
#
# I add table ip t
# O add table ip t
# I add chain ip t c
# O add chain ip t c
$nft flush ruleset
input_complete=false
while read dir line; do
case $dir in
I)
$input_complete && run_test
input_complete=false
cmd_append "$line"
;;
O)
input_complete=true
output_append "$line"
;;
'#'|'')
# ignore comments and empty lines
;;
esac
done <$testcase
$input_complete && run_test
done
|