summaryrefslogtreecommitdiffstats
path: root/web/server/h2o/libh2o/t/40protocol.t
diff options
context:
space:
mode:
Diffstat (limited to 'web/server/h2o/libh2o/t/40protocol.t')
-rw-r--r--web/server/h2o/libh2o/t/40protocol.t63
1 files changed, 63 insertions, 0 deletions
diff --git a/web/server/h2o/libh2o/t/40protocol.t b/web/server/h2o/libh2o/t/40protocol.t
new file mode 100644
index 000000000..e12f01604
--- /dev/null
+++ b/web/server/h2o/libh2o/t/40protocol.t
@@ -0,0 +1,63 @@
+use strict;
+use warnings;
+use Digest::MD5 qw(md5_hex);
+use Test::More;
+use t::Util;
+
+my %files = map { do {
+ my $fn = DOC_ROOT . "/$_";
+ +($_ => { size => +(stat $fn)[7], md5 => md5_file($fn) });
+} } qw(index.txt halfdome.jpg);
+
+my $server = spawn_h2o(<< "EOT");
+hosts:
+ default:
+ paths:
+ /:
+ file.dir: @{[ DOC_ROOT ]}
+EOT
+
+my $port = $server->{port};
+my $tls_port = $server->{tls_port};
+
+subtest 'curl' => sub {
+ run_with_curl($server, sub {
+ my ($proto, $port, $curl) = @_;
+ for my $file (sort keys %files) {
+ my $content = `$curl --silent --show-error $proto://127.0.0.1:$port/$file`;
+ is length($content), $files{$file}->{size}, "$file (size)";
+ is md5_hex($content), $files{$file}->{md5}, "$file (md5)";
+ }
+ });
+};
+
+subtest 'nghttp' => sub {
+ plan skip_all => 'nghttp not found'
+ unless prog_exists('nghttp');
+ my $doit = sub {
+ my ($proto, $port) = @_;
+ my $opt = $proto eq 'http' ? '-u' : '';
+ for my $file (sort keys %files) {
+ my $content = `nghttp $opt $proto://127.0.0.1:$port/$file`;
+ is length($content), $files{$file}->{size}, "$proto://127.0.0.1/$file (size)";
+ is md5_hex($content), $files{$file}->{md5}, "$proto://127.0.0.1/$file (md5)";
+ }
+ my $out = `nghttp -u -m 100 $proto://127.0.0.1:$port/index.txt`;
+ is $out, "hello\n" x 100, "$proto://127.0.0.1/index.txt x 100 times";
+ };
+ $doit->('http', $port);
+ subtest 'https' => sub {
+ plan skip_all => 'OpenSSL does not support protocol negotiation; it is too old'
+ unless openssl_can_negotiate();
+ $doit->('https', $tls_port);
+ };
+};
+
+subtest 'ab' => sub {
+ plan skip_all => 'ab not found'
+ unless prog_exists('ab');
+ ok(system("ab -c 10 -n 10000 -k http://127.0.0.1:$port/index.txt") == 0);
+ ok(system("ab -f tls1 -c 10 -n 10000 -k https://127.0.0.1:$tls_port/index.txt") == 0);
+};
+
+done_testing;