Test two tinc daemons using network namespaces.
Testing multiple daemons connecting to each other on the same computer is usually difficult, because connections to local IP addresses will bypass most of the network stack. However, recent versions of Linux support network namespaces, which can isolate network interfaces. We use this to isolate the virtual interface of the daemons from each other, so we get the behaviour as if the daemons were each running on their own machine. This can also be used for more complicated tests (including those with firewall rules) without disturbing the real network setup of the host computer.
This commit is contained in:
parent
38adc8bf54
commit
fa1e9b0461
2 changed files with 71 additions and 0 deletions
|
@ -4,6 +4,7 @@ TESTS = \
|
|||
executables.test \
|
||||
import-export.test \
|
||||
invite-join.test \
|
||||
ns-ping.test \
|
||||
ping.test \
|
||||
sptps-basic.test \
|
||||
variables.test
|
||||
|
|
70
test/ns-ping.test
Executable file
70
test/ns-ping.test
Executable file
|
@ -0,0 +1,70 @@
|
|||
#!/bin/sh
|
||||
|
||||
. ./testlib.sh
|
||||
|
||||
# Skip this test if we aren't root or if "ip netns" does not exist
|
||||
|
||||
test "`id -u`" = "0" || exit 77
|
||||
ip netns list || exit 77
|
||||
|
||||
# Initialize two nodes
|
||||
|
||||
$tinc $c1 <<EOF
|
||||
init foo
|
||||
set Mode switch
|
||||
set Interface ping.test1
|
||||
set Port 32573
|
||||
set Address localhost
|
||||
EOF
|
||||
|
||||
cat >$d1/tinc-up <<EOF
|
||||
#!/bin/sh
|
||||
ip netns add ping.test1
|
||||
ip link set dev \$INTERFACE netns ping.test1
|
||||
ip netns exec ping.test1 ip addr add 192.168.1.1/24 dev \$INTERFACE
|
||||
ip netns exec ping.test1 ip link set \$INTERFACE up
|
||||
EOF
|
||||
|
||||
$tinc $c2 <<EOF
|
||||
init bar
|
||||
set Mode switch
|
||||
set Interface ping.test2
|
||||
set Port 32574
|
||||
EOF
|
||||
|
||||
cat >$d2/tinc-up <<EOF
|
||||
#!/bin/sh
|
||||
ip netns add ping.test2
|
||||
ip link set dev \$INTERFACE netns ping.test2
|
||||
ip netns exec ping.test2 ip addr add 192.168.1.2/24 dev \$INTERFACE
|
||||
ip netns exec ping.test2 ip link set \$INTERFACE up
|
||||
EOF
|
||||
|
||||
# Exchange configuration files
|
||||
|
||||
$tinc $c1 export | $tinc $c2 exchange | $tinc $c1 import
|
||||
|
||||
# Start tinc
|
||||
|
||||
$tinc $c1 start $r1
|
||||
$tinc $c2 start $r2
|
||||
|
||||
sleep 1
|
||||
|
||||
# The nodes should not be able to ping each other if there is no connection
|
||||
|
||||
ip netns exec ping.test1 ping -W1 -c3 192.168.1.2 && exit 1
|
||||
|
||||
# After connecting they should be
|
||||
|
||||
$tinc $c2 add ConnectTo foo
|
||||
sleep 1
|
||||
|
||||
ip netns exec ping.test1 ping -W1 -c3 192.168.1.2
|
||||
|
||||
# Clean up
|
||||
|
||||
$tinc $c2 stop
|
||||
$tinc $c1 stop
|
||||
ip netns del ping.test2
|
||||
ip netns del ping.test1
|
Loading…
Reference in a new issue