Add pod for the external method 'psgienv'
[catagits/Catalyst-Runtime.git] / t / psgi-log.t
CommitLineData
a11b553f 1=head1 PROBLEM
2
3In https://github.com/plack/Plack/commit/cafa5db84921f020183a9c834fd6a4541e5a6b84
4chansen made a change to the FCGI handler in Plack, in which he replaced
5STDERR, STDOUT and STDIN with proper IO::Handle objects.
6
7The side effect of that change is that catalyst outputing logs on STDERR will
8no longer end up by default in the error log of the webserver when running
9under FCGI. This test tries to make sure we use the propper parts of the psgi
10environment when we output things from Catalyst::Log.
11
12There is one more "regression", and that is warnings. By using
13Catalyst::Plugin::LogWarnings, you also get those in the right place if this
14test passes :)
15
16=cut
17
2d5279cd 18use strict;
19use warnings;
20no warnings 'once';
21use FindBin;
22use lib "$FindBin::Bin/lib";
23
24use Test::More;
25
26use File::Spec;
27use File::Temp qw/ tempdir /;
28
29use TestApp;
30
31use Plack::Builder;
32use Plack::Test;
33use 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
50subtest "psgi.errors" => sub{
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, "one event output");
73 like($logs[0], qr/debug$/, "event matches test data");
74 };
75};
76
77subtest "psgix.logger" => sub {
78
79 my @logs;
80 my $logger = sub {
81 push(@logs, @_);
82 };
83 my $app = builder {
84 enable sub {
85 my $app = shift;
86 sub {
87 my $env = shift;
88 $env->{'psgix.logger'} = $logger;
89 $app->($env);
90 };
91 };
92 TestApp->psgi_app;
93 };
94
95 test_psgi $app, sub {
96 my $cb = shift;
97 my $res = $cb->(GET "/log/debug");
98 is(scalar(@logs), 1, "one event logged");
99 is_deeply($logs[0], { level => 'debug', message => "debug" }, "right stuff");
100 };
101};
102
103
104
105done_testing;