]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Replace the statschannel truncated tests with two new tests
authorOndřej Surý <ondrej@isc.org>
Thu, 6 Oct 2022 10:56:25 +0000 (12:56 +0200)
committerOndřej Surý <ondrej@isc.org>
Thu, 20 Oct 2022 14:13:10 +0000 (16:13 +0200)
Now that the artificial limit on the recv buffer has been removed, the
current system test always fails because it tests if the truncation has
happened.

Add test that sending more than 10 headers makes the connection to
closed; and add test that sending huge HTTP request makes the connection
to be closed.

(cherry picked from commit cad2706cce2045c3dc744383c444801f2ff9a638)

CHANGES
bin/tests/system/statschannel/send64k.pl [deleted file]
bin/tests/system/statschannel/tests.sh

diff --git a/CHANGES b/CHANGES
index 202cd05e18a5a3394e5c8a245cfc1fb238d6a1ad..69bd3f507908f7d7680858eac5a11b7846e504b6 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,9 +2,6 @@
                        (reportedly > 510) CPUs. Thanks to Stacey Marshall from
                        Oracle for deep investigation of the problem. [GL #3563]
 
-5994.  [func]          Refactor the isc_httpd implementation used in the
-                       statistics channel. [GL !6879]
-
 5999.  [bug]           rpz-ip rules could be ineffective in some scenarios
                        with CD=1 queries. [GL #3247]
 
@@ -20,6 +17,9 @@
                        when printing the configuration using named-checkconf.
                        [GL !6880]
 
+5994.  [func]          Refactor the isc_httpd implementation used in the
+                       statistics channel. [GL !6879]
+
        --- 9.18.8 released ---
 
 5991.  [protocol]      Add support for parsing and validating "dohpath" to
diff --git a/bin/tests/system/statschannel/send64k.pl b/bin/tests/system/statschannel/send64k.pl
deleted file mode 100644 (file)
index 4174b5a..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/perl
-#
-# 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.
-
-#
-# Send a file to a given address and port using TCP.  Used for
-# configuring the test server in ans.pl.
-#
-
-use IO::File;
-use IO::Socket;
-
-@ARGV == 2 or die "usage: send.pl host port\n";
-
-my $host = shift @ARGV;
-my $port = shift @ARGV;
-
-my $sock = IO::Socket::INET->new(PeerAddr => $host, PeerPort => $port,
-                                Proto => "tcp",) or die "$!";
-#send the file
-while ($n = read(STDIN, $buf, 64000)) {
-       $sock->syswrite($buf, $n);
-}
-
-#get the response with with a 15 second timeout
-my $rin;
-my $rout;
-my $n;
-do {
-        $rin = '';
-        vec($rin, fileno($sock), 1) = 1;
-       $n = select($rout = $rin, undef, undef, 15);
-       $n = $sock->sysread($buf, 64000) if ($n > 0);
-       print STDOUT $buf if ($n > 0);
-} while ($n > 0);
-
-$sock->close;
index e53eafaff1b2c9c7ea749ca5655b695f779c0e98..8f40db6a2408447e857ab1e756bd3c5d6c99a831 100644 (file)
@@ -399,8 +399,8 @@ Host: 10.53.0.3:${EXTRAPORT1}
 Connection: close
 
 EOF
-    lines=$(grep "^HTTP/1.1" nc.out$n | wc -l)
-    test $lines = 2 || ret=1
+    lines=$(grep -c "^HTTP/1.1" nc.out$n)
+    test "$lines" = 2 || ret=1
     if [ $ret != 0 ]; then echo_i "failed"; fi
     status=$((status + ret))
     n=$((n + 1))
@@ -426,8 +426,8 @@ Connection: close
 
 {}
 EOF
-    lines=$(grep "^HTTP/1.1" nc.out$n | wc -l)
-    test $lines = 2 || ret=1
+    lines=$(grep -c "^HTTP/1.1" nc.out$n)
+    test "$lines" = 2 || ret=1
 else
     echo_i "skipping test as nc not found"
 fi
@@ -435,26 +435,54 @@ if [ $ret != 0 ]; then echo_i "failed"; fi
 status=$((status + ret))
 n=$((n + 1))
 
-echo_i "Check HTTP/1.1 pipelined with truncated stream ($n)"
+echo_i "Check HTTP with more than 10 headers ($n)"
 ret=0
 i=0
 # build input stream.
-cp /dev/null send.in$n
-while test $i -lt 500
+printf 'GET /xml/v3/status HTTP/1.1\r\nHost: 10.53.0.3\r\n\r\n' > send.in$n
+printf 'GET /xml/v3/status HTTP/1.1\r\nHost: 10.53.0.3\r\n' >> send.in$n
+
+while test $i -lt 11
 do
-cat >> send.in$n << EOF
-GET /xml/v3/status HTTP/1.1
-Host: 10.53.0.3
+printf 'X-Bloat: VGhlIG1vc3QgY29tbW9uIHJlYXNvbiBmb3IgYmxvYXRpbmcgaXMgaGF2aW5nIGEgbG90IG9mIGdhcyBpbiB5b3VyIGd1dC4gCg==\r\n' >> send.in$n
+i=$((i+1))
+done
+printf '\r\n' >> send.in$n
 
-EOF
+# send the requests then wait for named to close the socket.
+time1=$($PERL -e 'print time(), "\n";')
+${NC} 10.53.0.3 ${EXTRAPORT1} < send.in$n  > send.out$n
+time2=$($PERL -e 'print time(), "\n";')
+test $((time2 - time1)) -lt 5 || ret=1
+# we expect 1 request to be processed.
+lines=$(grep -c "^HTTP/1.1" send.out$n)
+test $lines = 1 || ret=1
+if [ $ret != 0 ]; then echo_i "failed"; fi
+status=$((status + ret))
+n=$((n + 1))
+
+echo_i "Check HTTP/1.1 pipelined with truncated stream ($n)"
+ret=0
+i=0
+# build input stream.
+printf 'GET /xml/v3/status HTTP/1.1\r\nHost: 10.53.0.3\r\n\r\n' > send.in$n
+printf 'GET /xml/v3/status HTTP/1.1\r\nHost: 10.53.0.3\r\nX-Bloat:' >> send.in$n
+while test $i -lt 5000
+do
+printf '%s' "VGhlIG1vc3QgY29tbW9uIHJlYXNvbiBmb3IgYmxvYXRpbmcgaXMgaGF2aW5nIGEgbG90IG9mIGdhcyBpbiB5b3VyIGd1dC4gCg==" >> send.in$n
 i=$((i+1))
 done
+printf '\r\n' >> send.in$n
+printf '\r\n' >> send.in$n
 
 # send the requests then wait for named to close the socket.
-${PERL} send64k.pl 10.53.0.3 ${EXTRAPORT1} < send.in$n  > send.out$n
-# we expect 91 of the 500 requests to be processed.
-lines=$(grep "^HTTP/1.1" send.out$n | wc -l)
-test $lines = 91 || ret=1
+time1=$($PERL -e 'print time(), "\n";')
+${NC} 10.53.0.3 ${EXTRAPORT1} < send.in$n  > send.out$n
+time2=$($PERL -e 'print time(), "\n";')
+test $((time2 - time1)) -lt 5 || ret=1
+# we expect 1 request to be processed.
+lines=$(grep -c "^HTTP/1.1" send.out$n)
+test $lines = 1 || ret=1
 if [ $ret != 0 ]; then echo_i "failed"; fi
 status=$((status + ret))
 n=$((n + 1))