summaryrefslogtreecommitdiffstats
path: root/tests/shell/testcases/owner/0002-persist
blob: 700f00ec5e5f1ab4a3dc860381e81e00174def61 (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
#!/bin/bash

# NFT_TEST_REQUIRES(NFT_TEST_HAVE_table_flag_owner)
# NFT_TEST_REQUIRES(NFT_TEST_HAVE_table_flag_persist)

die() {
	echo "$@"
	exit 1
}

$NFT -f - <<EOF
table ip t {
	flags owner, persist
}
EOF
[[ $? -eq 0 ]] || {
	die "table add failed"
}

$NFT list ruleset | grep -q 'table ip t' || {
	die "table does not persist"
}
$NFT list ruleset | grep -q 'flags persist$' || {
	die "unexpected flags in orphaned table"
}

$NFT -f - <<EOF
table ip t {
	flags owner, persist
}
EOF
[[ $? -eq 0 ]] || {
	die "retake ownership failed"
}

EXPECT="table ip t {
	flags persist
}"
diff -u <(echo "$EXPECT") <($NFT list ruleset) || {
	die "unexpected ruleset before coproc setup"
}

coproc $NFT -i
sleep 1

cat >&"${COPROC[1]}" <<EOF
add table ip t { flags owner, persist; }
EOF

COMM=$(</proc/${COPROC_PID}/comm)
EXPECT="table ip t { # progname $COMM
	flags owner,persist
}"
diff -u <(echo "$EXPECT") <($NFT list ruleset) || {
	die "unexpected ruleset after coproc setup"
}

$NFT flush ruleset
$NFT list ruleset | grep -q 'table ip t' || {
	die "flushed owned table"
}

$NFT add table 'ip t { flags owner, persist; }' && {
	die "stole owned table"
}

cat >&"${COPROC[1]}" <<EOF
delete table ip t
EOF

[[ -z $($NFT list ruleset) ]] || {
	die "owner should be able to delete the table"
}

eval "exec ${COPROC[1]}>&-"
wait $COPROC_PID


exit 0