3 """Test legacy protocol support (tinc 1.0)."""
7 from testlib import check, cmd
8 from testlib.log import log
9 from testlib.proc import Tinc, Script
10 from testlib.test import Test
15 def init(ctx: Test) -> T.Tuple[Tinc, Tinc]:
16 """Initialize new test nodes."""
17 foo, bar = ctx.node(), ctx.node()
25 set PingTimeout {TIMEOUT}
36 set PingTimeout {TIMEOUT}
37 set MaxTimeout {TIMEOUT}
41 cmd.exchange(foo, bar)
42 bar.cmd("add", "ConnectTo", foo.name)
44 foo.add_script(bar.script_up)
45 bar.add_script(foo.script_up)
50 def run_keys_test(foo: Tinc, bar: Tinc, empty: bool) -> None:
51 """Check that EC public keys match the expected values."""
54 foo[bar.script_up].wait()
55 bar[foo.script_up].wait()
60 foo_bar, _ = foo.cmd("get", f"{bar.name}.Ed25519PublicKey", code=None)
61 log.info('got key foo/bar "%s"', foo_bar)
63 bar_foo, _ = bar.cmd("get", f"{foo.name}.Ed25519PublicKey", code=None)
64 log.info('got key bar/foo "%s"', bar_foo)
66 assert not foo_bar == empty
67 assert not bar_foo == empty
70 with Test("foo 1.1, bar 1.1") as context:
71 foo_node, bar_node = init(context)
72 run_keys_test(foo_node, bar_node, empty=False)
74 with Test("foo 1.1, bar 1.0") as context:
75 foo_node, bar_node = init(context)
76 bar_node.cmd("set", "ExperimentalProtocol", "no")
77 foo_node.cmd("del", f"{bar_node}.Ed25519PublicKey")
78 bar_node.cmd("del", f"{foo_node}.Ed25519PublicKey")
79 run_keys_test(foo_node, bar_node, empty=True)
81 with Test("bar 1.0 must not be allowed to connect") as context:
82 foo_node, bar_node = init(context)
83 bar_node.cmd("set", "ExperimentalProtocol", "no")
85 bar_up = bar_node.add_script(Script.SUBNET_UP)
89 assert not foo_node[bar_node.script_up].wait(TIMEOUT * 2)
90 check.nodes(foo_node, 1)
91 check.nodes(bar_node, 1)