diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-03-09 13:19:48 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-03-09 13:20:02 +0000 |
commit | 58daab21cd043e1dc37024a7f99b396788372918 (patch) | |
tree | 96771e43bb69f7c1c2b0b4f7374cb74d7866d0cb /web/server/h2o/libh2o/t/50server-starter.t | |
parent | Releasing debian version 1.43.2-1. (diff) | |
download | netdata-58daab21cd043e1dc37024a7f99b396788372918.tar.xz netdata-58daab21cd043e1dc37024a7f99b396788372918.zip |
Merging upstream version 1.44.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'web/server/h2o/libh2o/t/50server-starter.t')
-rw-r--r-- | web/server/h2o/libh2o/t/50server-starter.t | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/web/server/h2o/libh2o/t/50server-starter.t b/web/server/h2o/libh2o/t/50server-starter.t new file mode 100644 index 000000000..9be37d378 --- /dev/null +++ b/web/server/h2o/libh2o/t/50server-starter.t @@ -0,0 +1,103 @@ +use strict; +use warnings; +use Digest::MD5 qw(md5_hex); +use File::Temp qw(tempdir); +use Test::More; +use t::Util; + +plan skip_all => 'start_server not found' + unless prog_exists('start_server'); + +my $tempdir = tempdir(CLEANUP => 1); + +subtest "master-mode" => sub { + my $server = spawn_h2o({ + opts => [ qw(--mode=master) ], + conf => << "EOT", +pid-file: $tempdir/h2o.pid +hosts: + default: + paths: + /: + file.dir: @{[ DOC_ROOT ]} +EOT + }); + + subtest 'before-HUP' => sub { + is read_file("$tempdir/h2o.pid"), "$server->{pid}\n", "pid"; + fetch_test($server->{port}, $server->{tls_port}); + }; + kill 'HUP', $server->{pid}; + sleep 1; + subtest 'after-HUP' => sub { + fetch_test($server->{port}, $server->{tls_port}); + is read_file("$tempdir/h2o.pid"), "$server->{pid}\n", "pid unchanged"; + }; + + undef $server; + + ok ! stat("$tempdir/h2o.pid"), "pid-file is unlinked"; +}; + +subtest "daemon-mode" => sub { + my $server = spawn_h2o({ + opts => [ qw(--mode=daemon) ], + conf => << "EOT", +pid-file: $tempdir/h2o.pid +error-log: $tempdir/h2o.error +hosts: + default: + paths: + /: + file.dir: @{[ DOC_ROOT ]} +EOT + }); + my ($port, $tls_port) = map { $server->{$_} } qw(port tls_port); + + sleep 1; + undef $server; # should have performed a double-fork by now + + my $pid = read_file("$tempdir/h2o.pid"); + chomp $pid; + + subtest 'before-HUP' => sub { + fetch_test($port, $tls_port); + }; + kill 'HUP', $pid; + sleep 1; + subtest 'after-HUP' => sub { + fetch_test($port, $tls_port); + is read_file("$tempdir/h2o.pid"), "$pid\n", "pid unchanged"; + }; + + kill 'TERM', $pid; + sleep 1; + ok ! stat("$tempdir/h2o.pid"), "pid-file is unlinked"; +}; + +done_testing; + +sub fetch_test { + my ($port, $tls_port) = @_; + + plan skip_all => 'curl not found' + unless prog_exists('curl'); + my $curl = "curl --insecure"; + $curl .= " --http1.1" + if curl_supports_http2(); + + my $doit = sub { + my ($proto, $port) = @_; + my $content = `$curl --silent --show-error $proto://127.0.0.1:$port/`; + is md5_hex($content), md5_file(DOC_ROOT . "/index.txt"), $proto; + }; + $doit->("http", $port); + $doit->("https", $tls_port); +} + +sub read_file { + my $fn = shift; + open my $fh, '<', $fn + or die "failed to open file:$fn:$!"; + join '', <$fh>; +} |