summaryrefslogtreecommitdiffstats
path: root/web/server/h2o/libh2o/t/50file-file.t
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--web/server/h2o/libh2o/t/50file-file.t54
1 files changed, 54 insertions, 0 deletions
diff --git a/web/server/h2o/libh2o/t/50file-file.t b/web/server/h2o/libh2o/t/50file-file.t
new file mode 100644
index 00000000..7dd3b922
--- /dev/null
+++ b/web/server/h2o/libh2o/t/50file-file.t
@@ -0,0 +1,54 @@
+use strict;
+use warnings;
+use Test::More;
+use t::Util;
+
+plan skip_all => 'curl not found'
+ unless prog_exists('curl');
+
+subtest 'static' => sub {
+ my $server = spawn_h2o(<< "EOT");
+hosts:
+ default:
+ paths:
+ /favicon.ico:
+ file.file: @{[DOC_ROOT]}/halfdome.jpg
+EOT
+ run_with_curl($server, sub {
+ my ($proto, $port, $cmd) = @_;
+ my $fetch = sub {
+ my $path = shift;
+ return `$cmd --silent --dump-header /dev/stderr --max-redirs 0 $proto://127.0.0.1:$port$path 2>&1 > /dev/null`;
+ };
+ my $resp = $fetch->("/");
+ like $resp, qr{^HTTP/[0-9\.]+ 404}is;
+ $resp = $fetch->("/favicon.ico");
+ like $resp, qr{^HTTP/[0-9\.]+ 200}is;
+ like $resp, qr{^content-type:\s*image/jpeg\r$}im; # type is inferred from the extension of the real file
+ like $resp, qr{^content-length:\s*@{[(stat "@{[DOC_ROOT]}/halfdome.jpg")[7]]}\r$}im;
+ });
+};
+
+subtest 'dynamic' => sub {
+ eval q{use CGI; 1}
+ or plan skip_all => 'CGI.pm not found';
+
+ # spawn h2o
+ my $server = spawn_h2o(<< "EOT");
+file.custom-handler:
+ extension: .cgi
+ fastcgi.spawn: "exec \$H2O_ROOT/share/h2o/fastcgi-cgi"
+hosts:
+ default:
+ paths:
+ /robots.txt:
+ file.file: @{[DOC_ROOT]}/hello.cgi
+EOT
+ run_with_curl($server, sub {
+ my ($proto, $port, $cmd) = @_;
+ my $resp = `$cmd --silent $proto://127.0.0.1:$port/robots.txt?name=Tobor`;
+ is $resp, "Hello Tobor";
+ });
+};
+
+done_testing;