diff options
author | Florian Westphal <fw@strlen.de> | 2015-09-17 23:23:25 +0200 |
---|---|---|
committer | Florian Westphal <fw@strlen.de> | 2015-09-18 00:00:24 +0200 |
commit | c02107ef4e0fa49e5e57bfc8fb4e2b83654e8c68 (patch) | |
tree | 55d2dde0102a384f8a1c66a71aebc320a677a71b /tests | |
parent | 7658a537449bdad1e9c101abfb70556511ee204d (diff) |
tests: don't depend on set element order
Pablo reported test failures because the order of returned set entries
is not deterministic.
This sorts set elements before comparision.
Patrick suggested to move ordering into libnftnl (since we could f.e.
also get duplicate entries due to how netlink dumps work), but thats a bit
more work. Hence this quick workaround.
Reported-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/regression/any/ct.t.payload | 2 | ||||
-rwxr-xr-x | tests/regression/nft-test.py | 29 |
2 files changed, 30 insertions, 1 deletions
diff --git a/tests/regression/any/ct.t.payload b/tests/regression/any/ct.t.payload index 2e7c1ff7..2bebaccd 100644 --- a/tests/regression/any/ct.t.payload +++ b/tests/regression/any/ct.t.payload @@ -267,7 +267,7 @@ ip test-ip4 output # ct state . ct mark vmap { new . 0x12345678 : drop} map%d test-ip4 b map%d test-ip4 0 - element 00000008 12345678 : 0 [end] + element 00000008 12345678 : 0 [end] ip test-ip4 output [ ct load state => reg 1 ] [ ct load mark => reg 9 ] diff --git a/tests/regression/nft-test.py b/tests/regression/nft-test.py index 8168203b..d2fbe458 100755 --- a/tests/regression/nft-test.py +++ b/tests/regression/nft-test.py @@ -424,6 +424,32 @@ def output_clean(pre_output, chain): return "" return rule +def payload_check_elems_to_set(elems): + newset = set() + + for n, line in enumerate(elems.split('[end]')): + e = line.strip() + if e in newset: + print_error("duplicate", e, n) + return newset + + newset.add(e) + + return newset + +def payload_check_set_elems(want, got): + + if want.find('element') < 0 or want.find('[end]') < 0: + return 0 + + if got.find('element') < 0 or got.find('[end]') < 0: + return 0 + + set_want = payload_check_elems_to_set(want) + set_got = payload_check_elems_to_set(got) + + return set_want == set_got + def payload_check(payload_buffer, file, cmd): file.seek(0, 0) @@ -443,6 +469,9 @@ def payload_check(payload_buffer, file, cmd): if want_line.find(']') < 0 and line.find(']') < 0: continue + if payload_check_set_elems(want_line, line): + continue + print_differences_warning(file.name, lineno, want_line.strip(), line.strip(), cmd); return 0 |