File Coverage

blib/lib/Test2/Tools/HTTP/UA/LWPClass.pm
Criterion Covered Total %
statement 42 45 93.3
branch 5 8 62.5
condition 3 12 25.0
subroutine 11 11 100.0
pod 0 2 0.0
total 61 78 78.2


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