line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Mock::LWP::UserAgent; |
2
|
|
|
|
|
|
|
|
3
|
2
|
|
|
2
|
|
2641
|
use 5.006002; |
|
2
|
|
|
|
|
11
|
|
4
|
|
|
|
|
|
|
|
5
|
2
|
|
|
2
|
|
10
|
use strict; |
|
2
|
|
|
|
|
6
|
|
|
2
|
|
|
|
|
59
|
|
6
|
2
|
|
|
2
|
|
9
|
use warnings; |
|
2
|
|
|
|
|
2
|
|
|
2
|
|
|
|
|
59
|
|
7
|
|
|
|
|
|
|
|
8
|
2
|
|
|
2
|
|
13
|
use Carp; |
|
2
|
|
|
|
|
4
|
|
|
2
|
|
|
|
|
114
|
|
9
|
2
|
|
|
2
|
|
13
|
use Digest::MD5 (); |
|
2
|
|
|
|
|
11
|
|
|
2
|
|
|
|
|
40
|
|
10
|
2
|
|
|
2
|
|
10
|
use File::Spec; |
|
2
|
|
|
|
|
12
|
|
|
2
|
|
|
|
|
62
|
|
11
|
2
|
|
|
2
|
|
12
|
use HTTP::Request; |
|
2
|
|
|
|
|
8
|
|
|
2
|
|
|
|
|
63
|
|
12
|
2
|
|
|
2
|
|
10
|
use HTTP::Response; |
|
2
|
|
|
|
|
7
|
|
|
2
|
|
|
|
|
55
|
|
13
|
2
|
|
|
2
|
|
25
|
use LWP::UserAgent; |
|
2
|
|
|
|
|
4
|
|
|
2
|
|
|
|
|
83
|
|
14
|
2
|
|
|
2
|
|
11
|
use JSON; |
|
2
|
|
|
|
|
4
|
|
|
2
|
|
|
|
|
21
|
|
15
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
our $VERSION = '0.162'; |
17
|
|
|
|
|
|
|
|
18
|
|
|
|
|
|
|
our $CANNED_RESPONSE_DIR = File::Spec->catdir( |
19
|
|
|
|
|
|
|
qw{ t data Mock-LWP-UserAgent } ); |
20
|
|
|
|
|
|
|
|
21
|
|
|
|
|
|
|
our $LOG_FILE_NAME = $ENV{MOCK_LWP_USERAGENT_LOG_FILE_NAME}; |
22
|
|
|
|
|
|
|
|
23
|
2
|
|
|
2
|
|
434
|
use constant HASH_REF => ref {}; |
|
2
|
|
|
|
|
5
|
|
|
2
|
|
|
|
|
286
|
|
24
|
|
|
|
|
|
|
|
25
|
|
|
|
|
|
|
$LOG_FILE_NAME |
26
|
|
|
|
|
|
|
and eval { |
27
|
|
|
|
|
|
|
require Test::More; |
28
|
|
|
|
|
|
|
1; |
29
|
|
|
|
|
|
|
} or $LOG_FILE_NAME = undef; |
30
|
|
|
|
|
|
|
|
31
|
|
|
|
|
|
|
## my %original = map { $_ => LWP::UserAgent->can( $_ ) } qw{ |
32
|
|
|
|
|
|
|
## new cookie_jar env_proxy get head post put request |
33
|
|
|
|
|
|
|
## }; |
34
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
sub import { |
36
|
|
|
|
|
|
|
|
37
|
2
|
|
|
2
|
|
12
|
$Astro::SpaceTrack::SPACETRACK_DELAY_SECONDS = 0; |
38
|
|
|
|
|
|
|
|
39
|
2
|
|
|
2
|
|
24
|
no warnings qw{ redefine }; |
|
2
|
|
|
|
|
4
|
|
|
2
|
|
|
|
|
3171
|
|
40
|
|
|
|
|
|
|
|
41
|
|
|
|
|
|
|
*LWP::UserAgent::new = sub { |
42
|
3
|
|
|
3
|
|
9
|
my ( $class ) = @_; |
43
|
3
|
|
33
|
|
|
69
|
return bless { |
44
|
|
|
|
|
|
|
json => JSON->new()->utf8()->pretty()->canonical(), |
45
|
|
|
|
|
|
|
}, ref $class || $class; |
46
|
2
|
|
|
|
|
174
|
}; |
47
|
|
|
|
|
|
|
|
48
|
|
|
|
|
|
|
*LWP::UserAgent::cookie_jar = sub { |
49
|
55
|
|
|
55
|
|
102
|
my ( $self, $data ) = @_; |
50
|
55
|
|
|
|
|
92
|
my $old = $self->{cookie_jar}; |
51
|
55
|
100
|
|
|
|
108
|
if ( $data ) { |
52
|
2
|
50
|
|
|
|
9
|
if ( HASH_REF eq ref $data ) { |
53
|
2
|
|
|
|
|
1037
|
require HTTP::Cookies; |
54
|
2
|
|
|
|
|
14056
|
$data = HTTP::Cookies->new( %{ $data } ); |
|
2
|
|
|
|
|
12
|
|
55
|
|
|
|
|
|
|
} |
56
|
2
|
|
|
|
|
46
|
$self->{cookie_jar} = $data; |
57
|
|
|
|
|
|
|
} |
58
|
55
|
|
|
|
|
163
|
return $old; |
59
|
2
|
|
|
|
|
131
|
}; |
60
|
|
|
|
|
|
|
|
61
|
|
|
|
|
|
|
*LWP::UserAgent::env_proxy = sub { |
62
|
2
|
|
|
2
|
|
6
|
return; |
63
|
2
|
|
|
|
|
73
|
}; |
64
|
|
|
|
|
|
|
|
65
|
|
|
|
|
|
|
*LWP::UserAgent::get = sub { |
66
|
48
|
|
|
48
|
|
86
|
my ( $self, $url ) = @_; |
67
|
48
|
|
|
|
|
101
|
return _fetch( $self, GET => $url ); |
68
|
2
|
|
|
|
|
28
|
}; |
69
|
|
|
|
|
|
|
|
70
|
|
|
|
|
|
|
*LWP::UserAgent::head = sub { |
71
|
0
|
|
|
0
|
|
0
|
my ( $self, $url ) = @_; |
72
|
0
|
|
|
|
|
0
|
return _fetch( $self, HEAD => $url ); |
73
|
2
|
|
|
|
|
31
|
}; |
74
|
|
|
|
|
|
|
|
75
|
|
|
|
|
|
|
*LWP::UserAgent::post = sub { |
76
|
2
|
|
|
2
|
|
8
|
my ( $self, $url ) = @_; |
77
|
2
|
|
|
|
|
7
|
return _fetch( $self, POST => $url ); |
78
|
2
|
|
|
|
|
22
|
}; |
79
|
|
|
|
|
|
|
|
80
|
|
|
|
|
|
|
*LWP::UserAgent::put = sub { |
81
|
0
|
|
|
0
|
|
0
|
my ( $self, $url ) = @_; |
82
|
0
|
|
|
|
|
0
|
return _fetch( $self, PUT => $url ); |
83
|
2
|
|
|
|
|
39
|
}; |
84
|
|
|
|
|
|
|
|
85
|
|
|
|
|
|
|
*LWP::UserAgent::request = sub { |
86
|
50
|
|
|
50
|
|
82
|
my ( $self, $rqst ) = @_; |
87
|
50
|
|
|
|
|
89
|
my $method = $rqst->method(); |
88
|
50
|
|
|
|
|
503
|
my $url = $rqst->url(); |
89
|
50
|
|
|
|
|
350
|
my $path = __file_name_for( $method, $url ); |
90
|
50
|
50
|
|
|
|
992
|
$LOG_FILE_NAME |
91
|
|
|
|
|
|
|
and Test::More::diag( "Reading $path\n for $method $url" ); |
92
|
50
|
100
|
|
|
|
1149
|
-f $path |
93
|
|
|
|
|
|
|
or return _fail( $rqst, 404, "File $path not found" ); |
94
|
49
|
|
|
|
|
266
|
local $/ = undef; |
95
|
2
|
50
|
|
2
|
|
12
|
open my $fh, '<:encoding(utf-8)', $path |
|
2
|
|
|
|
|
4
|
|
|
2
|
|
|
|
|
12
|
|
|
49
|
|
|
|
|
1933
|
|
96
|
|
|
|
|
|
|
or return _fail( $rqst, 500, "Failed to open $path: $!" ); |
97
|
49
|
|
|
|
|
36761
|
my $input = <$fh>; |
98
|
49
|
|
|
|
|
2101
|
close $fh; |
99
|
49
|
|
|
|
|
99
|
my @data; |
100
|
49
|
50
|
|
|
|
82
|
eval { |
101
|
49
|
|
|
|
|
60
|
@data = @{ $self->{json}->decode( $input ) }; |
|
49
|
|
|
|
|
1055
|
|
102
|
49
|
|
|
|
|
175
|
1; |
103
|
|
|
|
|
|
|
} or return _fail( $rqst, 500, "Failed to decode content of $path: $@" ); |
104
|
49
|
|
|
|
|
341
|
my $resp = HTTP::Response->new( @data[ 0 .. 3 ] ); |
105
|
49
|
|
|
|
|
8475
|
$resp->request( $rqst ); |
106
|
49
|
50
|
|
|
|
556
|
if ( my $jar = $self->cookie_jar() ) { |
107
|
49
|
|
|
|
|
125
|
$jar->extract_cookies( $resp ); |
108
|
|
|
|
|
|
|
} |
109
|
49
|
|
|
|
|
18674
|
return $resp; |
110
|
2
|
|
|
|
|
58
|
}; |
111
|
|
|
|
|
|
|
|
112
|
|
|
|
|
|
|
} |
113
|
|
|
|
|
|
|
|
114
|
|
|
|
|
|
|
sub _fail { |
115
|
1
|
|
|
1
|
|
5
|
my ( $rqst, $code, $msg ) = @_; |
116
|
1
|
|
|
|
|
5
|
my $resp = HTTP::Response->new( $code, $msg ); |
117
|
1
|
|
|
|
|
46
|
$resp->request( $rqst ); |
118
|
1
|
|
|
|
|
11
|
return $resp; |
119
|
|
|
|
|
|
|
} |
120
|
|
|
|
|
|
|
|
121
|
|
|
|
|
|
|
sub _fetch { |
122
|
50
|
|
|
50
|
|
114
|
my ( $self, $method, $url ) = @_; |
123
|
50
|
|
|
|
|
246
|
my $rqst = HTTP::Request->new( $method, $url ); |
124
|
50
|
|
|
|
|
11517
|
return $self->request( $rqst ); |
125
|
|
|
|
|
|
|
} |
126
|
|
|
|
|
|
|
|
127
|
|
|
|
|
|
|
sub __file_name_for { |
128
|
50
|
|
|
50
|
|
74
|
my ( $method, $url ) = @_; |
129
|
50
|
|
|
|
|
367
|
return File::Spec->catfile( |
130
|
|
|
|
|
|
|
$CANNED_RESPONSE_DIR, |
131
|
|
|
|
|
|
|
Digest::MD5::md5_hex( "$method-$url" ) . '.json', |
132
|
|
|
|
|
|
|
); |
133
|
|
|
|
|
|
|
} |
134
|
|
|
|
|
|
|
|
135
|
|
|
|
|
|
|
1; |
136
|
|
|
|
|
|
|
|
137
|
|
|
|
|
|
|
__END__ |