Skip to content

Commit b77e3f8

Browse files
committed
Tests: fixed upstream service tests over TCP.
Previously, truncation tests on a distinct host name could interfere with basic UDP tests, breaking test assumption for when re-resolving is done. The fix is to use a separate upstream resolver with its own accounting.
1 parent d69dedb commit b77e3f8

File tree

2 files changed

+43
-27
lines changed

2 files changed

+43
-27
lines changed

stream_upstream_service.t

+21-12
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ stream {
5252
upstream u3 {
5353
zone z3 1m;
5454
server trunc.example.net resolve service=http;
55+
resolver 127.0.0.1:%%PORT_8982_UDP%% valid=1s;
5556
}
5657
5758
# lower the retry timeout after empty reply
@@ -89,12 +90,16 @@ stream {
8990
EOF
9091

9192
port(8080);
92-
port(8084);
9393

9494
$t->write_file('t', '');
9595

96-
$t->run_daemon(\&dns_daemon, $t)->waitforfile($t->testdir . '/' . port(8981));
97-
port(8981, socket => 1)->close();
96+
$t->run_daemon(\&dns_daemon, port(8981), port(8084), $t)
97+
->waitforfile($t->testdir . '/' . port(8981));
98+
99+
$t->run_daemon(\&dns_daemon, port(8982), port(8085), $t, tcp => 1)
100+
->waitforfile($t->testdir . '/' . port(8982));
101+
port(8982, socket => 1)->close();
102+
98103
$t->try_run('no resolve in upstream server')->plan(21);
99104

100105
###############################################################################
@@ -189,7 +194,6 @@ stream('127.0.0.1:' . port(8081))->read();
189194

190195
# SRV trunc
191196

192-
update_name({A => '127.0.0.1', SRV => "1 5 $p0 example.net"}, 3, 2);
193197
stream('127.0.0.1:' . port(8083))->read();
194198

195199
$t->stop();
@@ -455,32 +459,37 @@ sub rd_addr6 {
455459
}
456460

457461
sub dns_daemon {
458-
my ($t) = @_;
462+
my ($port, $control_port, $t, %extra) = @_;
459463
my ($data, $recv_data, $h);
460464

461465
my $socket = IO::Socket::INET->new(
462466
LocalAddr => '127.0.0.1',
463-
LocalPort => port(8981),
467+
LocalPort => $port,
464468
Proto => 'udp',
465469
)
466470
or die "Can't create listening socket: $!\n";
467471

468472
my $control = IO::Socket::INET->new(
469473
Proto => 'tcp',
470-
LocalHost => '127.0.0.1:' . port(8084),
474+
LocalHost => '127.0.0.1:' . $control_port,
471475
Listen => 5,
472476
Reuse => 1
473477
)
474478
or die "Can't create listening socket: $!\n";
475479

476-
my $tcp = port(8981, socket => 1);
477-
my $sel = IO::Select->new($socket, $control, $tcp);
480+
my $sel = IO::Select->new($socket, $control);
481+
my $tcp = 0;
482+
483+
if ($extra{tcp}) {
484+
$tcp = port(8982, socket => 1);
485+
$sel->add($tcp);
486+
}
478487

479488
local $SIG{PIPE} = 'IGNORE';
480489

481490
# signal we are ready
482491

483-
open my $fh, '>', $t->testdir() . '/' . port(8981);
492+
open my $fh, '>', $t->testdir() . '/' . $port;
484493
close $fh;
485494
my $cnt = 0;
486495

@@ -496,12 +505,12 @@ sub dns_daemon {
496505
$data = reply_handler($recv_data, $h, \$cnt);
497506
$fh->send($data);
498507

499-
} elsif ($fh->sockport() == port(8084)) {
508+
} elsif ($fh->sockport() == $control_port) {
500509
$h = process_name($fh, $cnt);
501510
$sel->remove($fh);
502511
$fh->close;
503512

504-
} elsif ($fh->sockport() == port(8981)) {
513+
} elsif ($fh->sockport() == $port) {
505514
$fh->recv($recv_data, 65536);
506515
unless (length $recv_data) {
507516
$sel->remove($fh);

upstream_service.t

+22-15
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ http {
5151
upstream u3 {
5252
zone z3 1m;
5353
server trunc.example.net resolve service=http;
54+
resolver 127.0.0.1:%%PORT_8982_UDP%% valid=1s;
5455
}
5556
5657
# lower the retry timeout after empty reply
@@ -75,7 +76,7 @@ http {
7576
}
7677
7778
location /trunc {
78-
proxy_pass http://u2/t;
79+
proxy_pass http://u3/t;
7980
}
8081
8182
location /t { }
@@ -84,12 +85,15 @@ http {
8485
8586
EOF
8687

87-
port(8084);
88-
8988
$t->write_file('t', '');
9089

91-
$t->run_daemon(\&dns_daemon, $t)->waitforfile($t->testdir . '/' . port(8981));
92-
port(8981, socket => 1)->close();
90+
$t->run_daemon(\&dns_daemon, port(8981), port(8084), $t)
91+
->waitforfile($t->testdir . '/' . port(8981));
92+
93+
$t->run_daemon(\&dns_daemon, port(8982), port(8085), $t, tcp => 1)
94+
->waitforfile($t->testdir . '/' . port(8982));
95+
port(8982, socket => 1)->close();
96+
9397
$t->try_run('no service in upstream server')->plan(38);
9498

9599
###############################################################################
@@ -221,8 +225,6 @@ like($r, qr/127.0.0.201:$p0/, 'SRV diff 2');
221225

222226
# SRV trunc
223227

224-
update_name({A => '127.0.0.1', SRV => "1 5 $p0 example.net"}, 3, 2);
225-
226228
$r = http_get('/trunc');
227229
is(@n = $r =~ /:$p0/g, 1, 'tcp request');
228230
like($r, qr/127.0.0.1:$p0/, 'tcp request 1');
@@ -410,32 +412,37 @@ sub rd_addr6 {
410412
}
411413

412414
sub dns_daemon {
413-
my ($t) = @_;
415+
my ($port, $control_port, $t, %extra) = @_;
414416
my ($data, $recv_data, $h);
415417

416418
my $socket = IO::Socket::INET->new(
417419
LocalAddr => '127.0.0.1',
418-
LocalPort => port(8981),
420+
LocalPort => $port,
419421
Proto => 'udp',
420422
)
421423
or die "Can't create listening socket: $!\n";
422424

423425
my $control = IO::Socket::INET->new(
424426
Proto => 'tcp',
425-
LocalHost => '127.0.0.1:' . port(8084),
427+
LocalHost => '127.0.0.1:' . $control_port,
426428
Listen => 5,
427429
Reuse => 1
428430
)
429431
or die "Can't create listening socket: $!\n";
430432

431-
my $tcp = port(8981, socket => 1);
432-
my $sel = IO::Select->new($socket, $control, $tcp);
433+
my $sel = IO::Select->new($socket, $control);
434+
my $tcp = 0;
435+
436+
if ($extra{tcp}) {
437+
$tcp = port(8982, socket => 1);
438+
$sel->add($tcp);
439+
}
433440

434441
local $SIG{PIPE} = 'IGNORE';
435442

436443
# signal we are ready
437444

438-
open my $fh, '>', $t->testdir() . '/' . port(8981);
445+
open my $fh, '>', $t->testdir() . '/' . $port;
439446
close $fh;
440447
my $cnt = 0;
441448

@@ -451,12 +458,12 @@ sub dns_daemon {
451458
$data = reply_handler($recv_data, $h, \$cnt);
452459
$fh->send($data);
453460

454-
} elsif ($fh->sockport() == port(8084)) {
461+
} elsif ($fh->sockport() == $control_port) {
455462
$h = process_name($fh, $cnt);
456463
$sel->remove($fh);
457464
$fh->close;
458465

459-
} elsif ($fh->sockport() == port(8981)) {
466+
} elsif ($fh->sockport() == $port) {
460467
$fh->recv($recv_data, 65536);
461468
unless (length $recv_data) {
462469
$sel->remove($fh);

0 commit comments

Comments
 (0)