Browsermob-Proxy
view release on metacpan or search on metacpan
ok($req->method eq 'GET', 'retrieving a har via GET');
$req->new_response(200, ['Content-Type' => 'application/json'], fake_har_fixture());
};
my $proxy = Browsermob::Proxy->new(
server_port => $server_port,
port => $port,
mock => $har_server
);
my $har = $proxy->har;
isa_ok($har, 'HASH', 'the retrieved har is a hash');
ok(exists $har->{log}, 'with a log entry');
ok(exists $har->{log}->{entries}->[0], 'that has an entries arrayref');
}
}
CAPABILITIES: {
MANUAL_HAR: {
my $proxy = Browsermob::Proxy->new(
server_port => $server_port,
port => $port,
mock => generate_mock_server()
);
my $caps = $proxy->selenium_proxy(1);
isa_ok($caps, 'HASH', 'caps is a hashref');
ok($caps->{proxyType} eq 'manual', 'and has a proxyType');
ok($caps->{httpProxy} =~ /$port/i, 'and a httpUrl proxyType to the correct port');
my $addr = $proxy->server_addr;
cmp_ok($caps->{httpProxy}, '=~', qr/$addr/i, 'and the correct server addr');
ok($caps->{sslProxy} =~ /$port/i, 'and a httpUrl proxyType to the correct port in SSL');
$addr = $proxy->server_addr;
cmp_ok($caps->{sslProxy}, '=~', qr/$addr/i, 'and the correct server addr in SSL');
}
AUTOMATIC_NEW_HAR: {
my $new_har_was_called = 0;
my $mock_server = generate_mock_server();
$mock_server->{'/proxy/' . $port . '/har'} = sub {
my $req = shift;
$new_har_was_called++;
$req->new_response(200, ['Content-Type' => 'application/json'], "");
};
my $caps = Browsermob::Proxy->new(
server_port => $server_port,
port => $port,
mock => $mock_server
)->selenium_proxy;
ok($new_har_was_called, 'invoking selenium_proxy creates a new har by default');
}
FIREFOX_PROXY: {
my $mock_server = generate_mock_server();
my $firefox_prefs = Browsermob::Proxy->new(
server_port => $server_port,
port => $port,
mock => $mock_server
)->firefox_proxy('do not initiate');
my @required_keys = qw/
network.proxy.type
network.proxy.http
network.proxy.http_port
network.proxy.ssl
network.proxy.ssl_port
/;
foreach (@required_keys) {
ok(exists $firefox_prefs->{$_}, $_ . ' exists in firefox prefs.');
}
}
}
BASIC_AUTH: {
UNIT: {
my $mock_server = generate_mock_server();
$mock_server->{'/proxy/' . $port . '/auth/basic/.google.com'} = sub {
my $req = shift;
my $body = from_json($req->body);
ok($body->{username} eq 'bmp', 'user is included in payload');
ok($body->{password} eq 'pass', 'pass is included in payload');
return $req->new_response(200, ['Content-Type' => 'application/json'], "");
};
my $proxy = Browsermob::Proxy->new(
server_port => $server_port,
port => $port,
mock => $mock_server
);
try {
$proxy->add_basic_auth({
username => 'missing keys'
});
}
catch {
ok($_ =~ /required parameter/, 'basic auth checks for required parameters');
};
$proxy->add_basic_auth({
domain => '.google.com',
username => 'bmp',
password => 'pass'
});
}
INTEGRATION: {
SKIP: {
skip 'Bug in LittleProxy does not set auth', 1;
use Net::Ping;
my $p = Net::Ping->new('tcp', 1);
skip 'cannot reach webdav.org', 1 unless $p->ping('test.webdav.org');
my $proxy;
try {
$proxy = Browsermob::Proxy->new;
}
catch {
print $_ . "\n";
};
skip 'no server running', 1 unless defined $proxy;
$proxy->add_basic_auth({
domain => '.webdav.org',
username => 'user1',
password => 'user1'
});
( run in 2.091 seconds using v1.01-cache-2.11-cpan-0bb4e1dffa6 )