MT#12347 Safe decode json content

Change-Id: Id5f4eaf27e2c537a7da7c9bb6fadde33f7eb2605
changes/77/2777/1
Irina Peshinskaya 10 years ago
parent 1ff49c10da
commit 91a6aeb6f6

@ -2,8 +2,6 @@ package Test::Collection;
#later package should be split into 2: apiclient and testcollection
#testcollection will keep object of the apiclient
#export LOCAL_TEST=https://192.168.x.x:yyyy; perl -I {PATH}/ngcp-panel/t/lib/ {PATH}/ngcp-panel/t/api-xxx.t
use strict;
use Test::More;
use Moose;
@ -38,8 +36,8 @@ has 'runas_role' => (
);
has 'ua' => (
is => 'rw',
lazy => 1,
isa => 'LWP::UserAgent',
lazy => 1,
builder => 'init_ua',
);
has 'base_uri' => (
@ -312,7 +310,7 @@ sub request{
#if($res->code >= 400){
# print Dumper $req;
# print Dumper $res;
# print Dumper $res->decoded_content ? JSON::from_json($res->decoded_content) : '';;
# print Dumper $self->get_response_content($res);
# die;
#}
return $res;
@ -322,7 +320,7 @@ sub request_process{
my($self,$req) = @_;
#print $req->as_string;
my $res = $self->ua->request($req);
my $rescontent = $res->decoded_content ? JSON::from_json($res->decoded_content) : '';
my $rescontent = $self->get_response_content($res);
return ($res,$rescontent,$req);
}
sub get_request_put{
@ -350,7 +348,7 @@ sub request_put{
$uri ||= $self->get_uri_current;
my $req = $self->get_request_put( $content, $uri );
my $res = $self->request($req);
my $rescontent = $res->decoded_content ? JSON::from_json($res->decoded_content) : '';
my $rescontent = $self->get_response_content($res);
return wantarray ? ($res,$rescontent,$req) : $res;
}
sub request_patch{
@ -361,7 +359,7 @@ sub request_patch{
$content = $self->encode_content($content, $self->content_type->{PATCH});
$content and $req->content($content);
my $res = $self->request($req);
my $rescontent = $res->decoded_content ? JSON::from_json($res->decoded_content) : '';
my $rescontent = $self->get_response_content($res);
#print Dumper [$res,$rescontent,$req];
return wantarray ? ($res,$rescontent,$req) : $res;
}
@ -384,7 +382,7 @@ sub request_post{
Content_Type => $self->content_type->{POST},
Content => $content;
my $res = $self->request($req);
my $rescontent = $res->decoded_content ? JSON::from_json($res->decoded_content) : '';
my $rescontent = $self->get_response_content($res);
return wantarray ? ($res,$rescontent,$req,$content) : $res;
};
@ -393,7 +391,7 @@ sub request_options{
# OPTIONS tests
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) : '';
my $content = $self->get_response_content($res);
return($req,$res,$content);
}
@ -403,16 +401,24 @@ sub request_delete{
#no auto rows for deletion
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) : '';
my $content = $self->get_response_content($res);
return($req,$res,$content);
}
sub request_get{
my($self,$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) : '';
my $content = $self->get_response_content($res);
return wantarray ? ($res, $content, $req) : $res;
}
sub get_response_content{
my($self,$res) = @_;
my $content = '';
if($res->decoded_content){
eval { $content = JSON::from_json($res->decoded_content); };
}
return $content;
}
sub normalize_uri{
my($self,$uri) = @_;
$uri ||= $self->get_uri_current;
@ -443,7 +449,7 @@ sub check_options_item{
}
sub check_methods{
my($self, $res, $area) = @_;
my $opts = $res->decoded_content ? JSON::from_json($res->decoded_content) : undef;
my $opts = $self->get_response_content($res);
$self->http_code_msg(200, "check $area options request", $res,$opts);
my @hopts = split /\s*,\s*/, $res->header('Allow');
ok(exists $opts->{methods} && ref $opts->{methods} eq "ARRAY", "check for valid 'methods' in body");
@ -576,7 +582,7 @@ sub check_item_get{
my $res = $self->request($req);
#print Dumper $res;
$self->http_code_msg(200, "fetch uri: $uri", $res);
my $content = $res->decoded_content ? JSON::from_json($res->decoded_content) : '';
my $content = $self->get_response_content($res);
return wantarray ? ($res, $content, $req) : $res;
}
@ -804,8 +810,8 @@ sub http_code_msg{
if ( ($res->code < 300) || ( $code >= 300 ) ) {
$message_res = $message;
} else {
$content //= $res->decoded_content ? JSON::from_json($res->decoded_content) : undef;
if (defined $content && defined $content->{message}) {
$content //= $self->get_response_content($res);
if (defined $content && $content && defined $content->{message}) {
$message_res = $message . ' (' . $res->message . ': ' . $content->{message} . ')';
} else {
$message_res = $message . ' (' . $res->message . ')';

Loading…
Cancel
Save