TEST_F(JoynrMessageFactoryTest, createSubscriptionStop){ QString subscriptionId("TEST-SubscriptionId"); SubscriptionStop subscriptionStop; subscriptionStop.setSubscriptionId(subscriptionId); JoynrMessage joynrMessage = messageFactory.createSubscriptionStop( senderID, receiverID, qos, subscriptionStop ); checkParticipantIDs(joynrMessage); EXPECT_QSTREQ(JoynrMessage::VALUE_MESSAGE_TYPE_SUBSCRIPTION_STOP, joynrMessage.getType()); }
/** * Precondition: A provider is registered and there is at least one subscription for it. * Trigger: A subscription stop message is received * Expected: The PublicationManager stops the publications for this provider */ TEST_F(SubscriptionTest, stopMessage_stopsPublications) { qRegisterMetaType<QtOnChangeWithKeepAliveSubscriptionQos>("QtOnChangeWithKeepAliveSubscriptionQos"); qRegisterMetaType<SubscriptionRequest>("SubscriptionRequest"); // Use a semaphore to count and wait on calls to the mockRequestCaller QSemaphore semaphore(0); EXPECT_CALL(*mockRequestCaller, getLocation(_)) .WillRepeatedly( DoAll( Invoke(mockRequestCaller.data(), &MockTestRequestCaller::invokeOnSuccessFct), ReleaseSemaphore(&semaphore))); dispatcher.addRequestCaller(providerParticipantId, mockRequestCaller); QString attributeName = "Location"; auto subscriptionQos = QSharedPointer<QtSubscriptionQos>(new QtOnChangeWithKeepAliveSubscriptionQos( 1200, // validity_ms 10, // minInterval_ms 100, // maxInterval_ms 1100 // alertInterval_ms )); QString subscriptionId = "SubscriptionID"; SubscriptionRequest subscriptionRequest; subscriptionRequest.setSubscriptionId(subscriptionId); subscriptionRequest.setSubscribeToName(attributeName); subscriptionRequest.setQos(subscriptionQos); JoynrMessage msg = messageFactory.createSubscriptionRequest( QString::fromStdString(proxyParticipantId), QString::fromStdString(providerParticipantId), qos, subscriptionRequest); // first received message with subscription request dispatcher.receive(msg); // wait for two requests from the subscription ASSERT_TRUE(semaphore.tryAcquire(2, 1000)); SubscriptionStop subscriptionStop; subscriptionStop.setSubscriptionId(subscriptionRequest.getSubscriptionId()); // receive a subscription stop message msg = messageFactory.createSubscriptionStop( QString::fromStdString(proxyParticipantId), QString::fromStdString(providerParticipantId), qos, subscriptionStop); dispatcher.receive(msg); // assert that less than 2 requests happen in the next 300 milliseconds ASSERT_FALSE(semaphore.tryAcquire(2, 300)); }
/** * Precondition: A provider is registered and there is at least one subscription for it. * Trigger: A subscription stop message is received * Expected: The PublicationManager stops the publications for this provider */ TEST_F(SubscriptionTest, stopMessage_stopsPublications) { // Use a semaphore to count and wait on calls to the mockRequestCaller Semaphore semaphore(0); EXPECT_CALL(*mockRequestCaller, getLocation(_,_)) .WillRepeatedly( DoAll( Invoke(mockRequestCaller.get(), &MockTestRequestCaller::invokeLocationOnSuccessFct), ReleaseSemaphore(&semaphore))); dispatcher.addRequestCaller(providerParticipantId, mockRequestCaller); std::string attributeName = "Location"; Variant subscriptionQos = Variant::make<OnChangeWithKeepAliveSubscriptionQos>(OnChangeWithKeepAliveSubscriptionQos( 1200, // validity_ms 10, // minInterval_ms 500, // maxInterval_ms 1100 // alertInterval_ms )); std::string subscriptionId = "SubscriptionID"; SubscriptionRequest subscriptionRequest; subscriptionRequest.setSubscriptionId(subscriptionId); subscriptionRequest.setSubscribeToName(attributeName); subscriptionRequest.setQos(subscriptionQos); JoynrMessage msg = messageFactory.createSubscriptionRequest( proxyParticipantId, providerParticipantId, qos, subscriptionRequest); // first received message with subscription request dispatcher.receive(msg); // wait for two requests from the subscription ASSERT_TRUE(semaphore.waitFor(std::chrono::seconds(1))); ASSERT_TRUE(semaphore.waitFor(std::chrono::seconds(1))); SubscriptionStop subscriptionStop; subscriptionStop.setSubscriptionId(subscriptionRequest.getSubscriptionId()); // receive a subscription stop message msg = messageFactory.createSubscriptionStop( proxyParticipantId, providerParticipantId, qos, subscriptionStop); dispatcher.receive(msg); ASSERT_FALSE(semaphore.waitFor(std::chrono::seconds(1))); }