MT#15883 use expand param of rtc API

this is important, because it allows us, to be completely
independent of their href uris, whom we cannot always trust (the domain
part in particular)

Change-Id: Ic67f8240dfb50a5ea4948931d7e0554ce7f5ef4e
changes/22/3822/6
Gerhard Jungwirth 10 years ago
parent ad3719772a
commit 7a7fb94008

@ -133,10 +133,10 @@ sub create_app {
sub get_sessions {
my ($self, $max_rows) = @_;
my $sessions = $self->_resolve_collection( '/sessions', $max_rows );
if ('ARRAY' eq ref $sessions && @{ $sessions }) {
for my $session (@{ $sessions }) {
$session->{accounts} = $self->_resolve_collection( $session->{accounts}{href} );
my $sessions = $self->_resolve_collection_fast( '/sessions', $max_rows );
if ('ARRAY' eq ref $sessions->{data} && @{ $sessions->{data} }) {
for my $session (@{ $sessions->{data} }) {
$session->{accounts} = $self->_resolve_collection_fast( $session->{accounts}{href} );
}
}
return $sessions;
@ -155,7 +155,7 @@ sub delete_all_sessions {
my ($self) = @_;
my $ua = $self->ua;
my $resp;
for my $session_data ($self->get_sessions) {
for my $session_data ($self->get_sessions->{data}) {
my $session_id = $session_data->{id};
$resp = $ua->delete($self->host . "/sessions/id/$session_id");
last if $resp->code >= 300;
@ -165,13 +165,13 @@ sub delete_all_sessions {
sub get_users {
my ($self, $max_rows) = @_;
my $users = $self->_resolve_collection( '/users', $max_rows );
my $users = $self->_resolve_collection_fast( '/users', $max_rows );
return $users;
}
sub get_networks {
my ($self) = @_;
my $networks = $self->_resolve_collection( '/networks' );
my $networks = $self->_resolve_collection_fast( '/networks' );
return $networks;
}
@ -181,17 +181,54 @@ sub _resolve_collection {
my $rel_url = $self->_strip_host( $bare_url );
my $res = $ua->get($self->host . $rel_url);
my @result;
return [] unless $res->code == 200;
return {code => $res->code, response => $res} unless $res->code == 200;
my $collection = JSON::decode_json($res->content);
return [] unless $collection;
return {code => $res->code, response => $res,
error_detail => 'could not decode_json'} unless $collection;
my $item_res;
for my $item (@{ $collection->{items} }) {
last if (defined $max_rows && $max_rows-- <= 0);
my $url = $self->_strip_host( $item->{href} );
my $item_res = $ua->get($self->host . $url);
$item_res = $ua->get($self->host . $url);
my $item_data = decode_json($item_res->content);
push @result, $item_data;
}
return \@result;
return {
response => $item_res, # latest response
code => $item_res->code,
data => \@result,
total_count => scalar(@result),
};
}
sub _resolve_collection_fast {
my ($self, $bare_url, $max_rows) = @_;
my $ua = $self->ua;
my $rel_url = $self->_strip_host( $bare_url );
$rel_url =
$rel_url .
( ($rel_url =~ m/\?/) ? '&' : '?' ) .
'expand=true';
my $res = $ua->get($self->host . $rel_url);
my @result;
return {code => $res->code, response => $res} unless $res->code == 200;
my $collection = JSON::decode_json($res->content);
return {code => $res->code, response => $res,
error_detail => 'could not decode_json'} unless $collection;
if ('HASH' eq ref $collection) { # everything ok
return {
response => $res,
code => $res->code,
data => $collection->{items},
total_count => $collection->{total} // (scalar @{ $collection->{items} }),
};
} else { # unknown error
return {
response => $res,
code => $res->code,
data => $collection,
};
}
}
sub _strip_host {

@ -0,0 +1,38 @@
use warnings;
use strict;
use Test::More;
use NGCP::Panel::Utils::ComxAPIClient;
my $comx_host = $ENV{COMX_HOST} // 'https://rtcengine.sipwise.com/rtcengine/api';
my $comx_user = $ENV{COMX_USER} // 'gjungwirth@sipwise';
my $comx_pass = $ENV{COMX_PASS};
my $comx_netloc = $comx_host =~ s!^https://([^/:]*)(:[0-9]*)?/.*$!$1.($2||":443")!re; # 'rtcengine.sipwise.com:443'
my $COLLECTION_TARGET = '/users';
my $comx = NGCP::Panel::Utils::ComxAPIClient->new(
host => $comx_host,
);
$comx->login($comx_user, $comx_pass, $comx_netloc);
ok($comx->login_status, "Login done");
is($comx->login_status->{code}, 200, "Login successful");
my $users1 = $comx->_resolve_collection($COLLECTION_TARGET);
isa_ok($users1, 'HASH', 'Collection Method 1');
ok($users1->{response}, 'Collection Method 1 - has response');
ok($users1->{response}->is_success, 'Collection Method 1 - response successful');
isa_ok($users1->{data}, 'ARRAY', 'Collection Method 1 - has data');
my $users2 = $comx->_resolve_collection_fast($COLLECTION_TARGET);
isa_ok($users2, 'HASH', 'Collection Method 2');
ok($users2->{response}, 'Collection Method 2 - has response');
ok($users2->{response}->is_success, 'Collection Method 2 - response successful');
isa_ok($users2->{data}, 'ARRAY', 'Collection Method 2 - has data');
is($users1->{total_count}, $users2->{total_count}, 'total_count is the same');
map {delete $_->{href}} @{ $users2->{data} };
is_deeply($users1->{data}, $users2->{data}, 'they are the same');
ok(1,"stub, done");
done_testing;
Loading…
Cancel
Save