File Coverage

blib/lib/Test2/Tools/HTTP/UA/LWPClass.pm
Criterion Covered Total %
statement 40 43 93.0
branch 5 8 62.5
condition 4 12 33.3
subroutine 10 10 100.0
pod 0 2 0.0
total 59 75 78.6


line stmt bran cond sub pod time code
1             package Test2::Tools::HTTP::UA::LWPClass;
2              
3 7     7   188121 use strict;
  7         17  
  7         185  
4 7     7   55 use warnings;
  7         13  
  7         146  
5 7     7   471 use URI;
  7         3937  
  7         164  
6 7     7   34 use parent 'Test2::Tools::HTTP::UA';
  7         13  
  7         46  
7              
8             # ABSTRACT: Global LWP user agent wrapper for Test2::Tools::HTTP
9             our $VERSION = '0.10'; # VERSION
10              
11              
12             my %orig;
13             my $ua;
14              
15             sub instrument
16             {
17 1     1 0 5 my($self) = @_;
18              
19 1         5 require LWP::Protocol;
20 1         529 require LWP::UserAgent;
21              
22 1         12765 foreach my $proto (qw( http https ))
23             {
24 2   66     9 $orig{$proto} ||= do {
25 2         7 my $orig = LWP::Protocol::implementor($proto);
26 2         25966 LWP::Protocol::implementor($proto, 'Test2::Tools::HTTP::UA::LWPClass::Proto');
27 2         25 $orig;
28             };
29             }
30              
31 1   33     10 $ua ||= LWP::UserAgent->new;
32             }
33              
34             sub request
35             {
36 3     3 0 3391 my($self, $req, %options) = @_;
37              
38 3 50 33     8 if($self->apps->uri_to_app($req->uri) && $req->uri =~ /^\//)
39             {
40 0         0 $req->uri(
41             URI->new_abs($req->uri, $self->apps->base_url),
42             );
43             }
44              
45             my $res = $options{follow_redirects}
46 3 100       52 ? $ua->request($req)
47             : $ua->simple_request($req);
48              
49 3 50       8390 if(my $warning = $res->header('Client-Warning'))
50             {
51 0   0     0 $self->error(
52             "connection error: " . ($res->decoded_content || $warning),
53             $res,
54             );
55             }
56              
57 3         137 $res;
58             }
59              
60             __PACKAGE__->register('LWP::UserAgent', 'class');
61              
62             package Test2::Tools::HTTP::UA::LWPClass::Proto;
63              
64 7     7   2194 use parent qw(LWP::Protocol);
  7         14  
  7         39  
65 7     7   42283 use HTTP::Message::PSGI qw( req_to_psgi res_from_psgi );
  7         51844  
  7         1113  
66              
67 5     5   19 sub apps { Test2::Tools::HTTP::UA->apps }
68              
69             sub request
70             {
71 5     5   3874 my($self, $req, $proxy, $arg, @rest) = @_;
72              
73 5 50       13 if(my $app = $self->apps->uri_to_app($req->uri))
74             {
75 5         15 my $env = req_to_psgi $req;
76 5         3334 my $res = res_from_psgi $app->($env);
77 5         730 my $content = $res->content;
78 5         52 $res->content('');
79 5         76 return $self->collect_once($arg, $res, $content);
80             }
81             else
82             {
83 0           return $orig{$self->{scheme}}->new($self->{scheme}, $self->{ua})->request($req, $proxy, $arg, @rest);
84             }
85             }
86              
87             1;
88              
89             __END__