]> 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>
Fri, 14 Oct 2022 09:26:54 +0000 (11:26 +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.

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

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 1d0cff0589a80a9dd407d444087ca1142994555b..ec899e1b3db0d688ae27f8d2abd66f32292c1340 100644 (file)
@@ -388,8 +388,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))
@@ -415,8 +415,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
     if [ $ret != 0 ]; then echo_i "failed"; fi
     status=$((status + ret))
     n=$((n + 1))
@@ -424,29 +424,54 @@ else
     echo_i "skipping test as nc not found"
 fi
 
-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.
 time1=$($PERL -e 'print time(), "\n";')
-${PERL} send64k.pl 10.53.0.3 ${EXTRAPORT1} < send.in$n  > send.out$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 91 of the 500 requests to be processed.
-lines=$(grep "^HTTP/1.1" send.out$n | wc -l)
-test $lines = 91 || 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))