API Tests
General cleanup of a lot of nonsense Add tests of optional parameters
This commit is contained in:
parent
eb48480246
commit
a89e30187f
3 changed files with 60 additions and 113 deletions
|
|
@ -30,7 +30,7 @@ script:
|
||||||
- 'which build-wrapper-linux-x86-64 && build-wrapper-linux-x86-64 --out-dir bw-output make -j 2 || make -j 2'
|
- 'which build-wrapper-linux-x86-64 && build-wrapper-linux-x86-64 --out-dir bw-output make -j 2 || make -j 2'
|
||||||
- set -o pipefail
|
- set -o pipefail
|
||||||
- tests/run-parallel-tests.sh tests/all_tests
|
- tests/run-parallel-tests.sh tests/all_tests
|
||||||
- "tests/api 2>&1 | grep -vE 'callback result 9|remote_calc->add. 4, 5 .: 9|set callback|] \\.$'"
|
- tests/api 2>&1 | cat
|
||||||
- tests/hmac_test 2>&1 | cat
|
- tests/hmac_test 2>&1 | cat
|
||||||
- tests/ecc_test README.md 2>&1 | cat
|
- tests/ecc_test README.md 2>&1 | cat
|
||||||
- 'find CMakeFiles/fc.dir -type d | while read d; do gcov -o "$d" "${d/CMakeFiles*.dir/./}"/*.cpp; done >/dev/null'
|
- 'find CMakeFiles/fc.dir -type d | while read d; do gcov -o "$d" "${d/CMakeFiles*.dir/./}"/*.cpp; done >/dev/null'
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ namespace fc {
|
||||||
using type = short_pack<Types...>;
|
using type = short_pack<Types...>;
|
||||||
};
|
};
|
||||||
template<unsigned RemoveCount, typename T, typename... Types>
|
template<unsigned RemoveCount, typename T, typename... Types>
|
||||||
struct pack_cutter_impl<RemoveCount, std::enable_if_t<RemoveCount>, T, Types...>
|
struct pack_cutter_impl<RemoveCount, std::enable_if_t<RemoveCount != 0>, T, Types...>
|
||||||
: public pack_cutter_impl<RemoveCount - 1, void, Types...> {};
|
: public pack_cutter_impl<RemoveCount - 1, void, Types...> {};
|
||||||
template<unsigned RemoveCount, typename... Types>
|
template<unsigned RemoveCount, typename... Types>
|
||||||
struct pack_cutter : public pack_cutter_impl<RemoveCount, void, Types...> {};
|
struct pack_cutter : public pack_cutter_impl<RemoveCount, void, Types...> {};
|
||||||
|
|
|
||||||
169
tests/api.cpp
169
tests/api.cpp
|
|
@ -28,6 +28,17 @@ class login_api
|
||||||
};
|
};
|
||||||
FC_API( login_api, (get_calc)(test) );
|
FC_API( login_api, (get_calc)(test) );
|
||||||
|
|
||||||
|
|
||||||
|
class optionals_api
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
std::string foo( const std::string& first, const fc::optional<std::string>& second,
|
||||||
|
const fc::optional<std::string>& third ) {
|
||||||
|
return fc::json::to_string(fc::variants{first, {second, 2}, {third, 2}});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
FC_API( optionals_api, (foo) );
|
||||||
|
|
||||||
using namespace fc;
|
using namespace fc;
|
||||||
|
|
||||||
class some_calculator
|
class some_calculator
|
||||||
|
|
@ -59,8 +70,8 @@ int main( int argc, char** argv )
|
||||||
try {
|
try {
|
||||||
fc::api<calculator> calc_api( std::make_shared<some_calculator>() );
|
fc::api<calculator> calc_api( std::make_shared<some_calculator>() );
|
||||||
|
|
||||||
fc::http::websocket_server server;
|
auto server = std::make_shared<fc::http::websocket_server>();
|
||||||
server.on_connection([&]( const websocket_connection_ptr& c ){
|
server->on_connection([&]( const websocket_connection_ptr& c ){
|
||||||
auto wsc = std::make_shared<websocket_api_connection>(c, MAX_DEPTH);
|
auto wsc = std::make_shared<websocket_api_connection>(c, MAX_DEPTH);
|
||||||
auto login = std::make_shared<login_api>();
|
auto login = std::make_shared<login_api>();
|
||||||
login->calc = calc_api;
|
login->calc = calc_api;
|
||||||
|
|
@ -68,124 +79,60 @@ int main( int argc, char** argv )
|
||||||
c->set_session_data( wsc );
|
c->set_session_data( wsc );
|
||||||
});
|
});
|
||||||
|
|
||||||
server.listen( 8090 );
|
server->listen( 8090 );
|
||||||
server.start_accept();
|
server->start_accept();
|
||||||
|
|
||||||
for( uint32_t i = 0; i < 5000; ++i )
|
try {
|
||||||
{
|
auto client = std::make_shared<fc::http::websocket_client>();
|
||||||
try {
|
auto con = client->connect( "ws://localhost:8090" );
|
||||||
fc::http::websocket_client client;
|
auto apic = std::make_shared<websocket_api_connection>(con, MAX_DEPTH);
|
||||||
auto con = client.connect( "ws://localhost:8090" );
|
auto remote_login_api = apic->get_remote_api<login_api>();
|
||||||
auto apic = std::make_shared<websocket_api_connection>(con, MAX_DEPTH);
|
auto remote_calc = remote_login_api->get_calc();
|
||||||
auto remote_login_api = apic->get_remote_api<login_api>();
|
bool remote_triggered = false;
|
||||||
auto remote_calc = remote_login_api->get_calc();
|
remote_calc->on_result( [&remote_triggered]( uint32_t r ) { remote_triggered = true; } );
|
||||||
remote_calc->on_result( []( uint32_t r ) { elog( "callback result ${r}", ("r",r) ); } );
|
FC_ASSERT(remote_calc->add( 4, 5 ) == 9);
|
||||||
wdump((remote_calc->add( 4, 5 )));
|
FC_ASSERT(remote_triggered);
|
||||||
} catch ( const fc::exception& e )
|
|
||||||
{
|
|
||||||
edump((e.to_detail_string()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
wlog( "exit scope" );
|
|
||||||
}
|
|
||||||
catch( const fc::exception& e )
|
|
||||||
{
|
|
||||||
edump((e.to_detail_string()));
|
|
||||||
}
|
|
||||||
wlog( "returning now..." );
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
some_calculator calc;
|
client.reset();
|
||||||
variant_calculator vcalc;
|
fc::usleep(fc::milliseconds(100));
|
||||||
|
server.reset();
|
||||||
|
} FC_LOG_AND_RETHROW()
|
||||||
|
} FC_LOG_AND_RETHROW()
|
||||||
|
|
||||||
fc::api<calculator> api_calc( &calc );
|
|
||||||
fc::api<calculator> api_vcalc( &vcalc );
|
|
||||||
fc::api<calculator> api_nested_calc( api_calc );
|
|
||||||
|
|
||||||
wdump( (api_calc->add(5,4)) );
|
|
||||||
wdump( (api_calc->sub(5,4)) );
|
|
||||||
wdump( (api_vcalc->add(5,4)) );
|
|
||||||
wdump( (api_vcalc->sub(5,4)) );
|
|
||||||
wdump( (api_nested_calc->sub(5,4)) );
|
|
||||||
wdump( (api_nested_calc->sub(5,4)) );
|
|
||||||
|
|
||||||
/*
|
|
||||||
variants v = { 4, 5 };
|
|
||||||
auto g = to_generic( api_calc->add );
|
|
||||||
auto r = call_generic( api_calc->add, v.begin(), v.end() );
|
|
||||||
wdump((r));
|
|
||||||
wdump( (g(v)) );
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
try {
|
try {
|
||||||
fc::api_server server;
|
auto optionals = std::make_shared<optionals_api>();
|
||||||
auto api_id = server.register_api( api_calc );
|
fc::api<optionals_api> oapi(optionals);
|
||||||
wdump( (api_id) );
|
FC_ASSERT(oapi->foo("a") == "[\"a\",null,null]");
|
||||||
auto result = server.call( api_id, "add", {4, 5} );
|
FC_ASSERT(oapi->foo("a", "b") == "[\"a\",\"b\",null]");
|
||||||
wdump( (result) );
|
FC_ASSERT(oapi->foo("a", "b", "c") == "[\"a\",\"b\",\"c\"]");
|
||||||
} catch ( const fc::exception& e )
|
FC_ASSERT(oapi->foo("a", {}, "c") == "[\"a\",null,\"c\"]");
|
||||||
{
|
|
||||||
elog( "${e}", ("e",e.to_detail_string() ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
ilog( "------------------ NESTED TEST --------------" );
|
auto server = std::make_shared<fc::http::websocket_server>();
|
||||||
try {
|
server->on_connection([&]( const websocket_connection_ptr& c ){
|
||||||
login_api napi_impl;
|
auto wsc = std::make_shared<websocket_api_connection>(*c, MAX_DEPTH);
|
||||||
napi_impl.calc = api_calc;
|
wsc->register_api(fc::api<optionals_api>(optionals));
|
||||||
fc::api<login_api> napi(&napi_impl);
|
c->set_session_data( wsc );
|
||||||
|
});
|
||||||
|
|
||||||
fc::api_server server;
|
server->listen( 8090 );
|
||||||
auto api_id = server.register_api( napi );
|
server->start_accept();
|
||||||
wdump( (api_id) );
|
|
||||||
auto result = server.call( api_id, "get_calc" );
|
|
||||||
wdump( (result) );
|
|
||||||
result = server.call( result.as_uint64(), "add", {4,5} );
|
|
||||||
wdump( (result) );
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
auto client = std::make_shared<fc::http::websocket_client>();
|
||||||
|
auto con = client->connect( "ws://localhost:8090" );
|
||||||
|
auto apic = std::make_shared<websocket_api_connection>(*con, MAX_DEPTH);
|
||||||
|
auto remote_optionals = apic->get_remote_api<optionals_api>();
|
||||||
|
|
||||||
fc::api<api_server> serv( &server );
|
FC_ASSERT(remote_optionals->foo("a") == "[\"a\",null,null]");
|
||||||
|
FC_ASSERT(remote_optionals->foo("a", "b") == "[\"a\",\"b\",null]");
|
||||||
|
FC_ASSERT(remote_optionals->foo("a", "b", "c") == "[\"a\",\"b\",\"c\"]");
|
||||||
|
FC_ASSERT(remote_optionals->foo("a", {}, "c") == "[\"a\",null,\"c\"]");
|
||||||
|
|
||||||
fc::api_client<login_api> apic( serv );
|
client.reset();
|
||||||
|
fc::usleep(fc::milliseconds(100));
|
||||||
fc::api<login_api> remote_api = apic;
|
server.reset();
|
||||||
|
} FC_LOG_AND_RETHROW()
|
||||||
|
} FC_LOG_AND_RETHROW()
|
||||||
auto remote_calc = remote_api->get_calc();
|
|
||||||
int r = remote_calc->add( 4, 5 );
|
|
||||||
idump( (r) );
|
|
||||||
|
|
||||||
} catch ( const fc::exception& e )
|
|
||||||
{
|
|
||||||
elog( "${e}", ("e",e.to_detail_string() ) );
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
ilog( "------------------ NESTED TEST --------------" );
|
|
||||||
try {
|
|
||||||
login_api napi_impl;
|
|
||||||
napi_impl.calc = api_calc;
|
|
||||||
fc::api<login_api> napi(&napi_impl);
|
|
||||||
|
|
||||||
|
|
||||||
auto client_side = std::make_shared<local_api_connection>(MAX_DEPTH);
|
|
||||||
auto server_side = std::make_shared<local_api_connection>(MAX_DEPTH);
|
|
||||||
server_side->set_remote_connection( client_side );
|
|
||||||
client_side->set_remote_connection( server_side );
|
|
||||||
|
|
||||||
server_side->register_api( napi );
|
|
||||||
|
|
||||||
fc::api<login_api> remote_api = client_side->get_remote_api<login_api>();
|
|
||||||
|
|
||||||
auto remote_calc = remote_api->get_calc();
|
|
||||||
int r = remote_calc->add( 4, 5 );
|
|
||||||
idump( (r) );
|
|
||||||
|
|
||||||
} catch ( const fc::exception& e )
|
|
||||||
{
|
|
||||||
elog( "${e}", ("e",e.to_detail_string() ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue