#!perl ############################################################################ # high-level API test - start a server, use the api to upload a file or two, # then make sure that those files exist and are what we expect. ############################################################################ use Test::More tests => 39; use warnings; use strict; use Test::Exception; use Test::Differences; use lib 't/lib'; use DTest; use LWP::Simple (); use Froody::Server::Test; use Froody::SimpleClient; ok( Froody::Server::Test->start( "DTest::Test" ), 'got interface to client'); ok( my $real_client = Froody::Server::Test->client, 'got interface to client'); like( LWP::Simple::get(Froody::Server::Test->endpoint . '?foo=1'), qr/froody.invoke.nomethod/, 'get a froody error'); is $real_client->repository->get_methods, 14, "Right number of methods."; eq_or_diff [ sort map { $_->full_name } $real_client->repository->get_errortypes], [ '', 'perl.methodcall.param','test.error',], "Right number of error types."; sleep(1); ok( my $simple_client = Froody::SimpleClient->new( Froody::Server::Test->endpoint, timeout => 1 ), "got simpleclient" ); my $first = 1; for my $client ( $real_client, $simple_client ) { #for my $client ($simple_client ) { my $answer; lives_ok { $client->call('froody.reflection.getErrorTypeInfo', code=> 'test.error'); } "We have the right error type info for test.error"; is_deeply $client->call('froody.reflection.getErrorTypes'), { 'errortype' => [ 'perl.methodcall.param', 'test.error' ] }, "we have the expected error shapes"; lives_ok { $answer = $client->call( 'foo.test.add', values => [1,2,3]); } 'can make call'; ok( $answer, 'got a response'); lives_and { $answer = $client->call( 'foo.test.echo', { echo => "\x{e9}" } ); is $answer, "\x{e9}", "We get the right answer back."; } 'can make call'; lives_and { $answer = $client->call( 'foo.test.add', {} ); is $answer, "\x{e9}", "We get the right answer back."; } 'can make call'; lives_and { $answer = $client->call( 'foo.test.empty' ); is_deeply $answer, {}, "We get empty response back."; } 'can make call'; throws_ok { $answer = $client->call('foo.foo.bar'); } qr/not found/; isa_ok($@, "Froody::Error", "right error") or diag $@; undef $@; throws_ok { $answer = $client->call('foo.test.badspec'); } qr/froody.xml/; throws_ok { $client->call('foo.test.haltandcatchfire'); } qr/I'm on fire/; isa_ok $@, 'Froody::Error'; is $@->code, 'test.error'; eq_or_diff $@->data || {} , { fire => "++good", napster => '++ungood' } , "We threw a data structure."; # Die with a non-froody error in the error_handler should return a 500 from the server. throws_ok { $client->call('foo.test.badhandler'); } qr/froody.invoke.remote/; isa_ok $@, 'Froody::Error'; } throws_ok { $simple_client->call( 'foo.test.sloooow' ); } qr/froody.invoke.remote/, 'we time out really quickly';