summaryrefslogtreecommitdiffstats
path: root/debian/vendor-h2o/t/50file-custom-handler.t
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--debian/vendor-h2o/t/50file-custom-handler.t96
1 files changed, 96 insertions, 0 deletions
diff --git a/debian/vendor-h2o/t/50file-custom-handler.t b/debian/vendor-h2o/t/50file-custom-handler.t
new file mode 100644
index 0000000..1acc9c1
--- /dev/null
+++ b/debian/vendor-h2o/t/50file-custom-handler.t
@@ -0,0 +1,96 @@
+use strict;
+use warnings;
+use Test::More;
+use t::Util;
+
+plan skip_all => 'curl not found'
+ unless prog_exists('curl');
+
+subtest 'cgi file' => 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";
+ });
+};
+
+subtest 'directory containing cgi files' => 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:
+ /:
+ file.dir: @{[DOC_ROOT]}
+EOT
+ run_with_curl($server, sub {
+ my ($proto, $port, $cmd) = @_;
+ my $resp = `$cmd --silent $proto://127.0.0.1:$port/hello.cgi?name=Tobor`;
+ is $resp, "Hello Tobor";
+ });
+};
+
+subtest 'SCRIPT_NAME and PATH_INFO for fastcgi' => sub {
+ eval q{use CGI; 1}
+ or plan skip_all => 'CGI.pm not found';
+
+ # spawn h2o
+ my $server = spawn_h2o(<< "EOT");
+file.index: ['printenv.cgi']
+file.custom-handler:
+ extension: .cgi
+ fastcgi.spawn: "exec \$H2O_ROOT/share/h2o/fastcgi-cgi"
+hosts:
+ default:
+ paths:
+ /:
+ file.dir: @{[DOC_ROOT]}
+ /foo:
+ file.dir: @{[DOC_ROOT]}
+EOT
+ my $doit = sub {
+ my ($path, $expected) = @_;
+ subtest $path => sub {
+ my $resp = `curl --silent http://127.0.0.1:$server->{port}$path`;
+ my $env = +{ map { split(':', $_, 2) } split(/\n/, $resp) };
+ for my $key (sort keys %$expected) {
+ is $env->{$key}, $expected->{$key}, $key;
+ }
+ };
+ };
+
+ $doit->('/printenv.cgi',
+ +{ SCRIPT_NAME => '/printenv.cgi', PATH_INFO => undef });
+ $doit->('/printenv.cgi/path/info',
+ +{ SCRIPT_NAME => '/printenv.cgi', PATH_INFO => '/path/info' });
+ $doit->('/foo/printenv.cgi/path/info',
+ +{ SCRIPT_NAME => '/foo/printenv.cgi', PATH_INFO => '/path/info' });
+ $doit->('/',
+ +{ SCRIPT_NAME => '/printenv.cgi', PATH_INFO => undef });
+ $doit->('/foo/',
+ +{ SCRIPT_NAME => '/foo/printenv.cgi', PATH_INFO => undef });
+
+};
+
+done_testing;
+