Add compression.test
authorKirill Isakov <is-kir@ya.ru>
Tue, 20 Jul 2021 12:00:49 +0000 (18:00 +0600)
committerGuus Sliepen <guus@tinc-vpn.org>
Tue, 20 Jul 2021 17:42:15 +0000 (19:42 +0200)
16 files changed:
test/Makefile.am
test/algorithms.test
test/basic.test
test/commandline.test
test/compression.test [new file with mode: 0755]
test/executables.test
test/import-export.test
test/invite-join.test
test/invite-offline.test
test/invite-tinc-up.test
test/legacy-protocol.test
test/ns-ping.test
test/scripts.test
test/security.test
test/sptps-basic.test
test/variables.test

index 8c8d08f..da77fb7 100644 (file)
@@ -2,6 +2,7 @@ TESTS = \
        basic.test \
        executables.test \
        commandline.test \
+       compression.test \
        import-export.test \
        invite-join.test \
        invite-offline.test \
index bf073a5..dcf055a 100755 (executable)
@@ -1,6 +1,5 @@
 #!/bin/sh
 
-# shellcheck source=testlib.sh
 . ./testlib.sh
 
 echo [STEP] Initialize two nodes
index b2a3e47..87c5784 100755 (executable)
@@ -1,6 +1,5 @@
 #!/bin/sh
 
-# shellcheck source=testlib.sh
 . ./testlib.sh
 
 echo [STEP] Initialize and test one node
index 5e9fb85..241cb25 100755 (executable)
@@ -1,6 +1,5 @@
 #!/bin/sh
 
-# shellcheck source=testlib.sh
 . ./testlib.sh
 
 echo [STEP] Initialize one node
diff --git a/test/compression.test b/test/compression.test
new file mode 100755 (executable)
index 0000000..77efd6d
--- /dev/null
@@ -0,0 +1,132 @@
+#!/bin/sh
+
+. ./testlib.sh
+
+test "$(id -u)" = "0" || exit $EXIT_SKIP_TEST
+test -e /dev/net/tun || exit $EXIT_SKIP_TEST
+ip netns list || exit $EXIT_SKIP_TEST
+command -v socat || exit $EXIT_SKIP_TEST
+
+ip_foo=192.168.1.1
+ip_bar=192.168.1.2
+port_foo=30100
+recv_port_foo=30101
+mask=24
+
+echo '[STEP] Determining supported compression levels'
+
+features=$(tincd foo --version)
+bogus_levels="-1 13"
+levels=0
+
+add_levels() {
+  algo=$1
+  shift
+
+  if echo "$features" | grep "comp_$algo"; then
+    levels="$levels $*"
+  else
+    bogus_levels="$bogus_levels $*"
+  fi
+}
+
+add_levels zlib 1 2 3 4 5 6 7 8 9
+add_levels lzo 10 11
+add_levels lz4 12
+
+echo "Supported compression levels: $levels"
+echo "Unsupported compression levels: $bogus_levels"
+
+echo [STEP] Create network namespaces
+
+ip netns add foo
+ip netns add bar
+tmp_file=$(mktemp)
+
+cleanup_hook() {
+  ip netns del foo
+  ip netns del bar
+  rm -f "$tmp_file"
+}
+
+echo [STEP] Initialize two nodes
+
+tinc foo <<EOF
+init foo
+set Subnet $ip_foo
+set Interface foo
+set Port $port_foo
+set Address localhost
+EOF
+
+tinc bar <<EOF
+init bar
+set Subnet $ip_bar
+set Interface bar
+set ConnectTo foo
+EOF
+
+# shellcheck disable=SC2016
+create_script foo tinc-up "
+  ip link set dev \$INTERFACE netns foo
+  ip netns exec foo ip addr add $ip_foo/$mask dev \$INTERFACE
+  ip netns exec foo ip link set \$INTERFACE up
+"
+
+# shellcheck disable=SC2016
+create_script bar tinc-up "
+  ip link set dev \$INTERFACE netns bar
+  ip netns exec bar ip addr add $ip_bar/$mask dev \$INTERFACE
+  ip netns exec bar ip link set \$INTERFACE up
+"
+
+echo [STEP] Exchange configuration files
+
+tinc foo export | tinc bar exchange | tinc foo import
+
+echo [STEP] Test supported compression levels
+
+ref_file=$0
+
+create_script foo hosts/bar-up
+create_script bar hosts/foo-up
+
+for level in $levels; do
+  echo "[STEP] Testing compression level $level"
+
+  tinc foo set Compression "$level"
+  tinc bar set Compression "$level"
+
+  start_tinc foo
+  wait_script foo tinc-up
+
+  start_tinc bar
+  wait_script bar tinc-up
+
+  wait_script foo hosts/bar-up
+  wait_script bar hosts/foo-up
+
+  ip netns exec foo \
+    socat -u TCP4-LISTEN:$recv_port_foo,reuseaddr OPEN:"$tmp_file",creat &
+
+  ip netns exec bar \
+    socat -u OPEN:"$ref_file" TCP4:$ip_foo:$recv_port_foo,retry=30
+
+  diff -w "$ref_file" "$tmp_file"
+
+  tinc foo stop
+  tinc bar stop
+done
+
+echo '[STEP] Invalid compression levels should fail'
+
+for level in $bogus_levels; do
+  echo "[STEP] Testing bogus compression level $level"
+  tinc foo set Compression "$level"
+
+  output=$(must_fail start_tinc foo 2>&1)
+
+  if ! echo "$output" | grep -q 'Bogus compression level'; then
+    bail 'expected message about the wrong compression level'
+  fi
+done
index bc53aed..96aad99 100755 (executable)
@@ -1,6 +1,5 @@
 #!/bin/sh
 
-# shellcheck source=testlib.sh
 . ./testlib.sh
 
 echo [STEP] Just test whether the executables work
index 9b44e7a..9fdfa49 100755 (executable)
@@ -1,6 +1,5 @@
 #!/bin/sh
 
-# shellcheck source=testlib.sh
 . ./testlib.sh
 
 echo [STEP] Initialize three nodes
index 58edd4a..3a9e3a3 100755 (executable)
@@ -1,6 +1,5 @@
 #!/bin/sh
 
-# shellcheck source=testlib.sh
 . ./testlib.sh
 
 echo [STEP] Initialize one node
index 2d7878d..aea39b4 100755 (executable)
@@ -1,6 +1,5 @@
 #!/bin/sh
 
-# shellcheck source=testlib.sh
 . ./testlib.sh
 
 echo [STEP] Initialize one node
index 8f09f5e..a288d6e 100755 (executable)
@@ -1,6 +1,5 @@
 #!/bin/sh
 
-# shellcheck source=testlib.sh
 . ./testlib.sh
 
 echo [STEP] Initialize one node
index 1aef8f2..396fc56 100755 (executable)
@@ -1,6 +1,5 @@
 #!/bin/sh
 
-# shellcheck source=testlib.sh
 . ./testlib.sh
 
 echo [STEP] Initialize two nodes
index 417ed32..bb76ed3 100755 (executable)
@@ -1,6 +1,5 @@
 #!/bin/sh
 
-# shellcheck source=testlib.sh
 . ./testlib.sh
 
 echo "[STEP] Skip this test if we aren't root or if 'ip netns' does not exist"
index 9ef6416..a76356a 100755 (executable)
@@ -1,6 +1,5 @@
 #!/bin/sh
 
-# shellcheck source=testlib.sh
 . ./testlib.sh
 
 echo [STEP] Initializing server node
index 76b825d..ee7bd46 100755 (executable)
@@ -1,6 +1,5 @@
 #!/bin/sh
 
-# shellcheck source=testlib.sh
 . ./testlib.sh
 
 echo [STEP] Skip this test if tools are missing
index 87aee02..56e3cd0 100755 (executable)
@@ -1,6 +1,5 @@
 #!/bin/sh
 
-# shellcheck source=testlib.sh
 . ./testlib.sh
 
 echo [STEP] Skip this test if we did not compile sptps_test
index 0164e27..bcec9fb 100755 (executable)
@@ -1,6 +1,5 @@
 #!/bin/sh
 
-# shellcheck source=testlib.sh
 . ./testlib.sh
 
 echo [STEP] Initialize one node