#!perl use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/lib"; chdir 't' if -d 't'; use lib qw[../lib inc]; require 'local_request.pl'; } use Test::More 'no_plan'; use Catalyst::Test 'TestApp'; use JSON; use HTTP::Request; use Data::Dumper; ### Change config to show errors TestApp->server->jsonrpc->config->show_errors(1); my %RpcArgs = ( 1 => "b" ); #my %RpcRv = ( auto => 1, begin => 1, end => 1, input => \%RpcArgs ); my %RpcRv = ( auto => 1, begin => 1, end => 1 ); my $EntryPoint = 'http://localhost/rpc'; my $Prefix = 'rpc.errors.'; my %Methods = ( # method name # rv 'privateonly' => {'Error' => 'Invalid JSONRPC request: No such method', 'stash' => 'privateonly', }, 'localonly' => {'Error' => 'Invalid JSONRPC request: No such method', 'stash' => 'privateonly', }, ### Check if call does not fallback on another method 'remoteonly.ne' => {'Error' => 'Invalid JSONRPC request: No such method', 'stash' => 'privateonly', }, ); ### Some defaults sub shoot { my ($meth, $content) = @_; if (!$content) { my $call = {version=>'1.1', method=>$meth, params=>\%RpcArgs, id=>1}; $content = JSON::to_json($call); } my $req = HTTP::Request->new( POST => $EntryPoint ); $req->header( 'Content-Length' => length($content) ); $req->header( 'Content-Type' => 'application/json' ); $req->content( $content ); my $res = request( $req ); } while ( my($meth,$data) = each %Methods ) { my $res = shoot($meth); ok( $res, "Got response on '$meth'" ); ok( $res->is_success, " Response successfull 2XX" ); is( $res->code, 200, " Reponse code 200" ); my $rv = JSON::from_json( $res->content ); #is_deeply( $data, $rv, " Return value as expected" ); is($rv->{error}->{message}, 'Invalid JSONRPC request: No such method', 'Got faultString "No such method"'); } ### This content is NOT VALID json check { my $res = shoot((keys %Methods)[0], 'bLegH'); my $data = JSON::from_json( $res->content ); if (UNIVERSAL::isa($data, 'HASH') && $data->{error}) { like($data->{error}->{message}, qr/Invalid JSONRPC request.*malformed JSON string/s,'Got error "malformed JSON string"'); } }