Add a test for backwards compatibility with the legacy protocol.
authorGuus Sliepen <guus@tinc-vpn.org>
Sun, 9 Sep 2018 20:13:43 +0000 (22:13 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Sun, 9 Sep 2018 20:13:43 +0000 (22:13 +0200)
test/Makefile.am
test/legacy-protocol.test [new file with mode: 0755]

index 9c2f0011cba932f7d7046f06a49a74cacf426eb9..32b2e300672f5d69dcaf380d9106d5c93a6b2e13 100644 (file)
@@ -6,6 +6,7 @@ TESTS = \
        invite-join.test \
        invite-offline.test \
        invite-tinc-up.test \
+       legacy-protocol.test \
        ns-ping.test \
        scripts.test \
        security.test \
diff --git a/test/legacy-protocol.test b/test/legacy-protocol.test
new file mode 100755 (executable)
index 0000000..ce8e614
--- /dev/null
@@ -0,0 +1,79 @@
+#!/bin/sh
+
+. "${0%/*}/testlib.sh"
+
+# Initialize two nodes
+
+$tinc $c1 <<EOF
+init foo
+set DeviceType dummy
+set Port 32753
+set Address localhost
+set PingTimeout 1
+EOF
+
+$tinc $c2 <<EOF
+init bar
+set DeviceType dummy
+set Port 0
+set PingTimeout 1
+set MaxTimeout 1
+EOF
+
+# Exchange host config files
+
+$tinc $c1 export | $tinc $c2 exchange | $tinc $c1 import
+$tinc $c2 add ConnectTo foo
+
+# Foo 1.1, bar 1.0
+
+$tinc $c2 set ExperimentalProtocol no
+$tinc $c1 del bar.Ed25519PublicKey
+$tinc $c2 del foo.Ed25519PublicKey
+
+$tinc $c1 start $r1
+$tinc $c2 start $r2
+
+sleep 1
+
+test `$tinc $c1 dump reachable nodes | wc -l` = 2
+test `$tinc $c2 dump reachable nodes | wc -l` = 2
+
+$tinc $c2 stop
+$tinc $c1 stop
+
+test -z "`$tinc $c1 get bar.Ed25519PublicKey`"
+test -z "`$tinc $c2 get foo.Ed25519PublicKey`"
+
+# Foo 1.1, bar upgrades to 1.1
+
+$tinc $c2 del ExperimentalProtocol
+
+$tinc $c1 start $r1
+$tinc $c2 start $r2
+
+sleep 5
+
+test `$tinc $c1 dump reachable nodes | wc -l` = 2
+test `$tinc $c2 dump reachable nodes | wc -l` = 2
+
+$tinc $c2 stop
+$tinc $c1 stop
+
+test -n "`$tinc $c1 get bar.Ed25519PublicKey`"
+test -n "`$tinc $c2 get foo.Ed25519PublicKey`"
+
+# Bar downgrades, must no longer be allowed to connect
+
+$tinc $c2 set ExperimentalProtocol no
+
+$tinc $c1 start $r1
+$tinc $c2 start $r2
+
+sleep 1
+
+test `$tinc $c1 dump reachable nodes | wc -l` = 1
+test `$tinc $c2 dump reachable nodes | wc -l` = 1
+
+$tinc $c2 stop
+$tinc $c1 stop