X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Frequest_mode_heuristics.t;fp=t%2Frequest_mode_heuristics.t;h=848a22ea3c2fe81af6260b6c7d063f16209a7953;hb=f11512a92a7122690755b6bb97d2da160c662280;hp=0000000000000000000000000000000000000000;hpb=7b930ebb30cddbb0133a0ad20e72d60a5eed5d19;p=catagits%2FWeb-Simple.git diff --git a/t/request_mode_heuristics.t b/t/request_mode_heuristics.t new file mode 100644 index 0000000..848a22e --- /dev/null +++ b/t/request_mode_heuristics.t @@ -0,0 +1,52 @@ +use strictures; + +use Test::More; +use Web::Simple::Application; +use Socket; + +run(); +done_testing; + +sub run { + + my $a = Web::Simple::Application->new; + + my ( $cli, $cgi, $fcgi, $test ) = qw( cli cgi fcgi test ); + + my $res; + no warnings 'redefine'; + local *Web::Simple::Application::_run_fcgi = sub { $res = "fcgi" }; + local *Web::Simple::Application::_run_cgi = sub { $res = "cgi" }; + local *Web::Simple::Application::_run_cli = sub { $res = "cli" }; + local *Web::Simple::Application::_run_cli_test_request = sub { $res = "test" }; + use strictures; + + { + $a->run; + is $res, "cli", "empty invocation goes to CLI mode"; + } + + SKIP: { + skip "windows does not support the needed socket manipulation", 2 if $^O eq 'MSWin32' or $^O eq 'cygwin'; + { + socket my $socket, AF_INET, SOCK_STREAM, 0 or die "socket: $!"; + open my $old_in, '<&STDIN' or die "open: $!"; + open STDIN, '<&', $socket or die "open: $!"; + $a->run; + is $res, "fcgi", "STDIN being a socket means FCGI"; + open STDIN, '<&', $old_in or die "open: $!"; + } + + { + local $ENV{GATEWAY_INTERFACE} = "CGI 1.1"; + socket my $socket, AF_INET, SOCK_STREAM, 0 or die "socket: $!"; + open my $old_in, '<&STDIN' or die "open: $!"; + open STDIN, '<&', $socket or die "open: $!"; + $a->run; + isnt $res, "fcgi", "STDIN being a socket doesn't mean FCGI if GATEWAY_INTERFACE is set"; + open STDIN, '<&', $old_in or die "open: $!"; + } + } + + return; +}