use IO::Socket::INET; use JSONRPC::Transport::HTTP; use Test::JSON; use Test::More qw/no_plan/; my $port = find_available_port(); ok(my $daemon = JSONRPC::Transport::HTTP::Daemon ->new(LocalPort => $port, Blocking => 0) ->dispatch_to('Finance/Bank/JSONFactory'), "create a JSONRPC daemon on port $port"); ok($daemon->handle(), 'daemon is handling requests'); my $uri = "http://localhost:$port/Finance/Bank/JSONFactory"; ok(my $res = JSONRPC::Transport::HTTP ->proxy($uri) ->call('accounts',[{bank_name => 'pc'}]) ->result, 'create a JSONRPC request'); ok(!$res->error(), 'check for errors'); if($res->error){ print $res->error,"\n"; } else { is_valid_json($res->result(), 'json is well formed'); } sub find_available_port { my $start_port = 9000; my $end_port = 9100; my $port; my $sock; for ($port = $start_port; $port <= $end_port; $port++) { $sock = IO::Socket::INET->new(Listen => 5, LocalAddr => 'localhost', LocalPort => $port, Proto => 'tcp'); if ( $sock ) { last; } else { next; } } if ( $sock ) { undef $sock; return $port; } }