From 339fa5690a5d80deb287ad119dd8f900c38545a1 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. --- 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 50e76203dc..01cd4f3305 100644 --- a/bin/tests/system/fetchlimit/tests.sh +++ b/bin/tests/system/fetchlimit/tests.sh @@ -35,7 +35,7 @@ burst() { echo "${num}${2}${3}.lamesub.example A" >>burst.input.$$ fi done - $PERL ../ditch.pl -p ${PORT} -s ${server} burst.input.$$ + $PERL ../ditch.pl -p ${PORT} -s ${server} -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 36880f7f1f..c6f2dd47a9 100755 --- a/bin/tests/system/serve-stale/tests.sh +++ b/bin/tests/system/serve-stale/tests.sh @@ -2500,7 +2500,7 @@ burst() { num=$((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.$$ }