From b6659f096f5dacadc8116f994fef206e11c3f8d5 Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Tue, 21 Apr 2015 21:00:06 +0300 Subject: [PATCH] Empty server test --- libuavcan/test/node/service_server.cpp | 53 ++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 8 deletions(-) diff --git a/libuavcan/test/node/service_server.cpp b/libuavcan/test/node/service_server.cpp index 00b324abd6..4137bb1203 100644 --- a/libuavcan/test/node/service_server.cpp +++ b/libuavcan/test/node/service_server.cpp @@ -6,16 +6,17 @@ #include #include #include +#include #include "../clock.hpp" #include "../transport/can/can.hpp" #include "test_node.hpp" -struct ServerImpl +struct StringServerImpl { const char* string_response; - ServerImpl(const char* string_response) : string_response(string_response) { } + StringServerImpl(const char* string_response) : string_response(string_response) { } void handleRequest(const uavcan::ReceivedDataStructure& request, root_ns_a::StringService::Response& response) @@ -27,11 +28,27 @@ struct ServerImpl std::cout << response << std::endl; } - typedef uavcan::MethodBinder&, - root_ns_a::StringService::Response&)> Binder; + typedef uavcan::MethodBinder&, + root_ns_a::StringService::Response&)> Binder; - Binder bind() { return Binder(this, &ServerImpl::handleRequest); } + Binder bind() { return Binder(this, &StringServerImpl::handleRequest); } +}; + + +struct EmptyServerImpl +{ + void handleRequest(const uavcan::ReceivedDataStructure& request, + root_ns_a::EmptyService::Response&) + { + std::cout << request << std::endl; + } + + typedef uavcan::MethodBinder&, + root_ns_a::EmptyService::Response&)> Binder; + + Binder bind() { return Binder(this, &EmptyServerImpl::handleRequest); } }; @@ -45,10 +62,10 @@ TEST(ServiceServer, Basic) CanDriverMock can_driver(1, clock_driver); TestNode node(can_driver, clock_driver, 1); - ServerImpl impl("456"); + StringServerImpl impl("456"); { - uavcan::ServiceServer server(node); + uavcan::ServiceServer server(node); ASSERT_EQ(0, node.getDispatcher().getNumServiceRequestListeners()); server.start(impl.bind()); @@ -111,3 +128,23 @@ TEST(ServiceServer, Basic) } ASSERT_EQ(0, node.getDispatcher().getNumServiceRequestListeners()); } + + +TEST(ServiceServer, Empty) +{ + // Manual type registration - we can't rely on the GDTR state + uavcan::GlobalDataTypeRegistry::instance().reset(); + uavcan::DefaultDataTypeRegistrator _registrator; + + SystemClockDriver clock_driver; + CanDriverMock can_driver(1, clock_driver); + TestNode node(can_driver, clock_driver, 1); + + EmptyServerImpl impl; + + uavcan::ServiceServer server(node); + + ASSERT_EQ(0, node.getDispatcher().getNumServiceRequestListeners()); + ASSERT_GE(0, server.start(impl.bind())); + ASSERT_EQ(1, node.getDispatcher().getNumServiceRequestListeners()); +}