From: Ondřej Surý Date: Thu, 6 Oct 2022 10:56:25 +0000 (+0200) Subject: Replace the statschannel truncated tests with two new tests X-Git-Tag: v9.19.7~63^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cad2706cce2045c3dc744383c444801f2ff9a638;p=thirdparty%2Fbind9.git Replace the statschannel truncated tests with two new tests 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. --- diff --git a/bin/tests/system/statschannel/send64k.pl b/bin/tests/system/statschannel/send64k.pl deleted file mode 100644 index 4174b5a3a07..00000000000 --- a/bin/tests/system/statschannel/send64k.pl +++ /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; diff --git a/bin/tests/system/statschannel/tests.sh b/bin/tests/system/statschannel/tests.sh index 1d0cff0589a..ec899e1b3db 100644 --- a/bin/tests/system/statschannel/tests.sh +++ b/bin/tests/system/statschannel/tests.sh @@ -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))