From cfa691dead04acffe08155733689f1932054f425 Mon Sep 17 00:00:00 2001 From: Stefan Laner Date: Wed, 9 Apr 2014 15:53:09 +0200 Subject: improved DBusBroadcastTest and DBusLoadTest Change-Id: I413fd262a1c965f8c915180d092408f56f57356e --- .gitignore | 3 +++ src/test/DBusBroadcastTest.cpp | 43 ++++++++++++++++++++++++++++++++++++++++-- src/test/DBusLoadTest.cpp | 10 ++++++---- 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 23ee12a..746b757 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,6 @@ /DBusSelectiveBroadcastTest /DBusManagedTest /DBusPolymorphicTest +/DBusBroadcastTest +/DBusFreedesktopPropertiesTest +/DBusLoadTest diff --git a/src/test/DBusBroadcastTest.cpp b/src/test/DBusBroadcastTest.cpp index 9905155..646e663 100644 --- a/src/test/DBusBroadcastTest.cpp +++ b/src/test/DBusBroadcastTest.cpp @@ -170,7 +170,8 @@ TEST_F(DBusBroadcastTest, ProxysCanHandleBroadcast) { bool callbackArrived = false; broadcastEvent.subscribeCancellableListener([&](uint32_t intParam, std::string stringParam) -> CommonAPI::SubscriptionStatus { - callbackArrived = true; return CommonAPI::SubscriptionStatus::RETAIN; + callbackArrived = true; + return CommonAPI::SubscriptionStatus::RETAIN; }); stub->fireTestPredefinedTypeBroadcastEvent(2, "xyz"); @@ -235,6 +236,43 @@ TEST_F(DBusBroadcastTest, ProxysCanUnsubscribeFromBroadcastAndSubscribeAgain) { broadcastEvent.unsubscribe(broadcastSubscription2); } +TEST_F(DBusBroadcastTest, ProxysCanUnsubscribeFromBroadcastAndSubscribeAgainInALoop) { + auto stub = std::make_shared(); + + bool serviceRegistered = servicePublisher_->registerService(stub, serviceAddress_, stubFactory_); + for (unsigned int i = 0; !serviceRegistered && i < 100; ++i) { + serviceRegistered = servicePublisher_->registerService(stub, serviceAddress_, stubFactory_); + usleep(10000); + } + ASSERT_TRUE(serviceRegistered); + + + auto proxy = proxyFactory_->buildProxy(serviceAddress_); + + commonapi::tests::TestInterfaceProxyDefault::TestPredefinedTypeBroadcastEvent& broadcastEvent = + proxy->getTestPredefinedTypeBroadcastEvent(); + + for(unsigned int i=0; i<10; i++) { + bool callbackArrived = false; + + auto broadcastSubscription = broadcastEvent.subscribe([&,i](uint32_t intParam, std::string stringParam) -> CommonAPI::SubscriptionStatus { + EXPECT_EQ(intParam, i); + callbackArrived = true; + return CommonAPI::SubscriptionStatus::RETAIN; + }); + + stub->fireTestPredefinedTypeBroadcastEvent(i, "xyz"); + + for(unsigned int j=0; j<100 && !callbackArrived; j++) { + usleep(10000); + } + + ASSERT_TRUE(callbackArrived); + + broadcastEvent.unsubscribe(broadcastSubscription); + } +} + TEST_F(DBusBroadcastTest, ProxysCanUnsubscribeFromBroadcastAndSubscribeAgainWithOtherProxy) { auto stub = std::make_shared(); @@ -346,7 +384,8 @@ TEST_F(DBusBroadcastTest, ProxysCanCancelSubscriptionAndSubscribeAgainWithOtherP ASSERT_TRUE(callbackArrived); - broadcastEvent.unsubscribe(broadcastSubscription2); + broadcastEvent.unsubscribe(broadcastSubscription); + broadcastEvent2.unsubscribe(broadcastSubscription2); } diff --git a/src/test/DBusLoadTest.cpp b/src/test/DBusLoadTest.cpp index 94090d3..e5e26bc 100644 --- a/src/test/DBusLoadTest.cpp +++ b/src/test/DBusLoadTest.cpp @@ -42,6 +42,7 @@ public: std::string stringInValue, uint32_t& uint32OutValue, std::string& stringOutValue) { + uint32OutValue = uint32InValue; stringOutValue = stringInValue; } @@ -82,10 +83,10 @@ public: EXPECT_EQ(callStatus, CommonAPI::CallStatus::SUCCESS); EXPECT_EQ(out1, in1); EXPECT_EQ(out2, in2); - if (callStatus == CommonAPI::CallStatus::SUCCESS) { - ASSERT_FALSE(callSucceeded_[callId]); - callSucceeded_[callId] = true; - } + mutexCallSucceeded_.lock(); + ASSERT_FALSE(callSucceeded_[callId]); + callSucceeded_[callId] = true; + mutexCallSucceeded_.unlock(); } std::shared_ptr runtime_; @@ -93,6 +94,7 @@ public: std::shared_ptr stubFactory_; std::shared_ptr servicePublisher_; std::vector callSucceeded_; + std::mutex mutexCallSucceeded_; static const std::string serviceAddress_; static const uint32_t numCallsPerProxy_; -- cgit v1.2.1