File Coverage

blib/lib/JMAP/Tester/UA/LWP.pm
Criterion Covered Total %
statement 38 63 60.3
branch 5 10 50.0
condition 1 7 14.2
subroutine 9 13 69.2
pod 0 5 0.0
total 53 98 54.0


line stmt bran cond sub pod time code
1 3     3   291043 use v5.14.0;
  3         13  
2 3     3   19 use warnings;
  3         6  
  3         284  
3              
4             package JMAP::Tester::UA::LWP 0.109;
5              
6 3     3   467 use Moo;
  3         7018  
  3         60  
7             with 'JMAP::Tester::Role::UA';
8              
9 3     3   2717 use experimental 'signatures';
  3         1154  
  3         24  
10              
11 3     3   555 use Carp ();
  3         6  
  3         68  
12 3     3   540 use Future;
  3         12906  
  3         2519  
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 0     0 0 0 sub set_cookie ($self, $arg) {
  0         0  
  0         0  
  0         0  
33 0         0 for (qw(api_uri name value)) {
34 0 0       0 Carp::confess("can't set_cookie without $_") unless $arg->{$_};
35             }
36              
37 0         0 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 0 0 0     0 );
      0        
52             }
53              
54 0     0 0 0 sub scan_cookies ($self, $callback) {
  0         0  
  0         0  
  0         0  
55 0         0 return $self->lwp->cookie_jar->scan($callback);
56             }
57              
58 0     0 0 0 sub get_default_header ($self, $name) {
  0         0  
  0         0  
  0         0  
59 0         0 return scalar $self->lwp->default_header($name);
60             }
61              
62 0     0 0 0 sub set_default_header ($self, $name, $value) {
  0         0  
  0         0  
  0         0  
  0         0  
63 0         0 $self->lwp->default_header($name, $value);
64 0         0 return;
65             }
66              
67 9     9 0 20 sub request ($self, $tester, $req, $log_type, $log_extra = undef) {
  9         17  
  9         15  
  9         15  
  9         14  
  9         14  
  9         15  
68 9 50       57 Carp::cluck("something very strange happened") unless $tester->can('_logger');
69 9         24 my $logger = $tester->_logger;
70              
71 9   50     30 my $log_method = "log_" . ($log_type // 'jmap') . '_request';
72 9 100       51 if ($logger->can($log_method)) {
73             $self->lwp->set_my_handler(request_send => sub {
74 6     6   5067 my ($req) = @_;
75 6 100       49 $logger->$log_method(
76             $tester,
77             {
78             ($log_extra ? %$log_extra : ()),
79             http_request => $req,
80             }
81             );
82 6         20 return;
83 6         130 });
84             }
85              
86 9         631 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 9         21701 $self->lwp->set_my_handler(request_send => undef);
91              
92 9         699 return Future->done($http_res);
93             }
94              
95 3     3   26 no Moo;
  3         6  
  3         20  
96             1;
97              
98             __END__