File Coverage

blib/lib/JMAP/Tester/UA/LWP.pm
Criterion Covered Total %
statement 63 63 100.0
branch 8 10 80.0
condition 3 7 42.8
subroutine 13 13 100.0
pod 0 5 0.0
total 87 98 88.7


line stmt bran cond sub pod time code
1 3     3   4069 use v5.14.0;
  3         9  
2 3     3   14 use warnings;
  3         9  
  3         183  
3              
4             package JMAP::Tester::UA::LWP 0.110;
5              
6 3     3   566 use Moo;
  3         7075  
  3         16  
7             with 'JMAP::Tester::Role::UA';
8              
9 3     3   2189 use experimental 'signatures';
  3         3006  
  3         17  
10              
11 3     3   447 use Carp ();
  3         4  
  3         59  
12 3     3   519 use Future;
  3         12373  
  3         1637  
13              
14             has lwp => (
15             is => 'ro',
16             lazy => 1,
17             default => sub ($self) {
18             require LWP::UserAgent;
19             my $lwp = LWP::UserAgent->new(keep_alive => 1);
20             $lwp->cookie_jar({});
21              
22             $lwp->default_header('Content-Type' => 'application/json');
23              
24             if ($ENV{IGNORE_INVALID_CERT}) {
25             $lwp->ssl_opts(SSL_verify_mode => 0, verify_hostname => 0);
26             }
27              
28             return $lwp;
29             },
30             );
31              
32 4     4 0 2756 sub set_cookie ($self, $arg) {
  4         8  
  4         5  
  4         4  
33 4         6 for (qw(api_uri name value)) {
34 9 100       832 Carp::confess("can't set_cookie without $_") unless $arg->{$_};
35             }
36              
37 1         8 my $uri = URI->new($arg->{api_uri});
38              
39             $self->lwp->cookie_jar->set_cookie(
40             1,
41             $arg->{name},
42             $arg->{value},
43             '/',
44             $arg->{domain} // $uri->host,
45             $uri->port,
46             0,
47             ($uri->port == 443 ? 1 : 0),
48             86400,
49             0,
50             $arg->{rest} || {},
51 1 50 33     7331 );
      50        
52             }
53              
54 1     1 0 203 sub scan_cookies ($self, $callback) {
  1         3  
  1         1  
  1         1  
55 1         17 return $self->lwp->cookie_jar->scan($callback);
56             }
57              
58 1     1 0 5 sub get_default_header ($self, $name) {
  1         1  
  1         2  
  1         1  
59 1         25 return scalar $self->lwp->default_header($name);
60             }
61              
62 1     1 0 329111 sub set_default_header ($self, $name, $value) {
  1         2  
  1         9  
  1         1  
  1         7  
63 1         14 $self->lwp->default_header($name, $value);
64 1         49 return;
65             }
66              
67 10     10 0 19 sub request ($self, $tester, $req, $log_type, $log_extra = undef) {
  10         13  
  10         14  
  10         12  
  10         14  
  10         16  
  10         10  
68 10 50       56 Carp::cluck("something very strange happened") unless $tester->can('_logger');
69 10         21 my $logger = $tester->_logger;
70              
71 10   50     28 my $log_method = "log_" . ($log_type // 'jmap') . '_request';
72 10 100       47 if ($logger->can($log_method)) {
73             $self->lwp->set_my_handler(request_send => sub {
74 7     7   5312 my ($req) = @_;
75 7 100       52 $logger->$log_method(
76             $tester,
77             {
78             ($log_extra ? %$log_extra : ()),
79             http_request => $req,
80             }
81             );
82 7         19 return;
83 7         137 });
84             }
85              
86 10         659 my $http_res = $self->lwp->request($req);
87              
88             # Clear our handler, or it will get called for
89             # any http request our ua makes!
90 10         21154 $self->lwp->set_my_handler(request_send => undef);
91              
92 10         607 return Future->done($http_res);
93             }
94              
95 3     3   18 no Moo;
  3         3  
  3         14  
96             1;
97              
98             __END__