Browse Source

Keep NAT probes independent of cached conntrack and DHCP timers

master
evgeny 1 day ago
parent
commit
856fbc61b1
  1. 3
      tests/stream_netns/probe.py
  2. 12
      tests/stream_netns/run.py

3
tests/stream_netns/probe.py

@ -103,7 +103,8 @@ class Probes:
for gateway in NATS:
for node in (n for n in NODES if n.nat == gateway.name):
a, b, c = public["a"], public["b"], public["c"]
before = self.exchange(c.name, gateway.ip, node.mapped_port, count=1, timeout=0.35)
outsider = next(n for n in NODES if n.country == "c" and not n.nat and n.name != c.name)
before = self.exchange(outsider.name, gateway.ip, node.mapped_port, count=1, timeout=0.35)
if before["observed"]:
raise RuntimeError(f"NAT {node.name}: incoming mapping exists before outbound traffic")
first = self.exchange(node.name, a.ip)

12
tests/stream_netns/run.py

@ -24,6 +24,16 @@ def host_snapshot():
return result
def stable_snapshot(value):
# DHCP lifetime и route cache age меняются от часов, без изменения конфигурации.
if isinstance(value, dict):
return {key: stable_snapshot(item) for key, item in value.items()
if key not in {"valid_life_time", "preferred_life_time", "expires", "used", "lastuse"}}
if isinstance(value, list):
return [stable_snapshot(item) for item in value]
return value
def inside(args):
def interrupted(signum, _frame):
raise KeyboardInterrupt(f"signal {signum}")
@ -97,7 +107,7 @@ def main():
status = child.wait()
after = host_snapshot()
(directory / "host-after.json").write_text(json.dumps(after, indent=2) + "\n")
unchanged = before == after and os.readlink("/proc/self/ns/net") == original_namespace
unchanged = stable_snapshot(before) == stable_snapshot(after) and os.readlink("/proc/self/ns/net") == original_namespace
(directory / "host-check.json").write_text(json.dumps({"unchanged": unchanged}, indent=2) + "\n")
if not unchanged:
print("FAIL: main network namespace snapshot changed during the run", file=sys.stderr)

Loading…
Cancel
Save