You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ngcp-panel/t/api-rest/api-lnp.t

205 lines
6.6 KiB

use Sipwise::Base;
use Net::Domain qw(hostfqdn);
use LWP::UserAgent;
use JSON qw();
use Test::More;
use warnings;
my $is_local_env = 0;
my $uri = $ENV{CATALYST_SERVER} || ('https://'.hostfqdn.':4443');
my ($netloc) = ($uri =~ m!^https?://(.*)/?.*$!);
my ($ua, $req, $res);
$ua = LWP::UserAgent->new;
$ua->ssl_opts(
verify_hostname => 0,
SSL_verify_mode => 0,
);
my $user = $ENV{API_USER} // 'administrator';
my $pass = $ENV{API_PASS} // 'administrator';
$ua->credentials($netloc, "api_admin_http", $user, $pass);
#$ua->add_handler("request_send", sub {
# my ($request, $ua, $h) = @_;
# print $request->method . ' ' . $request->uri . "\n" . ($request->content ? $request->content . "\n" : '') unless $request->header('authorization');
# return undef;
#});
#$ua->add_handler("response_done", sub {
# my ($response, $ua, $h) = @_;
# print $response->decoded_content . "\n" if $response->code != 401;
# return undef;
#});
my $t = time;
my %carrier_map = ();
my %number_map = ();
{ #regular case
my $carrier1 = _create_lnp_provider();
my $number1 = _create_lnp_number($carrier1, number => '123');
my $number2 = _create_lnp_number($carrier1, number => '456');
_delete_lnp_number($number1);
_delete_lnp_number($number2);
_delete_lnp_provider($carrier1);
}
{ #delete provider with numbers left:
my $carrier1 = _create_lnp_provider();
my $number1 = _create_lnp_number($carrier1, number => '123');
_delete_lnp_provider($carrier1, 500);
}
{ #unique number - insert:
my $carrier1 = _create_lnp_provider();
my $number1 = _create_lnp_number($carrier1, number => '123');
my $number2 = _create_lnp_number($carrier1, number => '123', expected_code => 422);
#_delete_lnp_provider($carrier1, expected_code => 500);
}
{ #unique number - update:
my $carrier1 = _create_lnp_provider();
my $number1 = _create_lnp_number($carrier1, number => '123');
my $number2 = _create_lnp_number($carrier1, number => '1234');
_update_lnp_number($number2, number => '123', expected_code => 422);
}
#todo: multithread insert testcase
sub _create_lnp_number {
my $carrier = shift;
my (%further_opts) = @_;
my $expected_code = delete $further_opts{expected_code} // 201;
$req = HTTP::Request->new('POST', $uri.'/api/lnpnumbers/');
$req->header('Content-Type' => 'application/json');
$req->content(JSON::to_json({
carrier_id => $carrier->{id},
number => 'test'.$t,
%further_opts,
}));
$res = $ua->request($req);
if ($expected_code eq '201') {
is($res->code, 201, "create test lnp number");
$req = HTTP::Request->new('GET', $uri.'/'.$res->header('Location'));
$res = $ua->request($req);
is($res->code, 200, "fetch test lnp number");
my $number = JSON::from_json($res->decoded_content);
$number_map{$carrier->{id}} = $number;
return $number;
} else {
is($res->code, $expected_code, "create test lnp number returns $expected_code");
return undef;
}
}
sub _update_lnp_number {
my $number = shift;
my (%further_opts) = @_;
my $expected_code = delete $further_opts{expected_code} // 200;
my $url = $uri.'/api/lnpnumbers/'.$number->{id};
$req = HTTP::Request->new('PUT', $url);
$req->header('Content-Type' => 'application/json');
$req->header('Prefer' => 'return=representation');
$req->content(JSON::to_json({
%$number,
%further_opts,
}));
$res = $ua->request($req);
if ($expected_code eq '200') {
is($res->code, 200, "update test lnp number");
$number = JSON::from_json($res->decoded_content);
$number_map{$number->{id}} = $number;
return $number;
} else {
is($res->code, $expected_code, "update test lnp number returns $expected_code");
$req = HTTP::Request->new('GET', $url);
$res = $ua->request($req);
is($res->code, 200, "fetch test lnp number");
my $got_number = JSON::from_json($res->decoded_content);
is_deeply($got_number,$number,"lnp number unchanged");
return undef;
}
}
sub _delete_lnp_number {
my ($number,$expected_code) = @_;
$expected_code //= 204;
my $url = $uri.'/api/lnpnumbers/'.$number->{id};
$req = HTTP::Request->new('DELETE', $url);
$res = $ua->request($req);
if ($expected_code eq '204') {
is($res->code, 204, "delete test lnp number");
$req = HTTP::Request->new('GET', $url);
$res = $ua->request($req);
is($res->code, 404, "test lnp number is not found");
return delete $number_map{$number->{id}};
} else {
is($res->code, $expected_code, "create test lnp number returns $expected_code");
$req = HTTP::Request->new('GET', $url);
$res = $ua->request($req);
is($res->code, 200, "test lnp number is still found");
return undef;
}
}
sub _create_lnp_provider {
my (%further_opts) = @_;
my $expected_code = delete $further_opts{expected_code} // 201;
$req = HTTP::Request->new('POST', $uri.'/api/lnpcarriers/');
$req->header('Content-Type' => 'application/json');
$req->content(JSON::to_json({
#skip_rewrite => JSON::false,
name => "test_lnp_carrier_".(scalar keys %carrier_map).'_'.$t,
prefix => 'test'.$t,
%further_opts,
}));
$res = $ua->request($req);
if ($expected_code eq '201') {
is($res->code, 201, "create test lnp carrier");
$req = HTTP::Request->new('GET', $uri.'/'.$res->header('Location'));
$res = $ua->request($req);
is($res->code, 200, "fetch test lnp carrier");
my $carrier = JSON::from_json($res->decoded_content);
$carrier_map{$carrier->{id}} = $carrier;
return $carrier;
} else {
is($res->code, $expected_code, "create test lnp carrier returns $expected_code");
return undef;
}
}
sub _delete_lnp_provider {
my ($carrier,$expected_code) = @_;
$expected_code //= 204;
my $url = $uri.'/api/lnpcarriers/'.$carrier->{id};
$req = HTTP::Request->new('DELETE', $url);
$res = $ua->request($req);
if ($expected_code eq '204') {
is($res->code, 204, "delete test lnp carrier");
$req = HTTP::Request->new('GET', $url);
$res = $ua->request($req);
is($res->code, 404, "test lnp carrier is not found");
return delete $carrier_map{$carrier->{id}};
} else {
is($res->code, $expected_code, "create test lnp carrier returns $expected_code");
$req = HTTP::Request->new('GET', $url);
$res = $ua->request($req);
is($res->code, 200, "test lnp carrier is still found");
return undef;
}
}
done_testing;