diff --git a/tests/data/test1700 b/tests/data/test1700
index 8d1fff5801..be5644db5a 100644
--- a/tests/data/test1700
+++ b/tests/data/test1700
@@ -42,7 +42,6 @@ Content-Type: text/html
h2c
-http
http/2
diff --git a/tests/data/test1701 b/tests/data/test1701
index c81862aeb5..469026d79d 100644
--- a/tests/data/test1701
+++ b/tests/data/test1701
@@ -33,7 +33,6 @@ Funny-head: yesyes
h2c
-http
http/2
diff --git a/tests/data/test1702 b/tests/data/test1702
index ced2ca06ce..ce4a1c04d4 100644
--- a/tests/data/test1702
+++ b/tests/data/test1702
@@ -32,7 +32,6 @@ Funny-head: yesyes
h2c
-http
http/2
diff --git a/tests/data/test2401 b/tests/data/test2401
index 1db7dbedd9..1a51b1741b 100644
--- a/tests/data/test2401
+++ b/tests/data/test2401
@@ -30,7 +30,6 @@ h2c
SSL
-http
http/2
diff --git a/tests/data/test2402 b/tests/data/test2402
index 44d48f85f2..f672759aae 100644
--- a/tests/data/test2402
+++ b/tests/data/test2402
@@ -51,7 +51,6 @@ h2c
SSL
-http
http/2
diff --git a/tests/data/test2403 b/tests/data/test2403
index 7a993d731b..533d483c57 100644
--- a/tests/data/test2403
+++ b/tests/data/test2403
@@ -34,7 +34,6 @@ SSL
headers-api
-http
http/2
diff --git a/tests/data/test2404 b/tests/data/test2404
index bcf1035aaf..a9106c50a1 100644
--- a/tests/data/test2404
+++ b/tests/data/test2404
@@ -51,7 +51,6 @@ h2c
SSL
-http
http/2
diff --git a/tests/data/test2405 b/tests/data/test2405
index 38bb1cd8c5..8489156e73 100644
--- a/tests/data/test2405
+++ b/tests/data/test2405
@@ -29,7 +29,6 @@ Funny-head: yesyes
# Client-side
-http
http/2
diff --git a/tests/data/test2406 b/tests/data/test2406
index 7a1620f2b8..541bdeea1a 100644
--- a/tests/data/test2406
+++ b/tests/data/test2406
@@ -32,7 +32,6 @@ h2c
SSL
-http
http/2
diff --git a/tests/data/test2500 b/tests/data/test2500
index 6ec739d1ac..f880672da2 100644
--- a/tests/data/test2500
+++ b/tests/data/test2500
@@ -33,7 +33,6 @@ http/3
nghttpx-h3
-http
http/3
diff --git a/tests/data/test2501 b/tests/data/test2501
index 8b49127ffd..1f35372f1b 100644
--- a/tests/data/test2501
+++ b/tests/data/test2501
@@ -30,7 +30,6 @@ http
http/3
-http
http/3
diff --git a/tests/data/test2502 b/tests/data/test2502
index d20771a6f3..2efd04f2d0 100644
--- a/tests/data/test2502
+++ b/tests/data/test2502
@@ -50,7 +50,6 @@ file contents should appear once for each file
http/3
-http
http/3
diff --git a/tests/data/test2503 b/tests/data/test2503
index 9877ee4c1b..ab86c66be2 100644
--- a/tests/data/test2503
+++ b/tests/data/test2503
@@ -33,7 +33,6 @@ nghttpx-h3
headers-api
-http
http/3
diff --git a/tests/servers.pm b/tests/servers.pm
index 14ffca23bd..0938aaa93f 100644
--- a/tests/servers.pm
+++ b/tests/servers.pm
@@ -550,18 +550,19 @@ sub getexternalproxyflags {
# assign requested address")
#
sub verifyhttp {
- my ($proto, $ipvnum, $idnum, $ip, $port_or_path) = @_;
+ my ($proto, $ipvnum, $idnum, $ip, $port_or_path, $do_http3) = @_;
my $server = servername_id($proto, $ipvnum, $idnum);
my $bonus="";
# $port_or_path contains a path for Unix sockets, sws ignores the port
my $port = ($ipvnum eq "unix") ? 80 : $port_or_path;
+ my $infix = ($do_http3) ? "_h3" : "";
my $verifyout = "$LOGDIR/".
- servername_canon($proto, $ipvnum, $idnum) .'_verify.out';
+ servername_canon($proto, $ipvnum, $idnum) .$infix .'_verify.out';
unlink($verifyout) if(-f $verifyout);
my $verifylog = "$LOGDIR/".
- servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
+ servername_canon($proto, $ipvnum, $idnum) .$infix .'_verify.log';
unlink($verifylog) if(-f $verifylog);
if($proto eq "gopher") {
@@ -579,6 +580,7 @@ sub verifyhttp {
if($proxy_address) {
$flags .= getexternalproxyflags();
}
+ $flags .= "--http3-only " if($do_http3);
$flags .= "\"$proto://$ip:$port/${bonus}verifiedserver\"";
my $cmd = "$VCURL $flags 2>$verifylog";
@@ -1101,12 +1103,12 @@ sub verifyserver {
# to verify that a server present in %run hash is still functional
#
sub responsiveserver {
- my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+ my ($proto, $ipvnum, $idnum, $ip, $port, $do_http3) = @_;
my $prev_verbose = $verbose;
$verbose = 0;
my $fun = $protofunc{$proto};
- my $pid = &$fun($proto, $ipvnum, $idnum, $ip, $port);
+ my $pid = &$fun($proto, $ipvnum, $idnum, $ip, $port, $do_http3);
$verbose = $prev_verbose;
if($pid > 0) {
@@ -2217,7 +2219,7 @@ sub runnegtelnetserver {
# be used to verify that a server present in %run hash is still functional
#
sub responsive_http_server {
- my ($proto, $verb, $alt, $port_or_path) = @_;
+ my ($proto, $verb, $alt, $port_or_path, $do_http3) = @_;
my $ip = $HOSTIP;
my $ipvnum = 4;
my $idnum = 1;
@@ -2235,7 +2237,7 @@ sub responsive_http_server {
$ipvnum = "unix";
}
- return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port_or_path);
+ return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port_or_path, $do_http3);
}
#######################################################################
@@ -2424,29 +2426,6 @@ sub startservers {
$run{'gopher-ipv6'}="$pid $pid2";
}
}
- elsif($what eq "http/3") {
- if(!$run{'http/3'}) {
- ($serr, $pid, $pid2, $PORT{"http3"}) = runhttp3server($verbose);
- if($pid <= 0) {
- return ("failed starting HTTP/3 server", $serr);
- }
- logmsg sprintf ("* pid http/3 => %d %d\n", $pid, $pid2)
- if($verbose);
- $run{'http/3'}="$pid $pid2";
- }
- }
- elsif($what eq "http/2") {
- if(!$run{'http/2'}) {
- ($serr, $pid, $pid2, $PORT{"http2"}, $PORT{"http2tls"}) =
- runhttp2server($verbose);
- if($pid <= 0) {
- return ("failed starting HTTP/2 server", $serr);
- }
- logmsg sprintf ("* pid http/2 => %d %d\n", $pid, $pid2)
- if($verbose);
- $run{'http/2'}="$pid $pid2";
- }
- }
elsif($what eq "http") {
if($run{'http'} &&
!responsive_http_server("http", $verbose, 0, protoport('http'))) {
@@ -2632,6 +2611,87 @@ sub startservers {
$run{'https'}="$pid $pid2";
}
}
+ elsif($what eq "http/2") {
+ # http/2 server proxies to a http server
+ if($run{'http/2'} &&
+ !responsive_http_server("https", $verbose, 0, protoport('http2tls'))) {
+ logmsg "* restarting unresponsive HTTP/2 server\n";
+ if(stopserver('http/2')) {
+ return ("failed stopping unresponsive HTTP/2 server", 3);
+ }
+ # also stop http server, we do not know which state it is in
+ if($run{'http'} && stopserver('http')) {
+ return ("failed stopping HTTP server", 3);
+ }
+ }
+ # check a running http server if we not already checked http/2
+ if($run{'http'} && !$run{'http/2'} &&
+ !responsive_http_server("http", $verbose, 0,
+ protoport('http'))) {
+ if(stopserver('http')) {
+ return ("failed stopping unresponsive HTTP server", 3);
+ }
+ }
+ if(!$run{'http'}) {
+ ($serr, $pid, $pid2, $PORT{'http'}) =
+ runhttpserver("http", $verbose, 0);
+ if($pid <= 0) {
+ return ("failed starting HTTP server", $serr);
+ }
+ logmsg sprintf("* pid http => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'http'}="$pid $pid2";
+ }
+ if(!$run{'http/2'}) {
+ ($serr, $pid, $pid2, $PORT{"http2"}, $PORT{"http2tls"}) =
+ runhttp2server($verbose);
+ if($pid <= 0) {
+ return ("failed starting HTTP/2 server", $serr);
+ }
+ logmsg sprintf ("* pid http/2 => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'http/2'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "http/3") {
+ # http/3 server proxies to a http server
+ if($run{'http/3'} &&
+ !responsive_http_server("https", $verbose, 0, protoport('http3'), 1)) {
+ logmsg "* restarting unresponsive HTTP/3 server\n";
+ if(stopserver('http/3')) {
+ return ("failed stopping unresponsive HTTP/3 server", 3);
+ }
+ # also stop http server, we do not know which state it is in
+ if($run{'http'} && stopserver('http')) {
+ return ("failed stopping HTTP server", 3);
+ }
+ }
+ # check a running http server if we not already checked http/3
+ if($run{'http'} && !$run{'http/3'} &&
+ !responsive_http_server("http", $verbose, 0,
+ protoport('http'))) {
+ if(stopserver('http')) {
+ return ("failed stopping unresponsive HTTP server", 3);
+ }
+ }
+ if(!$run{'http'}) {
+ ($serr, $pid, $pid2, $PORT{'http'}) =
+ runhttpserver("http", $verbose, 0);
+ if($pid <= 0) {
+ return ("failed starting HTTP server", $serr);
+ }
+ logmsg sprintf("* pid http => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'http'}="$pid $pid2";
+ }
+ if(!$run{'http/3'}) {
+ ($serr, $pid, $pid2, $PORT{"http3"}) = runhttp3server($verbose);
+ if($pid <= 0) {
+ return ("failed starting HTTP/3 server", $serr);
+ }
+ logmsg sprintf ("* pid http/3 => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'http/3'}="$pid $pid2";
+ }
+ }
elsif($what eq "gophers") {
if(!$stunnel) {
# we can't run TLS tests without stunnel