1use Test::More;
2use HTTP::Proxy qw(:log);
3use strict;
4
5my %mask = (
6    CONNECT => CONNECT,
7    DATA    => DATA,
8    ENGINE  => ENGINE,
9    ERROR   => ERROR,
10    FILTERS => FILTERS,
11    HEADERS => HEADERS,
12    PROCESS => PROCESS,
13    PROXY   => PROXY,
14    SOCKET  => SOCKET,
15    STATUS  => STATUS,
16);
17
18# try all combinations
19
20my @tests = (
21    [ NONE,                   qw( ERROR ) ],
22    [ PROXY,                  qw( ERROR PROXY ) ],
23    [ STATUS | SOCKET,        qw( ERROR SOCKET STATUS ) ],
24    [ DATA | STATUS | SOCKET, qw( DATA ERROR SOCKET STATUS ) ],
25    [   ALL, qw( CONNECT DATA ENGINE ERROR FILTERS
26            HEADERS PROCESS PROXY SOCKET STATUS )
27    ],
28);
29
30my $t;
31$t += @$_ - 1 for @tests;
32plan tests => $t;
33
34# communicate with a pipe
35pipe my ( $rh, $wh );
36select( ( select($wh), $| = 1 )[0] );
37
38# the proxy logs error to the pipe
39my $proxy = HTTP::Proxy->new( logfh => $wh );
40
41for (@tests) {
42    my ( $mask, @msgs ) = @$_;
43    $proxy->logmask($mask);
44    $proxy->log( $mask{$_}, 'TEST', $_ ) for sort keys %mask;
45    like( <$rh>, qr/TEST: $_$/, "mask $mask: $_ message" ) for @msgs;
46}
47close $wh;
48print for <$rh>;
49
50