Rewrite the test suite for better compat and stability
[tinc] / test / scripts.test
index 7889e1d..a367827 100755 (executable)
 #!/bin/sh
 
+# shellcheck source=testlib.sh
 . "${0%/*}/testlib.sh"
 
-echo Initializing node...
+echo [STEP] Initializing server node
 
-# Initialize server node
+port_foo=30040
+port_bar=30041
 
-$tinc $c1 <<EOF
+tinc foo <<EOF
 init foo
 set DeviceType dummy
-set Port 32759
+set Port $port_foo
 set Address 127.0.0.1
 add Subnet 10.0.0.1
 add Subnet fec0::/64
 EOF
 
-# Set up scripts
-
-echo Setting 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
+  )
 
-cat >$d1/$script.cmd << EOF
-echo $script %NETNAME%,%NAME%,%DEVICE%,%IFACE%,%NODE%,%REMOTEADDRESS%,%REMOTEPORT%,%SUBNET%,%WEIGHT%,%INVITATION_FILE%,%INVITATION_URL%,%DEBUG% >>$OUT
-EOF
+  create_script foo "$script" "$commands"
 done
 
-# Start server node
-
-echo Starting server node...
-
-$tinc $c1 -n netname start $r1
+echo [STEP] Starting server node
 
-echo foo-started >>$OUT
+start_tinc foo -n netname
+wait_script foo subnet-up 2
+echo foo-started >>"$OUT"
 
-# Invite client node
+echo [STEP] Inviting client node
 
-echo Inviting client node...
+url=$(tinc foo -n netname2 invite bar)
+file=$(basename "$(find "$DIR_FOO/invitations" -type f ! -name ed25519_key.priv)")
 
-url=`$tinc $c1 -n netname2 invite bar | tr -d '\r'`
-file=`cd $d1/invitations; ls | grep -v ed25519_key.priv`
-echo bar-invited >>$OUT
+if is_windows; then
+  file=$(cygpath --unix -- "$file")
+fi
 
-echo Joining client node...
+wait_script foo invitation-created
+echo bar-invited >>"$OUT"
 
-$tinc $c2 -n netname3 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"
 
-echo Starting client node...
+echo [STEP] Starting client node
 
-$tinc $c2 << EOF
+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
+start_tinc bar
+wait_script foo subnet-up 2
+echo bar-started-1 >>"$OUT"
 
-echo bar-started >>$OUT
+tinc foo debug 4
+tinc bar stop
+wait_script foo subnet-down 2
+echo bar-stopped >>"$OUT"
 
-$tinc $c1 debug 4
-$tinc $c2 stop
+tinc foo debug 5
+start_tinc bar
+wait_script foo subnet-up 2
+echo bar-started-2 >>"$OUT"
 
-sleep 1
+echo [STEP] Stop server node
 
-echo bar-stopped >>$OUT
+tinc foo stop
+tinc bar stop
+wait_script foo tinc-down
 
-$tinc $c1 debug 5
-$tinc $c2 start $r2
+echo [STEP] Check if the script output is what is expected
 
-sleep 1
-
-echo bar-started >>$OUT
-
-# Stop server node
-
-$tinc $c1 stop
-sleep 1
-$tinc $c2 stop
-
-# 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
 
-tr -d '\r' <$OUT >$OUT.actual
-
-cmp $OUT.actual $OUT.expected
+diff -w "$OUT" "$OUT.expected"