MT#12347 Simple tests for cfdestinations

Change-Id: I2d2467c1a6411cd348799de269cf9e8c4af2773d
changes/94/2694/7
Irina Peshinskaya 10 years ago
parent 8494b5a91f
commit a529ec74eb

@ -1,98 +1,75 @@
use Sipwise::Base;
use Net::Domain qw(hostfqdn);
use LWP::UserAgent;
use JSON qw();
use Test::More;
my $uri = $ENV{CATALYST_SERVER} || ('https://'.hostfqdn.':4443');
my ($netloc) = ($uri =~ m!^https?://(.*)/?.*$!);
use strict;
use warnings;
my ($ua, $req, $res);
$ua = LWP::UserAgent->new;
use Test::More;
use Test::Collection;
$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);
my $test_machine = Test::Collection->new(
name => 'cfdestinationsets',
);
diag('Note that the next tests require at least one subscriber to be present ' .
'and accessible to the current API user.');
# fetch a cfdestinationset for testing that
{
$req = HTTP::Request->new('GET', $uri.'/api/cfdestinationsets/?page=1&rows=10');
$res = $ua->request($req);
my ($res, $content) = $test_machine->request_get('/api/cfdestinationsets/?page=1&rows=10');
is($res->code, 200, "fetch cfdestinationsets collection");
$req = HTTP::Request->new('GET', $uri.'/api/cftimesets/?page=1&rows=10');
$res = $ua->request($req);
($res, $content) = $test_machine->request_get('/api/cftimesets/?page=1&rows=10');
is($res->code, 200, "fetch cftimesets collection");
}
# fetch a cfdestinationset being a reseller
SKIP:
{
my $user_reseller = $ENV{API_USER_RESELLER} // 'api_test';
my $pass_reseller = $ENV{API_PASS_RESELLER} // 'api_test';
$ua->credentials($netloc, "api_admin_http", $user_reseller, $pass_reseller);
$req = HTTP::Request->new('GET', $uri.'/api/cfdestinationsets/?page=1&rows=10');
$res = $ua->request($req);
my ($res,$sub1,$cf_collection1,$cft_collection1,$cf_collection2,$cft_collection2);
$test_machine->runas('reseller');
($res, $cf_collection1) = $test_machine->request_get('/api/cfdestinationsets/?page=1&rows=10');
if ($res->code == 401) { # Authorization required
skip("Couldn't login as reseller", 1);
}
is($res->code, 200, "fetch cfdestinationsets collection as reseller");
my $cf_collection1 = JSON::from_json($res->decoded_content);
$req = HTTP::Request->new('GET', $uri.'/api/cftimesets/?page=1&rows=10');
$res = $ua->request($req);
($res, $cft_collection1) = $test_machine->request_get('/api/cftimesets/?page=1&rows=10');
is($res->code, 200, "fetch cftimesets collection as reseller");
my $cft_collection1 = JSON::from_json($res->decoded_content);
$req = HTTP::Request->new('GET', $uri.'/api/subscribers/?page=1&rows=1');
$res = $ua->request($req);
($res, $sub1) = $test_machine->request_get('/api/subscribers/?page=1&rows=1');
is($res->code, 200, "fetch a subscriber of our reseller for testing");
my $sub1 = JSON::from_json($res->decoded_content);
if ($sub1->{total_count} < 1) {
skip("Precondition not met: need a subscriber",1);
}
my ($sub1_id) = $sub1->{_embedded}->{'ngcp:subscribers'}->{_links}{self}{href} =~ m!subscribers/([0-9]*)$!;
cmp_ok ($sub1_id, '>', 0, "should be positive integer");
$req = HTTP::Request->new('GET', $uri.'/api/cfdestinationsets/?page=1&rows=10&subscriber_id='.$sub1_id);
$res = $ua->request($req);
($res, $cf_collection2) = $test_machine->request_get('/api/cfdestinationsets/?page=1&rows=10&subscriber_id='.$sub1_id);
is($res->code, 200, "fetch cfdestinationsets collection as reseller with subscriber filter");
my $cf_collection2 = JSON::from_json($res->decoded_content);
cmp_ok($cf_collection1->{total_count}, '>=', $cf_collection2->{total_count},
"filtered collection (cfdestinationsets) should be smaller or equal");
# --------
$req = HTTP::Request->new('GET', $uri.'/api/cftimesets/?page=1&rows=10&subscriber_id='.$sub1_id);
$res = $ua->request($req);
($res, $cft_collection2) = $test_machine->request_get('/api/cftimesets/?page=1&rows=10&subscriber_id='.$sub1_id);
is($res->code, 200, "fetch cftimesets collection as reseller with subscriber filter");
my $cft_collection2 = JSON::from_json($res->decoded_content);
cmp_ok($cft_collection1->{total_count}, '>=', $cft_collection2->{total_count},
"filtered collection (cftimesets) should be smaller or equal");
}
{
$ua->credentials($netloc, "api_admin_http", $user, $pass);
$req = HTTP::Request->new('GET', "$uri/api/callforwards/99987");
$res = $ua->request($req);
$test_machine->runas('admin');
my($res, $content) = $test_machine->request_get('/api/callforwards/99987');
is($res->code, 404, "check get nonexistent callforwards item");
$req = HTTP::Request->new('GET', "$uri/api/cfdestinationsets/99987");
$res = $ua->request($req);
($res, $content) = $test_machine->request_get('/api/cfdestinationsets/99987');
is($res->code, 404, "check get nonexistent cfdestinationsets item");
$req = HTTP::Request->new('GET', "$uri/api/cftimesets/99987");
$res = $ua->request($req);
($res, $content) = $test_machine->request_get('/api/cftimesets/99987');
is($res->code, 404, "check get nonexistent cftimesets item");
}

@ -1,13 +1,9 @@
use strict;
use warnings;
use Net::Domain qw(hostfqdn);
use LWP::UserAgent;
use HTTP::Request::Common;
use JSON;
use Test::More;
use Data::Dumper;
use File::Basename;
use bignum qw/hex/;
use Test::Collection;

@ -31,11 +31,15 @@ has 'panel_config' => (
is => 'rw',
isa => 'HashRef',
);
has 'runas_role' => (
is => 'rw',
isa => 'Str',
default => 'default',
);
has 'ua' => (
is => 'rw',
lazy => 1,
isa => 'LWP::UserAgent',
lazy => 1,
builder => 'init_ua',
);
has 'base_uri' => (
@ -186,8 +190,7 @@ sub init_ua {
my $ua = LWP::UserAgent->new;
my $uri = $self->base_uri;
$uri =~ s/^https?:\/\///;
my $user = $ENV{API_USER} // 'administrator';
my $pass = $ENV{API_PASS} // 'administrator';
my($user,$pass) = $self->get_role_credentials();
$ua->credentials( $uri, 'api_admin_http', $user, $pass);
$ua->ssl_opts(
verify_hostname => 0,
@ -195,6 +198,29 @@ sub init_ua {
);
return $ua;
}
sub runas {
my $self = shift;
my($role_in,$uri) = @_;
$uri //= $self->base_uri;
$uri =~ s/^https?:\/\///;
my($user,$pass,$role) = $self->get_role_credentials($role_in);
$self->runas_role($role);
$self->ua->credentials( $uri, 'api_admin_http', $user, $pass);
}
sub get_role_credentials{
my $self = shift;
my($role) = @_;
my($user,$pass);
$role //= $self->runas_role // 'default';
if($role eq 'default' || $role eq 'admin'){
$user //= $ENV{API_USER} // 'administrator';
$pass //= $ENV{API_PASS} // 'administrator';
}elsif($role eq 'reseller'){
$user //= $ENV{API_USER_RESELLER} // 'api_test';
$pass //= $ENV{API_PASS_RESELLER} // 'api_test';
}
return($user,$pass,$role);
}
sub clear_data_created{
my($self) = @_;
$self->DATA_CREATED({
@ -365,8 +391,7 @@ sub request_post{
sub request_options{
my ($self,$uri) = @_;
# OPTIONS tests
$uri ||= $self->get_uri_current;
my $req = HTTP::Request->new('OPTIONS', $uri);
my $req = HTTP::Request->new('OPTIONS', $self->normalize_uri($uri));
my $res = $self->request($req);
my $content = $res->decoded_content ? JSON::from_json($res->decoded_content) : '';
return($req,$res,$content);
@ -376,20 +401,26 @@ sub request_delete{
my ($self,$uri) = @_;
# DELETE tests
#no auto rows for deletion
my $req = HTTP::Request->new('DELETE', $uri);
my $req = HTTP::Request->new('DELETE', $self->normalize_uri($uri));
my $res = $self->request($req);
my $content = $res->decoded_content ? JSON::from_json($res->decoded_content) : '';
return($req,$res,$content);
}
sub request_get{
my($self,$uri) = @_;
$uri ||= $self->get_uri_current;
my $req = HTTP::Request->new('GET', $uri);
my $req = HTTP::Request->new('GET', $self->normalize_uri($uri));
my $res = $self->request($req);
my $content = $res->decoded_content ? JSON::from_json($res->decoded_content) : '';
return wantarray ? ($res, $content, $req) : $res;
}
sub normalize_uri{
my($self,$uri) = @_;
$uri ||= $self->get_uri_current;
if($uri !~/^http/i){
$uri = $self->base_uri.$uri;
}
return $uri;
}
############## end of test machine
############## start of test collection

Loading…
Cancel
Save