why not just add to the maddness if its already there?
[catagits/Catalyst-Runtime.git] / t / psgi-log.t
1 =head1 PROBLEM
2
3 In https://github.com/plack/Plack/commit/cafa5db84921f020183a9c834fd6a4541e5a6b84
4 chansen made a change to the FCGI handler in Plack, in which he replaced
5 STDERR, STDOUT and STDIN with proper IO::Handle objects.
6
7 The side effect of that change is that catalyst outputing logs on STDERR will
8 no longer end up by default in the error log of the webserver when running
9 under FCGI. This test tries to make sure we use the propper parts of the psgi
10 environment when we output things from Catalyst::Log.
11
12 There is one more "regression", and that is warnings. By using
13 Catalyst::Plugin::LogWarnings, you also get those in the right place if this
14 test passes :)
15
16 =cut
17
18 use strict;
19 use warnings;
20 no warnings 'once';
21 use FindBin;
22 use lib "$FindBin::Bin/lib";
23
24 use Test::More;
25
26 use File::Spec;
27 use File::Temp qw/ tempdir /;
28
29 use TestApp;
30
31 use Plack::Builder;
32 use Plack::Test;
33 use HTTP::Request::Common;
34
35 {
36     package MockHandle;
37     use Moose;
38
39     has 'log' => (is => 'ro', isa => 'ArrayRef', traits => ['Array'], default => sub { [] },
40         handles => {
41             'logs' => 'elements',
42             'print' => 'push',
43         }
44     );
45
46     no Moose;
47 }
48
49 #subtest "psgi.errors" => sub
50 {
51
52     my $handle = MockHandle->new();
53     my $app = builder {
54
55         enable sub {
56             my $app = shift;
57             sub {
58                 my $env = shift;
59                 $env->{'psgi.errors'} = $handle;
60                 my $res = $app->($env);
61                 return $res;
62             };
63         };
64         TestApp->psgi_app;
65     };
66
67
68     test_psgi $app, sub {
69         my $cb = shift;
70         my $res = $cb->(GET "/log/debug");
71         my @logs = $handle->logs;
72         is(scalar(@logs), 1, "psgi.errors: one event output");
73         like($logs[0], qr/debug$/, "psgi.errors: event matches test data");
74     };
75 };
76
77 #subtest "psgix.logger" => sub
78 {
79
80     my @logs;
81     my $logger = sub {
82         push(@logs, @_);
83     };
84     my $app = builder {
85         enable sub {
86             my $app = shift;
87             sub {
88                 my $env = shift;
89                 $env->{'psgix.logger'} = $logger;
90                 $app->($env);
91             };
92         };
93         TestApp->psgi_app;
94     };
95
96     test_psgi $app, sub {
97         my $cb = shift;
98         my $res = $cb->(GET "/log/debug");
99         is(scalar(@logs), 1, "psgix.logger: one event logged");
100         is_deeply($logs[0], { level => 'debug', message => "debug" }, "psgix.logger: right stuff");
101     };
102 };
103
104
105
106 done_testing;