Skip to content

Commit

Permalink
iox-eclipse-iceoryx#1142 Add listener tests
Browse files Browse the repository at this point in the history
Signed-off-by: Marika Lehmann <[email protected]>
  • Loading branch information
FerdinandSpitzschnueffler committed Feb 22, 2022
1 parent 8b3d81f commit 8347235
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 2 deletions.
89 changes: 89 additions & 0 deletions iceoryx_binding_c/test/moduletests/test_listener.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "iceoryx_posh/mepoo/mepoo_config.hpp"
#include "iceoryx_posh/popo/listener.hpp"
#include "iceoryx_posh/popo/user_trigger.hpp"
#include "iceoryx_posh/testing/mocks/posh_runtime_mock.hpp"

using namespace iox;
using namespace iox::popo;
Expand All @@ -46,6 +47,7 @@ using namespace iox::mepoo;

iox_user_trigger_t g_userTriggerCallbackArgument = nullptr;
iox_sub_t g_subscriberCallbackArgument = nullptr;
iox_service_discovery_t g_serviceDiscoveryCallbackArgument = nullptr;
void* g_contextData = nullptr;

void userTriggerCallback(iox_user_trigger_t userTrigger)
Expand All @@ -70,6 +72,17 @@ void subscriberCallbackWithContextData(iox_sub_t subscriber, void* const context
g_contextData = contextData;
}

void serviceDiscoveryCallback(iox_service_discovery_t serviceDiscovery)
{
g_serviceDiscoveryCallbackArgument = serviceDiscovery;
}

void serviceDiscoveryCallbackWithContextData(iox_service_discovery_t serviceDiscovery, void* const contextData)
{
g_serviceDiscoveryCallbackArgument = serviceDiscovery;
g_contextData = contextData;
}

class iox_listener_test : public Test
{
public:
Expand Down Expand Up @@ -146,6 +159,7 @@ class iox_listener_test : public Test

ConditionVariableData m_condVar{"hypnotoadKnueppeltRetour"};
TestListener m_sut{m_condVar};
std::unique_ptr<PoshRuntimeMock> runtimeMock = PoshRuntimeMock::create("long_live_lord_buckethead");

iox_user_trigger_storage_t m_userTriggerStorage[MAX_NUMBER_OF_EVENTS_PER_LISTENER + 1U];
cxx::vector<iox_user_trigger_t, MAX_NUMBER_OF_EVENTS_PER_LISTENER + 1U> m_userTrigger;
Expand Down Expand Up @@ -362,4 +376,79 @@ TIMING_TEST_F(iox_listener_test, SubscriberCallbackWithContextDataIsCalledSample
EXPECT_THAT(g_contextData, Eq(static_cast<void*>(&someContextData)));
});

TEST_F(iox_listener_test, AttachingServiceDiscoveryWorks)
{
iox_service_discovery_storage_t serviceDiscoveryStorage;
EXPECT_CALL(*runtimeMock, getMiddlewareSubscriber(_, _, _)).WillOnce(Return(&m_subscriberPortData[0]));

iox_service_discovery_t serviceDiscovery = iox_service_discovery_init(&serviceDiscoveryStorage);

EXPECT_THAT(iox_listener_size(&m_sut), Eq(0));
iox_listener_attach_service_discovery_event(
&m_sut, serviceDiscovery, ServiceDiscoveryEvent_SERVICE_REGISTRY_CHANGED, &serviceDiscoveryCallback);
EXPECT_THAT(iox_listener_size(&m_sut), Eq(1));

iox_listener_detach_service_discovery_event(
&m_sut, serviceDiscovery, ServiceDiscoveryEvent_SERVICE_REGISTRY_CHANGED);
EXPECT_THAT(iox_listener_size(&m_sut), Eq(0));
}

TEST_F(iox_listener_test, AttachingServiceDiscoveryWithContextDataWorks)
{
iox_service_discovery_storage_t serviceDiscoveryStorage;
EXPECT_CALL(*runtimeMock, getMiddlewareSubscriber(_, _, _)).WillOnce(Return(&m_subscriberPortData[0]));

iox_service_discovery_t serviceDiscovery = iox_service_discovery_init(&serviceDiscoveryStorage);

EXPECT_THAT(iox_listener_size(&m_sut), Eq(0));
iox_listener_attach_service_discovery_event_with_context_data(&m_sut,
serviceDiscovery,
ServiceDiscoveryEvent_SERVICE_REGISTRY_CHANGED,
&serviceDiscoveryCallbackWithContextData,
&serviceDiscoveryStorage);
EXPECT_THAT(iox_listener_size(&m_sut), Eq(1));

iox_listener_detach_service_discovery_event(
&m_sut, serviceDiscovery, ServiceDiscoveryEvent_SERVICE_REGISTRY_CHANGED);
EXPECT_THAT(iox_listener_size(&m_sut), Eq(0));
}

TIMING_TEST_F(iox_listener_test, NotifyingServiceDiscoveryEventWorks, Repeat(5), [&] {
iox_service_discovery_storage_t serviceDiscoveryStorage;
EXPECT_CALL(*runtimeMock, getMiddlewareSubscriber(_, _, _)).WillOnce(Return(&m_subscriberPortData[0]));

iox_service_discovery_t serviceDiscovery = iox_service_discovery_init(&serviceDiscoveryStorage);

iox_listener_attach_service_discovery_event(
&m_sut, serviceDiscovery, ServiceDiscoveryEvent_SERVICE_REGISTRY_CHANGED, &serviceDiscoveryCallback);

// notify
std::this_thread::sleep_for(TIMEOUT);
TIMING_TEST_EXPECT_TRUE(g_serviceDiscoveryCallbackArgument == serviceDiscovery);

iox_listener_detach_service_discovery_event(
&m_sut, serviceDiscovery, ServiceDiscoveryEvent_SERVICE_REGISTRY_CHANGED);
});

TIMING_TEST_F(iox_listener_test, NotifyingServiceDiscoveryEventWithContextDataWorks, Repeat(5), [&] {
iox_service_discovery_storage_t serviceDiscoveryStorage;
EXPECT_CALL(*runtimeMock, getMiddlewareSubscriber(_, _, _)).WillOnce(Return(&m_subscriberPortData[0]));

iox_service_discovery_t serviceDiscovery = iox_service_discovery_init(&serviceDiscoveryStorage);

iox_listener_attach_service_discovery_event_with_context_data(&m_sut,
serviceDiscovery,
ServiceDiscoveryEvent_SERVICE_REGISTRY_CHANGED,
&serviceDiscoveryCallbackWithContextData,
&serviceDiscoveryStorage);

// notify
std::this_thread::sleep_for(TIMEOUT);
TIMING_TEST_EXPECT_TRUE(g_serviceDiscoveryCallbackArgument == serviceDiscovery);
TIMING_TEST_EXPECT_TRUE(g_contextData == static_cast<void*>(&serviceDiscoveryStorage));

iox_listener_detach_service_discovery_event(
&m_sut, serviceDiscovery, ServiceDiscoveryEvent_SERVICE_REGISTRY_CHANGED);
});

} // namespace
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@
#include "iceoryx_posh/popo/wait_set.hpp"
#include "iceoryx_posh/runtime/posh_runtime.hpp"
#include "iceoryx_posh/runtime/service_discovery.hpp"
#include "iceoryx_posh/testing/mocks/posh_runtime_mock.hpp"
#include "iceoryx_posh/testing/roudi_gtest.hpp"
#include "mocks/posh_runtime_mock.hpp"
#include "test.hpp"

#include <type_traits>
Expand Down
2 changes: 1 addition & 1 deletion iceoryx_posh/test/moduletests/test_posh_runtime.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
#include "iceoryx_posh/popo/publisher.hpp"
#include "iceoryx_posh/popo/subscriber.hpp"
#include "iceoryx_posh/runtime/posh_runtime.hpp"
#include "iceoryx_posh/testing/mocks/posh_runtime_mock.hpp"
#include "iceoryx_posh/testing/roudi_environment/roudi_environment.hpp"
#include "mocks/posh_runtime_mock.hpp"
#include "test.hpp"

#include <type_traits>
Expand Down

0 comments on commit 8347235

Please sign in to comment.