From 346260de690e942c67ac980a11a75af929513c44 Mon Sep 17 00:00:00 2001 From: "Chari Nehal Dattaram (RBEI/EBB1)" Date: Wed, 4 Nov 2020 20:25:41 +0530 Subject: [PATCH 01/15] iox-#240 addedintegration test for posh runtime Signed-off-by: Chari Nehal Dattaram (RBEI/EBB1) --- .../test_roudi_findservice.cpp | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp index 4d9ad1160d..5bb209a180 100644 --- a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp +++ b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp @@ -40,6 +40,70 @@ TEST_F(RoudiFindService_test, OfferSingleMethodServiceSingleInstance) ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); } +TEST_F(RoudiFindService_test, OfferServiceWithDefaultDescription) +{ + senderRuntime->offerService(iox::capro::ServiceDescription()); + this->InterOpWait(); + iox::runtime::InstanceContainer instanceContainer; + receiverRuntime->findService(iox::capro::ServiceDescription(), instanceContainer); + + ASSERT_THAT(instanceContainer.size(), Eq(1u)); + senderRuntime->stopOfferService(iox::capro::ServiceDescription()); +} + +TEST_F(RoudiFindService_test, ReOfferSingleMethodServiceSingleInstance) +{ + senderRuntime->offerService({"service1", "instance1"}); + this->InterOpWait(); + iox::runtime::InstanceContainer instanceContainer; + receiverRuntime->findService({"service1", "instance1"}, instanceContainer); + + ASSERT_THAT(instanceContainer.size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); + + senderRuntime->stopOfferService({"service1", "instance1"}); + this->InterOpWait(); + instanceContainer.clear(); + receiverRuntime->findService({"service1", "instance1"}, instanceContainer); + + ASSERT_THAT(instanceContainer.size(), Eq(0u)); + + senderRuntime->offerService({"service1", "instance1"}); + this->InterOpWait(); + receiverRuntime->findService({"service1", "instance1"}, instanceContainer); + + ASSERT_THAT(instanceContainer.size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); +} + +TEST_F(RoudiFindService_test, OfferSameServiceMultipleTimes) +{ + senderRuntime->offerService({"service1", "instance1"}); + senderRuntime->offerService({"service1", "instance1"}); + this->InterOpWait(); + senderRuntime->offerService({"service1", "instance1"}); + + this->InterOpWait(); + InstanceContainer instanceContainer; + receiverRuntime->findService({"service1", "instance1"}, instanceContainer); + + ASSERT_THAT(instanceContainer.size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); +} + +TEST_F(RoudiFindService_test, FindServiceMultipleTimes) +{ + senderRuntime->offerService({"service1", "instance1"}); + + this->InterOpWait(); + InstanceContainer instanceContainer; + receiverRuntime->findService({"service1", "instance1"}, instanceContainer); + receiverRuntime->findService({"service1", "instance1"}, instanceContainer); + + ASSERT_THAT(instanceContainer.size(), Eq(2u)); + ASSERT_EQ(instanceContainer.at(0), instanceContainer.at(1)); +} + TEST_F(RoudiFindService_test, DISABLED_OfferMultiMethodServiceSingleInstance_PERFORMANCETEST42) { senderRuntime->offerService({"service1", "instance1"}); @@ -180,6 +244,35 @@ TEST_F(RoudiFindService_test, StopOfferMultiMethodServiceSingleInstance) receiverRuntime->findService({"service3", "instance1"}, instanceContainer); ASSERT_THAT(instanceContainer.size(), Eq(0u)); } + +TEST_F(RoudiFindService_test, StopOfferServiceSingleMultipleCalls) +{ + senderRuntime->offerService({"service1", "instance1"}); + this->InterOpWait(); + senderRuntime->stopOfferService({"service1", "instance1"}); + this->InterOpWait(); + senderRuntime->stopOfferService({"service1", "instance1"}); + this->InterOpWait(); + + iox::runtime::InstanceContainer instanceContainer; + receiverRuntime->findService({"service1", "instance1"}, instanceContainer); + ASSERT_THAT(instanceContainer.size(), Eq(0u)); +} + + +TEST_F(RoudiFindService_test, StopNonExistingService) +{ + senderRuntime->offerService({"service1", "instance1"}); + this->InterOpWait(); + senderRuntime->stopOfferService({"service2", "instance1"}); + this->InterOpWait(); + + iox::runtime::InstanceContainer instanceContainer; + receiverRuntime->findService({"service1", "instance1"}, instanceContainer); + ASSERT_THAT(instanceContainer.size(), Eq(1)); + ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); +} + TEST_F(RoudiFindService_test, FindNonExistingServices) { senderRuntime->offerService({"service1", "instance1"}); From cec0aadd424a53561104cd2e926efcd84f9cb28a Mon Sep 17 00:00:00 2001 From: "Chari Nehal Dattaram (RBEI/EBB1)" Date: Thu, 12 Nov 2020 12:46:04 +0530 Subject: [PATCH 02/15] iox-#240 fix review points Signed-off-by: Chari Nehal Dattaram (RBEI/EBB1) --- .../test_roudi_findservice.cpp | 55 +++++++++---------- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp index 5bb209a180..24a2e62c8d 100644 --- a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp +++ b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp @@ -40,68 +40,61 @@ TEST_F(RoudiFindService_test, OfferSingleMethodServiceSingleInstance) ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); } -TEST_F(RoudiFindService_test, OfferServiceWithDefaultDescription) + +///@todo offere service should return bool signalling success/failure +TEST_F(RoudiFindService_test, DISABLED_OfferServiceWithDefaultServiceDescriptionFails) { - senderRuntime->offerService(iox::capro::ServiceDescription()); - this->InterOpWait(); iox::runtime::InstanceContainer instanceContainer; - receiverRuntime->findService(iox::capro::ServiceDescription(), instanceContainer); + bool isServiceOffered; - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - senderRuntime->stopOfferService(iox::capro::ServiceDescription()); + // isServiceOffered = senderRuntime->offerService(iox::capro::ServiceDescription()); + this->InterOpWait(); + + ASSERT_EQ(false, isServiceOffered); } -TEST_F(RoudiFindService_test, ReOfferSingleMethodServiceSingleInstance) +TEST_F(RoudiFindService_test, ReofferedServiceWithValidServiceDescriptionCanBeFound) { + iox::runtime::InstanceContainer instanceContainer; senderRuntime->offerService({"service1", "instance1"}); this->InterOpWait(); - iox::runtime::InstanceContainer instanceContainer; - receiverRuntime->findService({"service1", "instance1"}, instanceContainer); - - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); - senderRuntime->stopOfferService({"service1", "instance1"}); this->InterOpWait(); - instanceContainer.clear(); - receiverRuntime->findService({"service1", "instance1"}, instanceContainer); - - ASSERT_THAT(instanceContainer.size(), Eq(0u)); - senderRuntime->offerService({"service1", "instance1"}); this->InterOpWait(); + receiverRuntime->findService({"service1", "instance1"}, instanceContainer); ASSERT_THAT(instanceContainer.size(), Eq(1u)); ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); } -TEST_F(RoudiFindService_test, OfferSameServiceMultipleTimes) +TEST_F(RoudiFindService_test, OfferExsistingServiceMultipleTimesIsRedundant) { - senderRuntime->offerService({"service1", "instance1"}); + InstanceContainer instanceContainer; senderRuntime->offerService({"service1", "instance1"}); this->InterOpWait(); senderRuntime->offerService({"service1", "instance1"}); - this->InterOpWait(); - InstanceContainer instanceContainer; + receiverRuntime->findService({"service1", "instance1"}, instanceContainer); ASSERT_THAT(instanceContainer.size(), Eq(1u)); ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); } -TEST_F(RoudiFindService_test, FindServiceMultipleTimes) +TEST_F(RoudiFindService_test, FindSameServiceMultipleTimesSuccessfully) { + InstanceContainer instanceContainer; senderRuntime->offerService({"service1", "instance1"}); - this->InterOpWait(); - InstanceContainer instanceContainer; + receiverRuntime->findService({"service1", "instance1"}, instanceContainer); receiverRuntime->findService({"service1", "instance1"}, instanceContainer); ASSERT_THAT(instanceContainer.size(), Eq(2u)); - ASSERT_EQ(instanceContainer.at(0), instanceContainer.at(1)); + ASSERT_THAT(instanceContainer.at(0), Eq(IdString("instance1"))); + ASSERT_THAT(instanceContainer.at(1), Eq(IdString("instance1"))); } TEST_F(RoudiFindService_test, DISABLED_OfferMultiMethodServiceSingleInstance_PERFORMANCETEST42) @@ -245,8 +238,9 @@ TEST_F(RoudiFindService_test, StopOfferMultiMethodServiceSingleInstance) ASSERT_THAT(instanceContainer.size(), Eq(0u)); } -TEST_F(RoudiFindService_test, StopOfferServiceSingleMultipleCalls) +TEST_F(RoudiFindService_test, StopOfferServiceRedundantCall) { + iox::runtime::InstanceContainer instanceContainer; senderRuntime->offerService({"service1", "instance1"}); this->InterOpWait(); senderRuntime->stopOfferService({"service1", "instance1"}); @@ -254,21 +248,22 @@ TEST_F(RoudiFindService_test, StopOfferServiceSingleMultipleCalls) senderRuntime->stopOfferService({"service1", "instance1"}); this->InterOpWait(); - iox::runtime::InstanceContainer instanceContainer; receiverRuntime->findService({"service1", "instance1"}, instanceContainer); + ASSERT_THAT(instanceContainer.size(), Eq(0u)); } TEST_F(RoudiFindService_test, StopNonExistingService) { + iox::runtime::InstanceContainer instanceContainer; senderRuntime->offerService({"service1", "instance1"}); this->InterOpWait(); - senderRuntime->stopOfferService({"service2", "instance1"}); + senderRuntime->stopOfferService({"service2", "instance2"}); this->InterOpWait(); - iox::runtime::InstanceContainer instanceContainer; receiverRuntime->findService({"service1", "instance1"}, instanceContainer); + ASSERT_THAT(instanceContainer.size(), Eq(1)); ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); } From 167f7d9363d628f2d1f6535b9ed0508f06190572 Mon Sep 17 00:00:00 2001 From: "Chari Nehal Dattaram (RBEI/EBB1)" Date: Fri, 13 Nov 2020 10:44:08 +0530 Subject: [PATCH 03/15] iox-#240 linked iox issue against broken test Signed-off-by: Chari Nehal Dattaram (RBEI/EBB1) --- .../service_discovery/test_roudi_findservice.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp index 24a2e62c8d..654085d0a3 100644 --- a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp +++ b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp @@ -41,12 +41,13 @@ TEST_F(RoudiFindService_test, OfferSingleMethodServiceSingleInstance) } -///@todo offere service should return bool signalling success/failure +///@todo #359 offereService should return bool signalling success/failure TEST_F(RoudiFindService_test, DISABLED_OfferServiceWithDefaultServiceDescriptionFails) { iox::runtime::InstanceContainer instanceContainer; bool isServiceOffered; + ///@todo #359 offerService should not allow invalid ServiceDescriptions // isServiceOffered = senderRuntime->offerService(iox::capro::ServiceDescription()); this->InterOpWait(); From e5922ad0bbe851e1b9ddf757b61f1aa43bdd53ed Mon Sep 17 00:00:00 2001 From: "Chari Nehal Dattaram (RBEI/EBB1)" Date: Fri, 20 Nov 2020 13:24:14 +0530 Subject: [PATCH 04/15] iox-#240 cleared InstanceContainer inside PoshRuntime::findService Signed-off-by: Chari Nehal Dattaram (RBEI/EBB1) --- iceoryx_posh/source/runtime/posh_runtime.cpp | 1 + .../service_discovery/test_roudi_findservice.cpp | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/iceoryx_posh/source/runtime/posh_runtime.cpp b/iceoryx_posh/source/runtime/posh_runtime.cpp index 9089f835f4..c88263d009 100644 --- a/iceoryx_posh/source/runtime/posh_runtime.cpp +++ b/iceoryx_posh/source/runtime/posh_runtime.cpp @@ -484,6 +484,7 @@ cxx::expected PoshRuntime::findService(const capro::ServiceDescription& s return cxx::error(Error::kMQ_INTERFACE__REG_UNABLE_TO_WRITE_TO_ROUDI_MQ); } + instanceContainer.clear(); uint32_t numberOfElements = requestResponse.getNumberOfElements(); uint32_t capacity = static_cast(instanceContainer.capacity()); diff --git a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp index 654085d0a3..b64249fba3 100644 --- a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp +++ b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp @@ -84,18 +84,23 @@ TEST_F(RoudiFindService_test, OfferExsistingServiceMultipleTimesIsRedundant) ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); } -TEST_F(RoudiFindService_test, FindSameServiceMultipleTimesSuccessfully) +TEST_F(RoudiFindService_test, FindSameServiceMultipleTimesReturnsSingleInstance) { InstanceContainer instanceContainer; senderRuntime->offerService({"service1", "instance1"}); this->InterOpWait(); receiverRuntime->findService({"service1", "instance1"}, instanceContainer); + this->InterOpWait(); + + ASSERT_THAT(instanceContainer.size(), Eq(1u)); + ASSERT_THAT(instanceContainer.at(0), Eq(IdString("instance1"))); + receiverRuntime->findService({"service1", "instance1"}, instanceContainer); + this->InterOpWait(); - ASSERT_THAT(instanceContainer.size(), Eq(2u)); + ASSERT_THAT(instanceContainer.size(), Eq(1u)); ASSERT_THAT(instanceContainer.at(0), Eq(IdString("instance1"))); - ASSERT_THAT(instanceContainer.at(1), Eq(IdString("instance1"))); } TEST_F(RoudiFindService_test, DISABLED_OfferMultiMethodServiceSingleInstance_PERFORMANCETEST42) From 39fee648864c2cb84aba943a4bf6d1046def79f7 Mon Sep 17 00:00:00 2001 From: "Chari Nehal Dattaram (RBEI/EBB1)" Date: Mon, 23 Nov 2020 11:02:27 +0530 Subject: [PATCH 05/15] iox-#240 Disabled test to be fixed in #387 Signed-off-by: Chari Nehal Dattaram (RBEI/EBB1) --- iceoryx_posh/source/runtime/posh_runtime.cpp | 1 - .../service_discovery/test_roudi_findservice.cpp | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/iceoryx_posh/source/runtime/posh_runtime.cpp b/iceoryx_posh/source/runtime/posh_runtime.cpp index c88263d009..9089f835f4 100644 --- a/iceoryx_posh/source/runtime/posh_runtime.cpp +++ b/iceoryx_posh/source/runtime/posh_runtime.cpp @@ -484,7 +484,6 @@ cxx::expected PoshRuntime::findService(const capro::ServiceDescription& s return cxx::error(Error::kMQ_INTERFACE__REG_UNABLE_TO_WRITE_TO_ROUDI_MQ); } - instanceContainer.clear(); uint32_t numberOfElements = requestResponse.getNumberOfElements(); uint32_t capacity = static_cast(instanceContainer.capacity()); diff --git a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp index b64249fba3..c9568c22ac 100644 --- a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp +++ b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp @@ -84,7 +84,8 @@ TEST_F(RoudiFindService_test, OfferExsistingServiceMultipleTimesIsRedundant) ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); } -TEST_F(RoudiFindService_test, FindSameServiceMultipleTimesReturnsSingleInstance) +///@todo #387 findService to return InstanceContainer directly +TEST_F(RoudiFindService_test, DISABLED_FindSameServiceMultipleTimesReturnsSingleInstance) { InstanceContainer instanceContainer; senderRuntime->offerService({"service1", "instance1"}); From e73495d5175dcf23a61a18b56f49ce5a866192bf Mon Sep 17 00:00:00 2001 From: "Chari Nehal Dattaram (RBEI/EBB1)" Date: Tue, 24 Nov 2020 13:07:22 +0530 Subject: [PATCH 06/15] iox-#240 deprecated existng findService and added new signature Signed-off-by: Chari Nehal Dattaram (RBEI/EBB1) --- .../iceoryx_posh/runtime/posh_runtime.hpp | 14 ++++++- iceoryx_posh/source/runtime/posh_runtime.cpp | 39 +++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/iceoryx_posh/include/iceoryx_posh/runtime/posh_runtime.hpp b/iceoryx_posh/include/iceoryx_posh/runtime/posh_runtime.hpp index e4cf5e5df7..df93c2c47b 100644 --- a/iceoryx_posh/include/iceoryx_posh/runtime/posh_runtime.hpp +++ b/iceoryx_posh/include/iceoryx_posh/runtime/posh_runtime.hpp @@ -62,14 +62,24 @@ class PoshRuntime /// @return name of the reistered application std::string getInstanceName() const noexcept; + /// @deprecated #240 /// @brief find all services that match the provided service description /// @param[in] serviceDescription service to search for /// @param[out] instanceContainer container that is filled with all matching instances /// @return cxx::expected Error, if any, encountered during the operation /// Error::kPOSH__SERVICE_DISCOVERY_INSTANCE_CONTAINER_OVERFLOW : Number of instances can't fit in instanceContainer /// Error::kMQ_INTERFACE__REG_UNABLE_TO_WRITE_TO_ROUDI_MQ : Find Service Request could not be sent to RouDi - cxx::expected findService(const capro::ServiceDescription& serviceDescription, - InstanceContainer& instanceContainer) noexcept; + [[gnu::deprecated]] cxx::expected findService(const capro::ServiceDescription& serviceDescription, + InstanceContainer& instanceContainer) noexcept; + + /// @brief find all services that match the provided service description + /// @param[in] serviceDescription service to search for + /// @return cxx::expected + /// InstanceContainer: on success, container that is filled with all matching instances + /// Error: if any, encountered during the operation + /// Error::kPOSH__SERVICE_DISCOVERY_INSTANCE_CONTAINER_OVERFLOW : Number of instances can't fit in instanceContainer + /// Error::kMQ_INTERFACE__REG_UNABLE_TO_WRITE_TO_ROUDI_MQ : Find Service Request could not be sent to RouDi + cxx::expected findService(const capro::ServiceDescription& serviceDescription) noexcept; /// @brief offer the provided service, sends the offer from application to RouDi daemon /// @param[in] serviceDescription service to offer diff --git a/iceoryx_posh/source/runtime/posh_runtime.cpp b/iceoryx_posh/source/runtime/posh_runtime.cpp index 9089f835f4..45b8d7cde2 100644 --- a/iceoryx_posh/source/runtime/posh_runtime.cpp +++ b/iceoryx_posh/source/runtime/posh_runtime.cpp @@ -505,6 +505,45 @@ cxx::expected PoshRuntime::findService(const capro::ServiceDescription& s return {cxx::success<>()}; } +cxx::expected +PoshRuntime::findService(const capro::ServiceDescription& serviceDescription) noexcept +{ + MqMessage sendBuffer; + sendBuffer << mqMessageTypeToString(MqMessageType::FIND_SERVICE) << m_appName + << static_cast(serviceDescription).toString(); + + MqMessage requestResponse; + + if (!sendRequestToRouDi(sendBuffer, requestResponse)) + { + LogError() << "Could not send FIND_SERVICE request to RouDi\n"; + errorHandler(Error::kMQ_INTERFACE__REG_UNABLE_TO_WRITE_TO_ROUDI_MQ, nullptr, ErrorLevel::MODERATE); + return cxx::error(Error::kMQ_INTERFACE__REG_UNABLE_TO_WRITE_TO_ROUDI_MQ); + } + + InstanceContainer instanceContainer; + uint32_t numberOfElements = requestResponse.getNumberOfElements(); + uint32_t capacity = static_cast(instanceContainer.capacity()); + + // Limit the instances (max value is the capacity of instanceContainer) + uint32_t numberOfInstances = ((numberOfElements > capacity) ? capacity : numberOfElements); + for (uint32_t i = 0; i < numberOfInstances; ++i) + { + IdString instance(iox::cxx::TruncateToCapacity, requestResponse.getElementAtIndex(i).c_str()); + instanceContainer.push_back(instance); + } + + if (numberOfElements > capacity) + { + LogWarn() << numberOfElements << " instances found for service \"" << serviceDescription.getServiceIDString() + << "\" which is more than supported number of instances(" << MAX_NUMBER_OF_INSTANCES << "\n"; + errorHandler(Error::kPOSH__SERVICE_DISCOVERY_INSTANCE_CONTAINER_OVERFLOW, nullptr, ErrorLevel::MODERATE); + return cxx::error(Error::kPOSH__SERVICE_DISCOVERY_INSTANCE_CONTAINER_OVERFLOW); + } + return {cxx::success(instanceContainer)}; +} + + void PoshRuntime::offerService(const capro::ServiceDescription& serviceDescription) noexcept { capro::CaproMessage msg(capro::CaproMessageType::OFFER, serviceDescription, capro::CaproMessageSubType::SERVICE); From 6e2137d471394defc1d62038395fb033692dc90a Mon Sep 17 00:00:00 2001 From: "Chari Nehal Dattaram (RBEI/EBB1)" Date: Tue, 24 Nov 2020 17:31:54 +0530 Subject: [PATCH 07/15] iox-#240 adapted signature change of findservice() Signed-off-by: Chari Nehal Dattaram (RBEI/EBB1) --- .../test_roudi_findservice.cpp | 216 ++++++++---------- 1 file changed, 90 insertions(+), 126 deletions(-) diff --git a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp index c9568c22ac..195fa21697 100644 --- a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp +++ b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp @@ -33,11 +33,11 @@ TEST_F(RoudiFindService_test, OfferSingleMethodServiceSingleInstance) { senderRuntime->offerService({"service1", "instance1"}); this->InterOpWait(); - iox::runtime::InstanceContainer instanceContainer; - receiverRuntime->findService({"service1", "instance1"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); + auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); + + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); } @@ -56,7 +56,6 @@ TEST_F(RoudiFindService_test, DISABLED_OfferServiceWithDefaultServiceDescription TEST_F(RoudiFindService_test, ReofferedServiceWithValidServiceDescriptionCanBeFound) { - iox::runtime::InstanceContainer instanceContainer; senderRuntime->offerService({"service1", "instance1"}); this->InterOpWait(); senderRuntime->stopOfferService({"service1", "instance1"}); @@ -64,44 +63,37 @@ TEST_F(RoudiFindService_test, ReofferedServiceWithValidServiceDescriptionCanBeFo senderRuntime->offerService({"service1", "instance1"}); this->InterOpWait(); - receiverRuntime->findService({"service1", "instance1"}, instanceContainer); + auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); } TEST_F(RoudiFindService_test, OfferExsistingServiceMultipleTimesIsRedundant) { - InstanceContainer instanceContainer; senderRuntime->offerService({"service1", "instance1"}); this->InterOpWait(); senderRuntime->offerService({"service1", "instance1"}); this->InterOpWait(); - receiverRuntime->findService({"service1", "instance1"}, instanceContainer); + auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); } -///@todo #387 findService to return InstanceContainer directly -TEST_F(RoudiFindService_test, DISABLED_FindSameServiceMultipleTimesReturnsSingleInstance) +TEST_F(RoudiFindService_test, FindSameServiceMultipleTimesReturnsSingleInstance) { - InstanceContainer instanceContainer; senderRuntime->offerService({"service1", "instance1"}); this->InterOpWait(); - receiverRuntime->findService({"service1", "instance1"}, instanceContainer); - this->InterOpWait(); - - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(instanceContainer.at(0), Eq(IdString("instance1"))); - - receiverRuntime->findService({"service1", "instance1"}, instanceContainer); - this->InterOpWait(); + auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(instanceContainer.at(0), Eq(IdString("instance1"))); + instanceContainer = receiverRuntime->findService({"service1", "instance1"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); } TEST_F(RoudiFindService_test, DISABLED_OfferMultiMethodServiceSingleInstance_PERFORMANCETEST42) @@ -109,23 +101,19 @@ TEST_F(RoudiFindService_test, DISABLED_OfferMultiMethodServiceSingleInstance_PER senderRuntime->offerService({"service1", "instance1"}); senderRuntime->offerService({"service2", "instance1"}); senderRuntime->offerService({"service3", "instance1"}); - this->InterOpWait(); - iox::runtime::InstanceContainer instanceContainer; - receiverRuntime->findService({"service1", "instance1"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); + auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); - instanceContainer.clear(); - receiverRuntime->findService({"service2", "instance1"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); + instanceContainer = receiverRuntime->findService({"service2", "instance1"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); - instanceContainer.clear(); - receiverRuntime->findService({"service3", "instance1"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); + instanceContainer = receiverRuntime->findService({"service3", "instance1"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); } TEST_F(RoudiFindService_test, SubscribeAnyInstance) @@ -133,16 +121,14 @@ TEST_F(RoudiFindService_test, SubscribeAnyInstance) senderRuntime->offerService({"service1", "instance1"}); senderRuntime->offerService({"service1", "instance2"}); senderRuntime->offerService({"service1", "instance3"}); - this->InterOpWait(); - InstanceContainer instanceContainer; InstanceContainer instanceContainerExp; InitContainer(instanceContainerExp, {"instance1", "instance2", "instance3"}); - receiverRuntime->findService({"service1", "65535"}, instanceContainer); + auto instanceContainer = receiverRuntime->findService({"service1", "65535"}); - ASSERT_THAT(instanceContainer.size(), Eq(3u)); - EXPECT_TRUE(instanceContainer == instanceContainerExp); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(3u)); + EXPECT_TRUE(instanceContainer.get_value() == instanceContainerExp); } TEST_F(RoudiFindService_test, OfferSingleMethodServiceMultiInstance) @@ -152,20 +138,17 @@ TEST_F(RoudiFindService_test, OfferSingleMethodServiceMultiInstance) senderRuntime->offerService({"service1", "instance3"}); this->InterOpWait(); - iox::runtime::InstanceContainer instanceContainer; - receiverRuntime->findService({"service1", "instance1"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); - - instanceContainer.clear(); - receiverRuntime->findService({"service1", "instance2"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance2"))); - - instanceContainer.clear(); - receiverRuntime->findService({"service1", "instance3"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance3"))); + auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); + + instanceContainer = receiverRuntime->findService({"service1", "instance2"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance2"))); + + instanceContainer = receiverRuntime->findService({"service1", "instance3"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance3"))); } TEST_F(RoudiFindService_test, OfferMultiMethodServiceMultiInstance) @@ -178,35 +161,29 @@ TEST_F(RoudiFindService_test, OfferMultiMethodServiceMultiInstance) senderRuntime->offerService({"service2", "instance3"}); this->InterOpWait(); - iox::runtime::InstanceContainer instanceContainer; - receiverRuntime->findService({"service1", "instance1"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); - - instanceContainer.clear(); - receiverRuntime->findService({"service1", "instance2"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance2"))); - - instanceContainer.clear(); - receiverRuntime->findService({"service1", "instance3"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance3"))); - - instanceContainer.clear(); - receiverRuntime->findService({"service2", "instance1"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); - - instanceContainer.clear(); - receiverRuntime->findService({"service2", "instance2"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance2"))); - - instanceContainer.clear(); - receiverRuntime->findService({"service2", "instance3"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance3"))); + auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); + + instanceContainer = receiverRuntime->findService({"service1", "instance2"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance2"))); + + instanceContainer = receiverRuntime->findService({"service1", "instance3"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance3"))); + + instanceContainer = receiverRuntime->findService({"service2", "instance1"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); + + instanceContainer = receiverRuntime->findService({"service2", "instance2"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance2"))); + + instanceContainer = receiverRuntime->findService({"service2", "instance3"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance3"))); } TEST_F(RoudiFindService_test, StopOfferSingleMethodServiceSingleInstance) @@ -216,9 +193,8 @@ TEST_F(RoudiFindService_test, StopOfferSingleMethodServiceSingleInstance) senderRuntime->stopOfferService({"service1", "instance1"}); this->InterOpWait(); - iox::runtime::InstanceContainer instanceContainer; - receiverRuntime->findService({"service1", "instance1"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(0u)); + auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(0u)); } TEST_F(RoudiFindService_test, StopOfferMultiMethodServiceSingleInstance) @@ -231,23 +207,19 @@ TEST_F(RoudiFindService_test, StopOfferMultiMethodServiceSingleInstance) senderRuntime->stopOfferService({"service3", "instance1"}); this->InterOpWait(); - iox::runtime::InstanceContainer instanceContainer; - receiverRuntime->findService({"service1", "instance1"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(0u)); + auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(0u)); - instanceContainer.clear(); - receiverRuntime->findService({"service2", "instance1"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); + instanceContainer = receiverRuntime->findService({"service2", "instance1"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); - instanceContainer.clear(); - receiverRuntime->findService({"service3", "instance1"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(0u)); + instanceContainer = receiverRuntime->findService({"service3", "instance1"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(0u)); } TEST_F(RoudiFindService_test, StopOfferServiceRedundantCall) { - iox::runtime::InstanceContainer instanceContainer; senderRuntime->offerService({"service1", "instance1"}); this->InterOpWait(); senderRuntime->stopOfferService({"service1", "instance1"}); @@ -255,24 +227,23 @@ TEST_F(RoudiFindService_test, StopOfferServiceRedundantCall) senderRuntime->stopOfferService({"service1", "instance1"}); this->InterOpWait(); - receiverRuntime->findService({"service1", "instance1"}, instanceContainer); + auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); - ASSERT_THAT(instanceContainer.size(), Eq(0u)); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(0u)); } TEST_F(RoudiFindService_test, StopNonExistingService) { - iox::runtime::InstanceContainer instanceContainer; senderRuntime->offerService({"service1", "instance1"}); this->InterOpWait(); senderRuntime->stopOfferService({"service2", "instance2"}); this->InterOpWait(); - receiverRuntime->findService({"service1", "instance1"}, instanceContainer); + auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); - ASSERT_THAT(instanceContainer.size(), Eq(1)); - ASSERT_THAT(*instanceContainer.begin(), Eq(IdString("instance1"))); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(1)); + ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); } TEST_F(RoudiFindService_test, FindNonExistingServices) @@ -282,16 +253,16 @@ TEST_F(RoudiFindService_test, FindNonExistingServices) senderRuntime->offerService({"service3", "instance1"}); this->InterOpWait(); - iox::runtime::InstanceContainer instanceContainer; - receiverRuntime->findService({"service1", "schlomo"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(0u)); + auto instanceContainer = receiverRuntime->findService({"service1", "schlomo"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(0u)); - receiverRuntime->findService({"ignatz", "instance1"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(0u)); + instanceContainer = receiverRuntime->findService({"ignatz", "instance1"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(0u)); - receiverRuntime->findService({"ignatz", "schlomo"}, instanceContainer); - ASSERT_THAT(instanceContainer.size(), Eq(0u)); + instanceContainer = receiverRuntime->findService({"ignatz", "schlomo"}); + ASSERT_THAT(instanceContainer.get_value().size(), Eq(0u)); } + TEST_F(RoudiFindService_test, InterfacePort) { senderRuntime->offerService({"service1", "instance1"}); @@ -299,9 +270,7 @@ TEST_F(RoudiFindService_test, InterfacePort) auto interfacePortData = receiverRuntime->getMiddlewareInterface(iox::capro::Interfaces::SOMEIP); iox::popo::InterfacePort interfacePort(interfacePortData); - this->InterOpWait(); - bool serviceFound = false; while (auto maybeCaProMessage = interfacePort.tryGetCaProMessage()) @@ -323,7 +292,6 @@ TEST_F(RoudiFindService_test, findServiceMaxInstances) { size_t noOfInstances = iox::MAX_NUMBER_OF_INSTANCES; InstanceContainer instanceContainerExp; - for (size_t i = 0; i < noOfInstances; i++) { // Service & Instance string is kept short , to reduce the response size in find service request , @@ -334,12 +302,11 @@ TEST_F(RoudiFindService_test, findServiceMaxInstances) this->InterOpWait(); } - iox::runtime::InstanceContainer instanceContainer; - auto status = receiverRuntime->findService({"s", "65535"}, instanceContainer); + auto instanceContainer = receiverRuntime->findService({"s", "65535"}); - EXPECT_THAT(instanceContainer.size(), Eq(iox::MAX_NUMBER_OF_INSTANCES)); - EXPECT_TRUE(instanceContainer == instanceContainerExp); - ASSERT_THAT(status.has_error(), Eq(false)); + EXPECT_THAT(instanceContainer.get_value().size(), Eq(iox::MAX_NUMBER_OF_INSTANCES)); + EXPECT_TRUE(instanceContainer.get_value() == instanceContainerExp); + ASSERT_THAT(instanceContainer.has_error(), Eq(false)); } TEST_F(RoudiFindService_test, findServiceInstanceContainerOverflowError) @@ -354,10 +321,7 @@ TEST_F(RoudiFindService_test, findServiceInstanceContainerOverflowError) this->InterOpWait(); } - iox::runtime::InstanceContainer instanceContainer; - auto status = receiverRuntime->findService({"s", "65535"}, instanceContainer); + auto instanceContainer = receiverRuntime->findService({"s", "65535"}); - EXPECT_THAT(instanceContainer.size(), Eq(iox::MAX_NUMBER_OF_INSTANCES)); - EXPECT_TRUE(instanceContainer == instanceContainerExp); - ASSERT_THAT(status.has_error(), Eq(true)); + ASSERT_THAT(instanceContainer.has_error(), Eq(true)); } From 0e933a0deb720982f8beeaf2ec8cb76c080dc657 Mon Sep 17 00:00:00 2001 From: "Chari Nehal Dattaram (RBEI/EBB1)" Date: Tue, 8 Dec 2020 09:57:29 +0530 Subject: [PATCH 08/15] iox-#240 removed deprecated findService API Signed-off-by: Chari Nehal Dattaram (RBEI/EBB1) --- .../iceoryx_posh/runtime/posh_runtime.hpp | 10 ----- iceoryx_posh/source/runtime/posh_runtime.cpp | 37 ------------------- 2 files changed, 47 deletions(-) diff --git a/iceoryx_posh/include/iceoryx_posh/runtime/posh_runtime.hpp b/iceoryx_posh/include/iceoryx_posh/runtime/posh_runtime.hpp index df93c2c47b..a7fc76d786 100644 --- a/iceoryx_posh/include/iceoryx_posh/runtime/posh_runtime.hpp +++ b/iceoryx_posh/include/iceoryx_posh/runtime/posh_runtime.hpp @@ -62,16 +62,6 @@ class PoshRuntime /// @return name of the reistered application std::string getInstanceName() const noexcept; - /// @deprecated #240 - /// @brief find all services that match the provided service description - /// @param[in] serviceDescription service to search for - /// @param[out] instanceContainer container that is filled with all matching instances - /// @return cxx::expected Error, if any, encountered during the operation - /// Error::kPOSH__SERVICE_DISCOVERY_INSTANCE_CONTAINER_OVERFLOW : Number of instances can't fit in instanceContainer - /// Error::kMQ_INTERFACE__REG_UNABLE_TO_WRITE_TO_ROUDI_MQ : Find Service Request could not be sent to RouDi - [[gnu::deprecated]] cxx::expected findService(const capro::ServiceDescription& serviceDescription, - InstanceContainer& instanceContainer) noexcept; - /// @brief find all services that match the provided service description /// @param[in] serviceDescription service to search for /// @return cxx::expected diff --git a/iceoryx_posh/source/runtime/posh_runtime.cpp b/iceoryx_posh/source/runtime/posh_runtime.cpp index 45b8d7cde2..f89d8ba038 100644 --- a/iceoryx_posh/source/runtime/posh_runtime.cpp +++ b/iceoryx_posh/source/runtime/posh_runtime.cpp @@ -468,43 +468,6 @@ RunnableData* PoshRuntime::createRunnable(const RunnableProperty& runnableProper return nullptr; } -cxx::expected PoshRuntime::findService(const capro::ServiceDescription& serviceDescription, - InstanceContainer& instanceContainer) noexcept -{ - MqMessage sendBuffer; - sendBuffer << mqMessageTypeToString(MqMessageType::FIND_SERVICE) << m_appName - << static_cast(serviceDescription).toString(); - - MqMessage requestResponse; - - if (!sendRequestToRouDi(sendBuffer, requestResponse)) - { - LogError() << "Could not send FIND_SERVICE request to RouDi\n"; - errorHandler(Error::kMQ_INTERFACE__REG_UNABLE_TO_WRITE_TO_ROUDI_MQ, nullptr, ErrorLevel::MODERATE); - return cxx::error(Error::kMQ_INTERFACE__REG_UNABLE_TO_WRITE_TO_ROUDI_MQ); - } - - uint32_t numberOfElements = requestResponse.getNumberOfElements(); - uint32_t capacity = static_cast(instanceContainer.capacity()); - - // Limit the instances (max value is the capacity of instanceContainer) - uint32_t numberOfInstances = ((numberOfElements > capacity) ? capacity : numberOfElements); - for (uint32_t i = 0; i < numberOfInstances; ++i) - { - IdString instance(iox::cxx::TruncateToCapacity, requestResponse.getElementAtIndex(i).c_str()); - instanceContainer.push_back(instance); - } - - if (numberOfElements > capacity) - { - LogWarn() << numberOfElements << " instances found for service \"" << serviceDescription.getServiceIDString() - << "\" which is more than supported number of instances(" << MAX_NUMBER_OF_INSTANCES << "\n"; - errorHandler(Error::kPOSH__SERVICE_DISCOVERY_INSTANCE_CONTAINER_OVERFLOW, nullptr, ErrorLevel::MODERATE); - return cxx::error(Error::kPOSH__SERVICE_DISCOVERY_INSTANCE_CONTAINER_OVERFLOW); - } - return {cxx::success<>()}; -} - cxx::expected PoshRuntime::findService(const capro::ServiceDescription& serviceDescription) noexcept { From 0ff74ed8f140bcf9b0e141becebb11a59bd2ac22 Mon Sep 17 00:00:00 2001 From: "Chari Nehal Dattaram (RBEI/EBB1)" Date: Mon, 14 Dec 2020 13:17:35 +0530 Subject: [PATCH 09/15] iox-#240 changed signature of offerService to return bool Signed-off-by: Chari Nehal Dattaram (RBEI/EBB1) --- .../iceoryx_posh/runtime/posh_runtime.hpp | 3 +- iceoryx_posh/source/runtime/posh_runtime.cpp | 11 +++++++- .../test_roudi_findservice.cpp | 28 ++++++++++++++----- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/iceoryx_posh/include/iceoryx_posh/runtime/posh_runtime.hpp b/iceoryx_posh/include/iceoryx_posh/runtime/posh_runtime.hpp index a7fc76d786..e98c509f92 100644 --- a/iceoryx_posh/include/iceoryx_posh/runtime/posh_runtime.hpp +++ b/iceoryx_posh/include/iceoryx_posh/runtime/posh_runtime.hpp @@ -73,7 +73,8 @@ class PoshRuntime /// @brief offer the provided service, sends the offer from application to RouDi daemon /// @param[in] serviceDescription service to offer - void offerService(const capro::ServiceDescription& serviceDescription) noexcept; + /// @return bool, if service is offered returns true else false + bool offerService(const capro::ServiceDescription& serviceDescription) noexcept; /// @brief stop offering the provided service /// @param[in] serviceDescription of the service that shall be no more offered diff --git a/iceoryx_posh/source/runtime/posh_runtime.cpp b/iceoryx_posh/source/runtime/posh_runtime.cpp index f89d8ba038..26bf7a52f6 100644 --- a/iceoryx_posh/source/runtime/posh_runtime.cpp +++ b/iceoryx_posh/source/runtime/posh_runtime.cpp @@ -507,10 +507,19 @@ PoshRuntime::findService(const capro::ServiceDescription& serviceDescription) no } -void PoshRuntime::offerService(const capro::ServiceDescription& serviceDescription) noexcept +bool PoshRuntime::offerService(const capro::ServiceDescription& serviceDescription) noexcept { + if (serviceDescription.getServiceIDString() == iox::capro::InvalidIDString + || serviceDescription.getServiceIDString() == IdString(iox::capro::AnyServiceString) + || serviceDescription.getInstanceIDString() == iox::capro::InvalidIDString + || serviceDescription.getInstanceIDString() == IdString(iox::capro::AnyInstanceString)) + { + LogWarn() << "Invalid ServiceDescription found, could not offer this service\n"; + return false; + } capro::CaproMessage msg(capro::CaproMessageType::OFFER, serviceDescription, capro::CaproMessageSubType::SERVICE); m_applicationPort.dispatchCaProMessage(msg); + return true; } void PoshRuntime::stopOfferService(const capro::ServiceDescription& serviceDescription) noexcept diff --git a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp index 195fa21697..6abfd7056a 100644 --- a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp +++ b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp @@ -31,24 +31,38 @@ class RoudiFindService_test : public RouDiServiceDiscoveryTest TEST_F(RoudiFindService_test, OfferSingleMethodServiceSingleInstance) { - senderRuntime->offerService({"service1", "instance1"}); + auto isServiceOffered = senderRuntime->offerService({"service1", "instance1"}); this->InterOpWait(); auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); + ASSERT_EQ(true, isServiceOffered); } -///@todo #359 offereService should return bool signalling success/failure -TEST_F(RoudiFindService_test, DISABLED_OfferServiceWithDefaultServiceDescriptionFails) +TEST_F(RoudiFindService_test, OfferServiceWithDefaultServiceDescriptionFails) +{ + auto isServiceOffered = senderRuntime->offerService(iox::capro::ServiceDescription()); + this->InterOpWait(); + + ASSERT_EQ(false, isServiceOffered); +} + +TEST_F(RoudiFindService_test, OfferServiceWithAnyServiceIdStringDescriptionFails) { - iox::runtime::InstanceContainer instanceContainer; - bool isServiceOffered; + auto isServiceOffered = senderRuntime->offerService( + iox::capro::ServiceDescription(iox::capro::AnyServiceString, iox::capro::AnyInstanceString)); + this->InterOpWait(); + + ASSERT_EQ(false, isServiceOffered); +} - ///@todo #359 offerService should not allow invalid ServiceDescriptions - // isServiceOffered = senderRuntime->offerService(iox::capro::ServiceDescription()); +TEST_F(RoudiFindService_test, OfferServiceWithAnyServiceIdDescriptionFails) +{ + auto isServiceOffered = + senderRuntime->offerService(iox::capro::ServiceDescription(iox::capro::AnyService, iox::capro::AnyInstance)); this->InterOpWait(); ASSERT_EQ(false, isServiceOffered); From 63cba6bade8a0c8d34cb386c6539b012c4edfa2b Mon Sep 17 00:00:00 2001 From: "Chari Nehal Dattaram (RBEI/EBB1)" Date: Wed, 16 Dec 2020 16:58:01 +0530 Subject: [PATCH 10/15] iox-#240 introduced isValid method in ServiceDescription Signed-off-by: Chari Nehal Dattaram (RBEI/EBB1) --- .../capro/service_description.hpp | 3 + .../source/capro/service_description.cpp | 6 ++ iceoryx_posh/source/runtime/posh_runtime.cpp | 17 ++-- .../test_roudi_findservice.cpp | 98 +++++++++---------- 4 files changed, 66 insertions(+), 58 deletions(-) diff --git a/iceoryx_posh/include/iceoryx_posh/capro/service_description.hpp b/iceoryx_posh/include/iceoryx_posh/capro/service_description.hpp index 4b8b4e329d..8feec0d7ab 100644 --- a/iceoryx_posh/include/iceoryx_posh/capro/service_description.hpp +++ b/iceoryx_posh/include/iceoryx_posh/capro/service_description.hpp @@ -148,6 +148,9 @@ class ServiceDescription /// @brief Returns the scope of a ServiceDescription Scope getScope() noexcept; + ///@brief Returns true for valid ServiceDescription + bool isValid() const noexcept; + ///@{ /// Getters for the integer and string IDs uint16_t getInstanceID() const noexcept; diff --git a/iceoryx_posh/source/capro/service_description.cpp b/iceoryx_posh/source/capro/service_description.cpp index 55c227bdf4..c485b3f409 100644 --- a/iceoryx_posh/source/capro/service_description.cpp +++ b/iceoryx_posh/source/capro/service_description.cpp @@ -289,6 +289,12 @@ Interfaces ServiceDescription::getSourceInterface() const noexcept return m_interfaceSource; } +bool ServiceDescription::isValid() const noexcept +{ + return !(m_serviceString == iox::capro::InvalidIDString || m_serviceID == iox::capro::AnyService + || m_instanceString == iox::capro::InvalidIDString || m_instanceID == iox::capro::AnyInstance); +} + bool serviceMatch(const ServiceDescription& first, const ServiceDescription& second) noexcept { return (first.getServiceID() == second.getServiceID()); diff --git a/iceoryx_posh/source/runtime/posh_runtime.cpp b/iceoryx_posh/source/runtime/posh_runtime.cpp index 2426712326..d9ddfebf1e 100644 --- a/iceoryx_posh/source/runtime/posh_runtime.cpp +++ b/iceoryx_posh/source/runtime/posh_runtime.cpp @@ -403,17 +403,16 @@ PoshRuntime::findService(const capro::ServiceDescription& serviceDescription) no bool PoshRuntime::offerService(const capro::ServiceDescription& serviceDescription) noexcept { - if (serviceDescription.getServiceIDString() == iox::capro::InvalidIDString - || serviceDescription.getServiceIDString() == IdString(iox::capro::AnyServiceString) - || serviceDescription.getInstanceIDString() == iox::capro::InvalidIDString - || serviceDescription.getInstanceIDString() == IdString(iox::capro::AnyInstanceString)) + if (serviceDescription.isValid()) { - LogWarn() << "Invalid ServiceDescription found, could not offer this service\n"; - return false; + capro::CaproMessage msg( + capro::CaproMessageType::OFFER, serviceDescription, capro::CaproMessageSubType::SERVICE); + m_applicationPort.dispatchCaProMessage(msg); + return true; } - capro::CaproMessage msg(capro::CaproMessageType::OFFER, serviceDescription, capro::CaproMessageSubType::SERVICE); - m_applicationPort.dispatchCaProMessage(msg); - return true; + LogWarn() << "Could not offer service " << serviceDescription.getServiceIDString() << "," + << " ServiceDescription is invalid\n"; + return false; } void PoshRuntime::stopOfferService(const capro::ServiceDescription& serviceDescription) noexcept diff --git a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp index a916a040a6..dad6aedf65 100644 --- a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp +++ b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp @@ -36,8 +36,8 @@ TEST_F(RoudiFindService_test, OfferSingleMethodServiceSingleInstance) auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance1"))); ASSERT_EQ(true, isServiceOffered); } @@ -79,8 +79,8 @@ TEST_F(RoudiFindService_test, ReofferedServiceWithValidServiceDescriptionCanBeFo auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance1"))); } TEST_F(RoudiFindService_test, OfferExsistingServiceMultipleTimesIsRedundant) @@ -92,8 +92,8 @@ TEST_F(RoudiFindService_test, OfferExsistingServiceMultipleTimesIsRedundant) auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance1"))); } TEST_F(RoudiFindService_test, FindSameServiceMultipleTimesReturnsSingleInstance) @@ -102,12 +102,12 @@ TEST_F(RoudiFindService_test, FindSameServiceMultipleTimesReturnsSingleInstance) this->InterOpWait(); auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance1"))); instanceContainer = receiverRuntime->findService({"service1", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance1"))); } TEST_F(RoudiFindService_test, DISABLED_OfferMultiMethodServiceSingleInstance_PERFORMANCETEST42) @@ -118,16 +118,16 @@ TEST_F(RoudiFindService_test, DISABLED_OfferMultiMethodServiceSingleInstance_PER this->InterOpWait(); auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance1"))); instanceContainer = receiverRuntime->findService({"service2", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance1"))); instanceContainer = receiverRuntime->findService({"service3", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance1"))); } TEST_F(RoudiFindService_test, SubscribeAnyInstance) @@ -141,8 +141,8 @@ TEST_F(RoudiFindService_test, SubscribeAnyInstance) auto instanceContainer = receiverRuntime->findService({"service1", "65535"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(3u)); - EXPECT_TRUE(instanceContainer.get_value() == instanceContainerExp); + ASSERT_THAT(instanceContainer.value().size(), Eq(3u)); + EXPECT_TRUE(instanceContainer.value() == instanceContainerExp); } TEST_F(RoudiFindService_test, OfferSingleMethodServiceMultiInstance) @@ -153,16 +153,16 @@ TEST_F(RoudiFindService_test, OfferSingleMethodServiceMultiInstance) this->InterOpWait(); auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance1"))); instanceContainer = receiverRuntime->findService({"service1", "instance2"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance2"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance2"))); instanceContainer = receiverRuntime->findService({"service1", "instance3"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance3"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance3"))); } TEST_F(RoudiFindService_test, OfferMultiMethodServiceMultiInstance) @@ -176,28 +176,28 @@ TEST_F(RoudiFindService_test, OfferMultiMethodServiceMultiInstance) this->InterOpWait(); auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance1"))); instanceContainer = receiverRuntime->findService({"service1", "instance2"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance2"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance2"))); instanceContainer = receiverRuntime->findService({"service1", "instance3"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance3"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance3"))); instanceContainer = receiverRuntime->findService({"service2", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance1"))); instanceContainer = receiverRuntime->findService({"service2", "instance2"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance2"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance2"))); instanceContainer = receiverRuntime->findService({"service2", "instance3"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance3"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance3"))); } TEST_F(RoudiFindService_test, StopOfferSingleMethodServiceSingleInstance) @@ -208,7 +208,7 @@ TEST_F(RoudiFindService_test, StopOfferSingleMethodServiceSingleInstance) this->InterOpWait(); auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(0u)); + ASSERT_THAT(instanceContainer.value().size(), Eq(0u)); } TEST_F(RoudiFindService_test, StopOfferMultiMethodServiceSingleInstance) @@ -222,14 +222,14 @@ TEST_F(RoudiFindService_test, StopOfferMultiMethodServiceSingleInstance) this->InterOpWait(); auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(0u)); + ASSERT_THAT(instanceContainer.value().size(), Eq(0u)); instanceContainer = receiverRuntime->findService({"service2", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance1"))); instanceContainer = receiverRuntime->findService({"service3", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(0u)); + ASSERT_THAT(instanceContainer.value().size(), Eq(0u)); } TEST_F(RoudiFindService_test, StopOfferServiceRedundantCall) @@ -243,7 +243,7 @@ TEST_F(RoudiFindService_test, StopOfferServiceRedundantCall) auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(0u)); + ASSERT_THAT(instanceContainer.value().size(), Eq(0u)); } @@ -256,8 +256,8 @@ TEST_F(RoudiFindService_test, StopNonExistingService) auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(1)); - ASSERT_THAT(*instanceContainer.get_value().begin(), Eq(IdString("instance1"))); + ASSERT_THAT(instanceContainer.value().size(), Eq(1)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString("instance1"))); } TEST_F(RoudiFindService_test, FindNonExistingServices) @@ -268,13 +268,13 @@ TEST_F(RoudiFindService_test, FindNonExistingServices) this->InterOpWait(); auto instanceContainer = receiverRuntime->findService({"service1", "schlomo"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(0u)); + ASSERT_THAT(instanceContainer.value().size(), Eq(0u)); instanceContainer = receiverRuntime->findService({"ignatz", "instance1"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(0u)); + ASSERT_THAT(instanceContainer.value().size(), Eq(0u)); instanceContainer = receiverRuntime->findService({"ignatz", "schlomo"}); - ASSERT_THAT(instanceContainer.get_value().size(), Eq(0u)); + ASSERT_THAT(instanceContainer.value().size(), Eq(0u)); } TEST_F(RoudiFindService_test, InterfacePort) @@ -318,8 +318,8 @@ TEST_F(RoudiFindService_test, findServiceMaxInstances) auto instanceContainer = receiverRuntime->findService({"s", "65535"}); - EXPECT_THAT(instanceContainer.get_value().size(), Eq(iox::MAX_NUMBER_OF_INSTANCES)); - EXPECT_TRUE(instanceContainer.get_value() == instanceContainerExp); + EXPECT_THAT(instanceContainer.value().size(), Eq(iox::MAX_NUMBER_OF_INSTANCES)); + EXPECT_TRUE(instanceContainer.value() == instanceContainerExp); ASSERT_THAT(instanceContainer.has_error(), Eq(false)); } From c6be61c11a03068b035dc77808bdd7b484490edd Mon Sep 17 00:00:00 2001 From: "Chari Nehal Dattaram (RBEI/EBB1)" Date: Mon, 21 Dec 2020 17:59:35 +0530 Subject: [PATCH 11/15] iox-#240 introduced check for Event in ServiceDescription::isValid() Signed-off-by: Chari Nehal Dattaram (RBEI/EBB1) --- .../capro/service_description.hpp | 2 ++ .../source/capro/service_description.cpp | 13 +++++-- .../test_roudi_findservice.cpp | 36 +++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/iceoryx_posh/include/iceoryx_posh/capro/service_description.hpp b/iceoryx_posh/include/iceoryx_posh/capro/service_description.hpp index 8feec0d7ab..3d683b2f4c 100644 --- a/iceoryx_posh/include/iceoryx_posh/capro/service_description.hpp +++ b/iceoryx_posh/include/iceoryx_posh/capro/service_description.hpp @@ -149,6 +149,8 @@ class ServiceDescription Scope getScope() noexcept; ///@brief Returns true for valid ServiceDescription + /// false for ServiceDescription that contains either of InvalidID/InvalidIDString AnyService/AnyServiceString, + /// AnyInstance/AnyInstanceString, AnyEvent/AnyEventString. bool isValid() const noexcept; ///@{ diff --git a/iceoryx_posh/source/capro/service_description.cpp b/iceoryx_posh/source/capro/service_description.cpp index c485b3f409..a1e05847d3 100644 --- a/iceoryx_posh/source/capro/service_description.cpp +++ b/iceoryx_posh/source/capro/service_description.cpp @@ -291,8 +291,17 @@ Interfaces ServiceDescription::getSourceInterface() const noexcept bool ServiceDescription::isValid() const noexcept { - return !(m_serviceString == iox::capro::InvalidIDString || m_serviceID == iox::capro::AnyService - || m_instanceString == iox::capro::InvalidIDString || m_instanceID == iox::capro::AnyInstance); + if (m_hasServiceOnlyDescription) + { + return !(m_serviceString == iox::capro::InvalidIDString || m_serviceID == iox::capro::AnyService + || m_instanceString == iox::capro::InvalidIDString || m_instanceID == iox::capro::AnyInstance); + } + else + { + return !(m_serviceString == iox::capro::InvalidIDString || m_serviceID == iox::capro::AnyService + || m_instanceString == iox::capro::InvalidIDString || m_instanceID == iox::capro::AnyInstance + || m_eventString == iox::capro::InvalidIDString || m_eventID == iox::capro::AnyEvent); + } } bool serviceMatch(const ServiceDescription& first, const ServiceDescription& second) noexcept diff --git a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp index dad6aedf65..93d8367ebd 100644 --- a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp +++ b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp @@ -68,6 +68,42 @@ TEST_F(RoudiFindService_test, OfferServiceWithAnyServiceIdDescriptionFails) ASSERT_EQ(false, isServiceOffered); } +TEST_F(RoudiFindService_test, OfferServiceWithValidEventIdSucessfull) +{ + auto isServiceOffered = + senderRuntime->offerService(iox::capro::ServiceDescription({"service1", "instance1", "event1"})); + this->InterOpWait(); + + ASSERT_EQ(true, isServiceOffered); +} + +TEST_F(RoudiFindService_test, OfferServiceWithInvalidEventIdFails) +{ + auto isServiceOffered = senderRuntime->offerService( + iox::capro::ServiceDescription({"service1", "instance1", iox::capro::InvalidIDString})); + this->InterOpWait(); + + ASSERT_EQ(false, isServiceOffered); +} + +TEST_F(RoudiFindService_test, OfferServiceWithAnyEventIdFails) +{ + auto isServiceOffered = + senderRuntime->offerService(iox::capro::ServiceDescription(123u, 456u, iox::capro::AnyEvent)); + this->InterOpWait(); + + ASSERT_EQ(false, isServiceOffered); +} + +TEST_F(RoudiFindService_test, OfferServiceWithAnyEventIdStringFails) +{ + auto isServiceOffered = senderRuntime->offerService( + iox::capro::ServiceDescription({"service1", "instance1", iox::capro::AnyEventString})); + this->InterOpWait(); + + ASSERT_EQ(false, isServiceOffered); +} + TEST_F(RoudiFindService_test, ReofferedServiceWithValidServiceDescriptionCanBeFound) { senderRuntime->offerService({"service1", "instance1"}); From 563938343037b69e54abb820e50cba30cb5da5bd Mon Sep 17 00:00:00 2001 From: "Chari Nehal Dattaram (RBEI/EBB1)" Date: Tue, 22 Dec 2020 20:05:52 +0530 Subject: [PATCH 12/15] iox-#240 added moduletests for poshruntime Signed-off-by: Chari Nehal Dattaram (RBEI/EBB1) --- .../test/moduletests/test_posh_runtime.cpp | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/iceoryx_posh/test/moduletests/test_posh_runtime.cpp b/iceoryx_posh/test/moduletests/test_posh_runtime.cpp index 39f98f6cbb..a8e7030b30 100644 --- a/iceoryx_posh/test/moduletests/test_posh_runtime.cpp +++ b/iceoryx_posh/test/moduletests/test_posh_runtime.cpp @@ -441,3 +441,37 @@ TEST_F(PoshRuntime_test, SetEmptyRuntimeFactoryFails) EXPECT_DEATH({ PoshRuntimeTestAccess::setRuntimeFactory(PoshRuntimeTestAccess::factory_t()); }, "Cannot set runtime factory. Passed factory must not be empty!"); } + +TEST_F(PoshRuntime_test, OfferDefaultServiceDescriptionIsInvalid) +{ + auto isServiceOffered = m_runtime->offerService(iox::capro::ServiceDescription()); + + EXPECT_FALSE(isServiceOffered); +} + +TEST_F(PoshRuntime_test, OfferANYServiceStringIsInvalid) +{ + auto isServiceOffered = m_runtime->offerService(iox::capro::ServiceDescription( + iox::capro::AnyServiceString, iox::capro::AnyInstanceString, iox::capro::AnyEventString)); + + EXPECT_FALSE(isServiceOffered); +} + +TEST_F(PoshRuntime_test, OfferANYServiceIdIsInvalid) +{ + auto isServiceOffered = m_runtime->offerService( + iox::capro::ServiceDescription(iox::capro::AnyService, iox::capro::AnyInstance, iox::capro::AnyEvent)); + + EXPECT_FALSE(isServiceOffered); +} + +TEST_F(PoshRuntime_test, FindServiceReturnsNoInstanceForDefaultDescription) +{ + PoshRuntime* m_receiverRuntime{&iox::runtime::PoshRuntime::initRuntime("subscriber")}; + + m_runtime->offerService(iox::capro::ServiceDescription()); + this->InterOpWait(); + auto instanceContainer = m_receiverRuntime->findService(iox::capro::ServiceDescription()); + + EXPECT_THAT(0u, instanceContainer.value().size()); +} From b831b83ac93d1c6fbc2c3044c8946a6b7789aebb Mon Sep 17 00:00:00 2001 From: "Chari Nehal Dattaram (RBEI/EBB1)" Date: Mon, 4 Jan 2021 13:20:28 +0530 Subject: [PATCH 13/15] iox-#240 enabled test Signed-off-by: Chari Nehal Dattaram (RBEI/EBB1) --- .../service_discovery/test_roudi_findservice.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp index ca2e480e4d..600d32f43f 100644 --- a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp +++ b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp @@ -147,7 +147,7 @@ TEST_F(RoudiFindService_test, FindSameServiceMultipleTimesReturnsSingleInstance) ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString_t("instance1"))); } -TEST_F(RoudiFindService_test, DISABLED_OfferMultiMethodServiceSingleInstance_PERFORMANCETEST42) +TEST_F(RoudiFindService_test, OfferMultiMethodServiceSingleInstance) { senderRuntime->offerService({"service1", "instance1"}); senderRuntime->offerService({"service2", "instance1"}); @@ -176,7 +176,7 @@ TEST_F(RoudiFindService_test, SubscribeAnyInstance) InstanceContainer instanceContainerExp; InitContainer(instanceContainerExp, {"instance1", "instance2", "instance3"}); - auto instanceContainer = receiverRuntime->findService({"service1", "65535"}); + auto instanceContainer = receiverRuntime->findService({"service1", iox::capro::AnyServiceString}); ASSERT_THAT(instanceContainer.value().size(), Eq(3u)); EXPECT_TRUE(instanceContainer.value() == instanceContainerExp); From da090e3cd448ed79c4d1060663f40f1f3035bc0d Mon Sep 17 00:00:00 2001 From: "Chari Nehal Dattaram (RBEI/EBB1)" Date: Tue, 5 Jan 2021 11:10:54 +0530 Subject: [PATCH 14/15] iox-#240 added integration test Signed-off-by: Chari Nehal Dattaram (RBEI/EBB1) --- .../test_roudi_findservice.cpp | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp index 600d32f43f..35a4b07024 100644 --- a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp +++ b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp @@ -167,6 +167,26 @@ TEST_F(RoudiFindService_test, OfferMultiMethodServiceSingleInstance) ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString_t("instance1"))); } +TEST_F(RoudiFindService_test, OfferMultiMethodServiceDifferentInstance) +{ + senderRuntime->offerService({"service1", "instance1_1"}); + senderRuntime->offerService({"service2", "instance2_1"}); + senderRuntime->offerService({"service3", "instance3_1"}); + this->InterOpWait(); + + auto instanceContainer = receiverRuntime->findService({"service1", "instance1_1"}); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString_t("instance1_1"))); + + instanceContainer = receiverRuntime->findService({"service2", "instance2_1"}); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString_t("instance2_1"))); + + instanceContainer = receiverRuntime->findService({"service3", "instance3_1"}); + ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString_t("instance3_1"))); +} + TEST_F(RoudiFindService_test, SubscribeAnyInstance) { senderRuntime->offerService({"service1", "instance1"}); From 5181fecf316a7017bcf13677d1d3471bb7bd16a2 Mon Sep 17 00:00:00 2001 From: "Chari Nehal Dattaram (RBEI/EBB1)" Date: Wed, 6 Jan 2021 10:41:07 +0530 Subject: [PATCH 15/15] iox-#240 added integration test for PoshRuntime Signed-off-by: Chari Nehal Dattaram (RBEI/EBB1) --- .../test_roudi_findservice.cpp | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp index 35a4b07024..250eb8eb4e 100644 --- a/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp +++ b/iceoryx_posh/test/integrationtests/service_discovery/test_roudi_findservice.cpp @@ -167,24 +167,22 @@ TEST_F(RoudiFindService_test, OfferMultiMethodServiceSingleInstance) ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString_t("instance1"))); } -TEST_F(RoudiFindService_test, OfferMultiMethodServiceDifferentInstance) +TEST_F(RoudiFindService_test, OfferMultiMethodServiceWithDistinctSingleInstance) { - senderRuntime->offerService({"service1", "instance1_1"}); - senderRuntime->offerService({"service2", "instance2_1"}); - senderRuntime->offerService({"service3", "instance3_1"}); + senderRuntime->offerService({"service1", "instance1"}); + senderRuntime->offerService({"service2", "instance2"}); this->InterOpWait(); - auto instanceContainer = receiverRuntime->findService({"service1", "instance1_1"}); + auto instanceContainer = receiverRuntime->findService({"service1", "instance1"}); ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString_t("instance1_1"))); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString_t("instance1"))); - instanceContainer = receiverRuntime->findService({"service2", "instance2_1"}); - ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString_t("instance2_1"))); + instanceContainer = receiverRuntime->findService({"service2", "instance1"}); + ASSERT_THAT(instanceContainer.value().size(), Eq(0u)); - instanceContainer = receiverRuntime->findService({"service3", "instance3_1"}); + instanceContainer = receiverRuntime->findService({"service2", "instance2"}); ASSERT_THAT(instanceContainer.value().size(), Eq(1u)); - ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString_t("instance3_1"))); + ASSERT_THAT(*instanceContainer.value().begin(), Eq(IdString_t("instance2"))); } TEST_F(RoudiFindService_test, SubscribeAnyInstance)