. ./testlib.sh
-# Initialize server node
+echo [STEP] Initializing server node
-$tinc $c1 <<EOF
+port_foo=30040
+port_bar=30041
+
+tinc foo <<EOF
init foo
set DeviceType dummy
-set Port 32759
-set Address localhost
+set Port $port_foo
+set Address 127.0.0.1
add Subnet 10.0.0.1
add Subnet fec0::/64
EOF
-# Set up scripts
-
-OUT=$d1/scripts.out
-rm -f $OUT
-
-for script in tinc-up tinc-down host-up host-down subnet-up subnet-down hosts/foo-up hosts/foo-down hosts/bar-up hosts/bar-down invitation-created invitation-accepted; do
-cat >$d1/$script << EOF
-#!/bin/sh
-echo $script \$NETNAME,\$NAME,\$DEVICE,\$IFACE,\$NODE,\$REMOTEADDRESS,\$REMOTEPORT,\$SUBNET,\$WEIGHT,\$INVITATION_FILE,\$INVITATION_URL,\$DEBUG >>$OUT
+echo [STEP] Setting up scripts
+
+OUT=$DIR_FOO/scripts.out
+rm -f "$OUT"
+
+for script in \
+ tinc-up tinc-down \
+ host-up host-down \
+ subnet-up subnet-down \
+ hosts/foo-up hosts/foo-down \
+ hosts/bar-up hosts/bar-down \
+ invitation-created invitation-accepted; do
+
+ commands=$(
+ cat <<EOF
+ if is_windows && [ -n "\$INVITATION_FILE" ]; then
+ INVITATION_FILE=\$(cygpath --unix -- "\$INVITATION_FILE")
+ fi
+ echo >>'$OUT' "$script" "$TINC_SCRIPT_VARS"
EOF
-chmod u+x $d1/$script
+ )
+
+ create_script foo "$script" "$commands"
done
-# Start server node
+echo [STEP] Starting server node
+
+start_tinc foo -n netname
+wait_script foo subnet-up 2
+echo foo-started >>"$OUT"
+
+echo [STEP] Inviting client node
-$tinc -n netname $c1 start $r1
+url=$(tinc foo -n netname2 invite bar)
+file=$(basename "$(find "$DIR_FOO/invitations" -type f ! -name ed25519_key.priv)")
-echo foo-started >>$OUT
+if is_windows; then
+ file=$(cygpath --unix -- "$file")
+fi
-# Invite client node
+wait_script foo invitation-created
+echo bar-invited >>"$OUT"
-url=`$tinc -n netname2 $c1 invite bar`
-file=`cd $d1/invitations; ls | grep -v ed25519_key.priv`
-echo bar-invited >>$OUT
-$tinc -n netname3 $c2 join $url
-echo bar-joined >>$OUT
+echo [STEP] Joining client node
-# Start and stop client node
+tinc bar -n netname3 join "$url"
+wait_script foo invitation-accepted
+echo bar-joined >>"$OUT"
-$tinc $c2 << EOF
+echo [STEP] Starting client node
+
+tinc bar <<EOF
set DeviceType dummy
-set Port 32760
+set Port $port_bar
add Subnet 10.0.0.2
add Subnet fec0::/64#5
-start $r2
EOF
-sleep 1
-
-echo bar-started >>$OUT
-
-$tinc $c1 debug 4
-$tinc $c2 stop
-
-sleep 1
-
-echo bar-stopped >>$OUT
-
-$tinc $c1 debug 5
-$tinc $c2 start $r2
+start_tinc bar
+wait_script foo subnet-up 2
+echo bar-started-1 >>"$OUT"
-sleep 1
+tinc foo debug 4
+tinc bar stop
+wait_script foo subnet-down 2
+echo bar-stopped >>"$OUT"
-echo bar-started >>$OUT
+tinc foo debug 5
+start_tinc bar
+wait_script foo subnet-up 2
+echo bar-started-2 >>"$OUT"
-# Stop server node
+echo [STEP] Stop server node
-$tinc $c1 stop
+tinc foo stop
+tinc bar stop
+wait_script foo tinc-down
-# Check if the script output is what is expected
+echo [STEP] Check if the script output is what is expected
-cat >$OUT.expected << EOF
+cat >"$OUT.expected" <<EOF
tinc-up netname,foo,dummy,,,,,,,,,5
subnet-up netname,foo,dummy,,foo,,,10.0.0.1,,,,5
subnet-up netname,foo,dummy,,foo,,,fec0::/64,,,,5
foo-started
-invitation-created netname2,foo,,,bar,,,,,$d1/invitations/$file,$url,
+invitation-created netname2,foo,,,bar,,,,,$DIR_FOO/invitations/$file,$url,
bar-invited
invitation-accepted netname,foo,dummy,,bar,127.0.0.1,,,,,,5
bar-joined
-host-up netname,foo,dummy,,bar,127.0.0.1,32760,,,,,5
-hosts/bar-up netname,foo,dummy,,bar,127.0.0.1,32760,,,,,5
-subnet-up netname,foo,dummy,,bar,127.0.0.1,32760,10.0.0.2,,,,5
-subnet-up netname,foo,dummy,,bar,127.0.0.1,32760,fec0::/64,5,,,5
-bar-started
-host-down netname,foo,dummy,,bar,127.0.0.1,32760,,,,,4
-hosts/bar-down netname,foo,dummy,,bar,127.0.0.1,32760,,,,,4
-subnet-down netname,foo,dummy,,bar,127.0.0.1,32760,10.0.0.2,,,,4
-subnet-down netname,foo,dummy,,bar,127.0.0.1,32760,fec0::/64,5,,,4
+host-up netname,foo,dummy,,bar,127.0.0.1,$port_bar,,,,,5
+hosts/bar-up netname,foo,dummy,,bar,127.0.0.1,$port_bar,,,,,5
+subnet-up netname,foo,dummy,,bar,127.0.0.1,$port_bar,10.0.0.2,,,,5
+subnet-up netname,foo,dummy,,bar,127.0.0.1,$port_bar,fec0::/64,5,,,5
+bar-started-1
+host-down netname,foo,dummy,,bar,127.0.0.1,$port_bar,,,,,4
+hosts/bar-down netname,foo,dummy,,bar,127.0.0.1,$port_bar,,,,,4
+subnet-down netname,foo,dummy,,bar,127.0.0.1,$port_bar,10.0.0.2,,,,4
+subnet-down netname,foo,dummy,,bar,127.0.0.1,$port_bar,fec0::/64,5,,,4
bar-stopped
-host-up netname,foo,dummy,,bar,127.0.0.1,32760,,,,,5
-hosts/bar-up netname,foo,dummy,,bar,127.0.0.1,32760,,,,,5
-subnet-up netname,foo,dummy,,bar,127.0.0.1,32760,10.0.0.2,,,,5
-subnet-up netname,foo,dummy,,bar,127.0.0.1,32760,fec0::/64,5,,,5
-bar-started
-host-down netname,foo,dummy,,bar,127.0.0.1,32760,,,,,5
-hosts/bar-down netname,foo,dummy,,bar,127.0.0.1,32760,,,,,5
-subnet-down netname,foo,dummy,,bar,127.0.0.1,32760,10.0.0.2,,,,5
-subnet-down netname,foo,dummy,,bar,127.0.0.1,32760,fec0::/64,5,,,5
+host-up netname,foo,dummy,,bar,127.0.0.1,$port_bar,,,,,5
+hosts/bar-up netname,foo,dummy,,bar,127.0.0.1,$port_bar,,,,,5
+subnet-up netname,foo,dummy,,bar,127.0.0.1,$port_bar,10.0.0.2,,,,5
+subnet-up netname,foo,dummy,,bar,127.0.0.1,$port_bar,fec0::/64,5,,,5
+bar-started-2
+host-down netname,foo,dummy,,bar,127.0.0.1,$port_bar,,,,,5
+hosts/bar-down netname,foo,dummy,,bar,127.0.0.1,$port_bar,,,,,5
+subnet-down netname,foo,dummy,,bar,127.0.0.1,$port_bar,10.0.0.2,,,,5
+subnet-down netname,foo,dummy,,bar,127.0.0.1,$port_bar,fec0::/64,5,,,5
subnet-down netname,foo,dummy,,foo,,,10.0.0.1,,,,5
subnet-down netname,foo,dummy,,foo,,,fec0::/64,,,,5
tinc-down netname,foo,dummy,,,,,,,,,5
EOF
-cmp $OUT $OUT.expected
+diff -w "$OUT" "$OUT.expected"