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/regression/nft-test.py | |
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/regression/nft-test.py')
-rwxr-xr-x | tests/regression/nft-test.py | 29 |
1 files changed, 29 insertions, 0 deletions
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 |