From 91a6aeb6f61c6c94da12d7b67d55f2ebaa1d6323 Mon Sep 17 00:00:00 2001 From: Irina Peshinskaya Date: Mon, 28 Sep 2015 13:58:25 +0300 Subject: [PATCH] MT#12347 Safe decode json content Change-Id: Id5f4eaf27e2c537a7da7c9bb6fadde33f7eb2605 --- t/lib/Test/Collection.pm | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/t/lib/Test/Collection.pm b/t/lib/Test/Collection.pm index 925d9ab448..d4dbce72a0 100644 --- a/t/lib/Test/Collection.pm +++ b/t/lib/Test/Collection.pm @@ -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 . ')';