use Test::More; use HTTP::Proxy qw(:log); use strict; my %mask = ( CONNECT => CONNECT, DATA => DATA, ENGINE => ENGINE, ERROR => ERROR, FILTERS => FILTERS, HEADERS => HEADERS, PROCESS => PROCESS, PROXY => PROXY, SOCKET => SOCKET, STATUS => STATUS, ); # try all combinations my @tests = ( [ NONE, qw( ERROR ) ], [ PROXY, qw( ERROR PROXY ) ], [ STATUS | SOCKET, qw( ERROR SOCKET STATUS ) ], [ DATA | STATUS | SOCKET, qw( DATA ERROR SOCKET STATUS ) ], [ ALL, qw( CONNECT DATA ENGINE ERROR FILTERS HEADERS PROCESS PROXY SOCKET STATUS ) ], ); my $t; $t += @$_ - 1 for @tests; plan tests => $t; # communicate with a pipe pipe my ( $rh, $wh ); select( ( select($wh), $| = 1 )[0] ); # the proxy logs error to the pipe my $proxy = HTTP::Proxy->new( logfh => $wh ); for (@tests) { my ( $mask, @msgs ) = @$_; $proxy->logmask($mask); $proxy->log( $mask{$_}, 'TEST', $_ ) for sort keys %mask; like( <$rh>, qr/TEST: $_$/, "mask $mask: $_ message" ) for @msgs; } close $wh; print for <$rh>;