]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Rewrite keepalive system test to pytest
authorMichal Nowak <mnowak@isc.org>
Thu, 7 Mar 2024 11:37:10 +0000 (12:37 +0100)
committerMichal Nowak <mnowak@isc.org>
Mon, 17 Feb 2025 19:16:03 +0000 (19:16 +0000)
bin/tests/system/keepalive/expected [deleted file]
bin/tests/system/keepalive/tests.sh [deleted file]
bin/tests/system/keepalive/tests_keepalive.py [new file with mode: 0644]
bin/tests/system/keepalive/tests_sh_keepalive.py [deleted file]

diff --git a/bin/tests/system/keepalive/expected b/bin/tests/system/keepalive/expected
deleted file mode 100644 (file)
index e498db7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-tcp-initial-timeout=300
-tcp-idle-timeout=300
-tcp-keepalive-timeout=300
-tcp-advertised-timeout=200
diff --git a/bin/tests/system/keepalive/tests.sh b/bin/tests/system/keepalive/tests.sh
deleted file mode 100644 (file)
index ce8596b..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
-#
-# SPDX-License-Identifier: MPL-2.0
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0.  If a copy of the MPL was not distributed with this
-# file, you can obtain one at https://mozilla.org/MPL/2.0/.
-#
-# See the COPYRIGHT file distributed with this work for additional
-# information regarding copyright ownership.
-
-set -e
-
-. ../conf.sh
-
-DIGOPTS="-p ${PORT}"
-RNDCCMD="$RNDC  -c ../_common/rndc.conf -s 10.53.0.2 -p ${CONTROLPORT}"
-
-n=0
-status=0
-
-echo_i "checking that dig handles TCP keepalive ($n)"
-ret=0
-n=$((n + 1))
-$DIG $DIGOPTS +qr +keepalive foo.example @10.53.0.2 >dig.out.test$n || ret=1
-grep "; TCP-KEEPALIVE" dig.out.test$n >/dev/null || ret=1
-if [ $ret != 0 ]; then echo_i "failed"; fi
-status=$((status + ret))
-
-echo_i "checking that dig added TCP keepalive ($n)"
-ret=0
-n=$((n + 1))
-$RNDCCMD stats
-grep "EDNS TCP keepalive option received" ns2/named.stats >/dev/null || ret=1
-if [ $ret != 0 ]; then echo_i "failed"; fi
-status=$((status + ret))
-
-echo_i "checking that TCP keepalive is added for TCP responses ($n)"
-ret=0
-n=$((n + 1))
-$DIG $DIGOPTS +vc +keepalive foo.example @10.53.0.2 >dig.out.test$n || ret=1
-grep "; TCP-KEEPALIVE" dig.out.test$n >/dev/null || ret=1
-if [ $ret != 0 ]; then echo_i "failed"; fi
-status=$((status + ret))
-
-echo_i "checking that TCP keepalive requires TCP ($n)"
-ret=0
-n=$((n + 1))
-$DIG $DIGOPTS +keepalive foo.example @10.53.0.2 >dig.out.test$n || ret=1
-grep "; TCP-KEEPALIVE" dig.out.test$n >/dev/null && ret=1
-if [ $ret != 0 ]; then echo_i "failed"; fi
-status=$((status + ret))
-
-echo_i "checking default value ($n)"
-ret=0
-n=$((n + 1))
-$DIG $DIGOPTS +vc +keepalive foo.example @10.53.0.3 >dig.out.test$n || ret=1
-grep "; TCP-KEEPALIVE: 30.0 secs" dig.out.test$n >/dev/null || ret=1
-if [ $ret != 0 ]; then echo_i "failed"; fi
-status=$((status + ret))
-
-echo_i "checking configured value ($n)"
-ret=0
-n=$((n + 1))
-$DIG $DIGOPTS +vc +keepalive foo.example @10.53.0.2 >dig.out.test$n || ret=1
-grep "; TCP-KEEPALIVE: 15.0 secs" dig.out.test$n >/dev/null || ret=1
-if [ $ret != 0 ]; then echo_i "failed"; fi
-status=$((status + ret))
-
-echo_i "checking re-configured value ($n)"
-ret=0
-n=$((n + 1))
-$RNDCCMD tcp-timeouts 300 300 300 200 >output
-diff -b output expected || ret=1
-$DIG $DIGOPTS +vc +keepalive foo.example @10.53.0.2 >dig.out.test$n || ret=1
-grep "; TCP-KEEPALIVE: 20.0 secs" dig.out.test$n >/dev/null || ret=1
-if [ $ret != 0 ]; then echo_i "failed"; fi
-status=$((status + ret))
-
-echo_i "checking server config entry ($n)"
-ret=0
-n=$((n + 1))
-$RNDCCMD stats
-oka=$(grep "EDNS TCP keepalive option received" ns2/named.stats \
-  | tail -1 | awk '{ print $1}')
-$DIG $DIGOPTS bar.example @10.53.0.3 >dig.out.test$n || ret=1
-$RNDCCMD stats
-nka=$(grep "EDNS TCP keepalive option received" ns2/named.stats \
-  | tail -1 | awk '{ print $1}')
-#echo oka ':' $oka
-#echo nka ':' $nka
-if [ "$oka" -eq "$nka" ]; then ret=1; fi
-if [ $ret != 0 ]; then echo_i "failed"; fi
-status=$((status + ret))
-
-echo_i "exit status: $status"
-[ $status -eq 0 ] || exit 1
diff --git a/bin/tests/system/keepalive/tests_keepalive.py b/bin/tests/system/keepalive/tests_keepalive.py
new file mode 100644 (file)
index 0000000..c815c3e
--- /dev/null
@@ -0,0 +1,69 @@
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# SPDX-License-Identifier: MPL-2.0
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0.  If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+import isctest
+import pytest
+
+
+pytestmark = pytest.mark.extra_artifacts(
+    ["ns2/named.stats"],
+)
+
+
+def test_dig_tcp_keepalive_handling(named_port, servers):
+    def get_keepalive_options_received():
+        servers["ns2"].rndc("stats", log=False)
+        options_received = 0
+        with open("ns2/named.stats", "r", encoding="utf-8") as ns2_stats_file:
+            for line in ns2_stats_file:
+                if "EDNS TCP keepalive option received" in line:
+                    options_received = line.split()[0]
+        return int(options_received)
+
+    dig = isctest.run.Dig(f"-p {str(named_port)}")
+
+    isctest.log.info("check that dig handles TCP keepalive in query")
+    assert "; TCP-KEEPALIVE" in dig("+qr +keepalive foo.example. @10.53.0.2")
+
+    isctest.log.info("check that dig added TCP keepalive was received")
+    assert get_keepalive_options_received() == 1
+
+    isctest.log.info("check that TCP keepalive is added for TCP responses")
+    assert "; TCP-KEEPALIVE" in dig("+tcp +keepalive foo.example. @10.53.0.2")
+
+    isctest.log.info("check that TCP keepalive requires TCP")
+    assert "; TCP-KEEPALIVE" not in dig("+keepalive foo.example. @10.53.0.2")
+
+    isctest.log.info("check the default keepalive value")
+    assert "; TCP-KEEPALIVE: 30.0 secs" in dig(
+        "+tcp +keepalive foo.example. @10.53.0.3"
+    )
+
+    isctest.log.info("check a keepalive configured value")
+    assert "; TCP-KEEPALIVE: 15.0 secs" in dig(
+        "+tcp +keepalive foo.example. @10.53.0.2"
+    )
+
+    isctest.log.info("check a re-configured keepalive value")
+    response = servers["ns2"].rndc("tcp-timeouts 300 300 300 200", log=False)
+    assert "tcp-initial-timeout=300" in response
+    assert "tcp-idle-timeout=300" in response
+    assert "tcp-keepalive-timeout=300" in response
+    assert "tcp-advertised-timeout=200" in response
+    assert "; TCP-KEEPALIVE: 20.0 secs" in dig(
+        "+tcp +keepalive foo.example. @10.53.0.2"
+    )
+
+    isctest.log.info("check server config entry")
+    base_options_received = get_keepalive_options_received()
+    dig("bar.example. @10.53.0.3")
+    next_options_received = get_keepalive_options_received()
+    assert base_options_received < next_options_received
diff --git a/bin/tests/system/keepalive/tests_sh_keepalive.py b/bin/tests/system/keepalive/tests_sh_keepalive.py
deleted file mode 100644 (file)
index 892e761..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
-#
-# SPDX-License-Identifier: MPL-2.0
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0.  If a copy of the MPL was not distributed with this
-# file, you can obtain one at https://mozilla.org/MPL/2.0/.
-#
-# See the COPYRIGHT file distributed with this work for additional
-# information regarding copyright ownership.
-
-import pytest
-
-pytestmark = pytest.mark.extra_artifacts(
-    [
-        "dig.out.*",
-        "output",
-        "ns2/named.stats",
-    ]
-)
-
-
-def test_keepalive(run_tests_sh):
-    run_tests_sh()