From be735330bbbff916392fcd3dcb6bf9e15cc78525 Mon Sep 17 00:00:00 2001 From: Tom Krizek Date: Tue, 6 Feb 2024 15:35:49 +0100 Subject: [PATCH] Use a single local port for ditch.pl The ditch.pl script is used to generate burst traffic without waiting for the responses. When running other tests in parallel, this can result in a ephemeral port clash, since the ditch.pl process closes the socket immediately. In rare occasions when the message ID also clashes with other tests' queries, it might result in an UnexpectedSource error from dnspython. Use a dedicated port EXTRAPORT8 which is reserved for each test as a source port for the burst traffic. (cherry picked from commit 339fa5690a5d80deb287ad119dd8f900c38545a1) --- bin/tests/system/ditch.pl | 15 +++++++++++---- bin/tests/system/fetchlimit/tests.sh | 2 +- bin/tests/system/serve-stale/tests.sh | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/bin/tests/system/ditch.pl b/bin/tests/system/ditch.pl index e2082503d7..f77d02224d 100644 --- a/bin/tests/system/ditch.pl +++ b/bin/tests/system/ditch.pl @@ -34,12 +34,12 @@ use IO::File; use IO::Socket; sub usage { - print ("Usage: ditch.pl [-s address] [-p port] [file]\n"); + print ("Usage: ditch.pl [-s address] [-p port] [-b source_port] [file]\n"); exit 1; } my %options={}; -getopts("s:p:t:", \%options); +getopts("s:p:b:", \%options); my $addr = "127.0.0.1"; $addr = $options{s} if defined $options{s}; @@ -47,6 +47,9 @@ $addr = $options{s} if defined $options{s}; my $port = 53; $port = $options{p} if defined $options{p}; +my $source_port = 0; +$source_port = $options{b} if defined $options{b}; + my $file = "STDIN"; if (@ARGV >= 1) { my $filename = shift @ARGV; @@ -74,8 +77,12 @@ while (defined(my $line = <$file>) ) { $packet->header->rd(1); $packet->push(question => $q); - my $sock = IO::Socket::INET->new(PeerAddr => $addr, PeerPort => $port, - Proto => "udp",) or die "$!"; + my $sock = IO::Socket::INET->new( + PeerAddr => $addr, + PeerPort => $port, + Proto => "udp", + LocalPort => $source_port, + ) or die "$!"; my $bytes = $sock->send($packet->data); #print ("sent $bytes bytes to $addr:$port:\n"); diff --git a/bin/tests/system/fetchlimit/tests.sh b/bin/tests/system/fetchlimit/tests.sh index 4a7c9e63f1..60b54fe6b4 100644 --- a/bin/tests/system/fetchlimit/tests.sh +++ b/bin/tests/system/fetchlimit/tests.sh @@ -24,7 +24,7 @@ burst() { num=$((num - 1)) echo "${num}${1}${2}.lamesub.example A" >>burst.input.$$ done - $PERL ../ditch.pl -p ${PORT} -s 10.53.0.3 burst.input.$$ + $PERL ../ditch.pl -p ${PORT} -s 10.53.0.3 -b ${EXTRAPORT8} burst.input.$$ rm -f burst.input.$$ } diff --git a/bin/tests/system/serve-stale/tests.sh b/bin/tests/system/serve-stale/tests.sh index d496d89415..e5f491242c 100755 --- a/bin/tests/system/serve-stale/tests.sh +++ b/bin/tests/system/serve-stale/tests.sh @@ -2401,7 +2401,7 @@ burst() { num=$(expr $num - 1) echo "fetch${num}.example A" >>burst.input.$$ done - $PERL ../ditch.pl -p ${PORT} -s 10.53.0.3 burst.input.$$ + $PERL ../ditch.pl -p ${PORT} -s 10.53.0.3 -b ${EXTRAPORT8} burst.input.$$ rm -f burst.input.$$ }