Repository: mesos Updated Branches: refs/heads/master bf4ac91bd -> 7c6b7d207
Fixed a flaky test. Callbacks of already invalidated instances could be called in 'ResubscribeResourceProvider' when simulating a resource provider restart. This has been resolved by not only restarting a resource provider's driver, but by also creating a new 'MockResourceProvider' instance. Review: https://reviews.apache.org/r/64546/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/7c6b7d20 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/7c6b7d20 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/7c6b7d20 Branch: refs/heads/master Commit: 7c6b7d2073454af0641274db18c7d2ac92e581ef Parents: bf4ac91 Author: Jan Schlicht <j...@mesosphere.io> Authored: Thu Dec 14 14:40:07 2017 +0100 Committer: Benjamin Bannier <bbann...@apache.org> Committed: Thu Dec 14 14:57:27 2017 +0100 ---------------------------------------------------------------------- src/tests/resource_provider_manager_tests.cpp | 48 +++++++++++++++------- 1 file changed, 33 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/7c6b7d20/src/tests/resource_provider_manager_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/resource_provider_manager_tests.cpp b/src/tests/resource_provider_manager_tests.cpp index 41fc4ea..e069c62 100644 --- a/src/tests/resource_provider_manager_tests.cpp +++ b/src/tests/resource_provider_manager_tests.cpp @@ -1102,8 +1102,8 @@ TEST_P(ResourceProviderManagerHttpApiTest, ResubscribeResourceProvider) v1::Resource disk = v1::createDiskResource( "200", "*", None(), None(), v1::createDiskSourceRaw()); - v1::MockResourceProvider resourceProvider( - resourceProviderInfo, Some(v1::Resources(disk))); + Owned<v1::MockResourceProvider> resourceProvider( + new v1::MockResourceProvider(resourceProviderInfo, v1::Resources(disk))); // Start and register a resource provider. string scheme = "http"; @@ -1124,29 +1124,36 @@ TEST_P(ResourceProviderManagerHttpApiTest, ResubscribeResourceProvider) const ContentType contentType = GetParam(); - resourceProvider.start(endpointDetector, contentType, v1::DEFAULT_CREDENTIAL); + resourceProvider->start( + endpointDetector, + contentType, + v1::DEFAULT_CREDENTIAL); // Wait until the agent's resources have been updated to include the // resource provider resources. At this point the resource provider // will have an ID assigned by the agent. AWAIT_READY(updateSlaveMessage); - mesos::v1::ResourceProviderID resourceProviderId = resourceProvider.info.id(); + ASSERT_TRUE(resourceProvider->info.has_id()); - Future<Event::Subscribed> subscribed1; - EXPECT_CALL(resourceProvider, subscribed(_)) - .WillOnce(FutureArg<0>(&subscribed1)); + resourceProviderInfo = resourceProvider->info; // Resource provider failover by opening a new connection. // The assigned resource provider ID will be used to resubscribe. - resourceProvider.start(endpointDetector, contentType, v1::DEFAULT_CREDENTIAL); + resourceProvider.reset( + new v1::MockResourceProvider(resourceProviderInfo, v1::Resources(disk))); - AWAIT_READY(subscribed1); - EXPECT_EQ(resourceProviderId, subscribed1->provider_id()); + Future<Event::Subscribed> subscribed1; + EXPECT_CALL(*resourceProvider, subscribed(_)) + .WillOnce(FutureArg<0>(&subscribed1)); - Future<Event::Subscribed> subscribed2; - EXPECT_CALL(resourceProvider, subscribed(_)) - .WillOnce(FutureArg<0>(&subscribed2)); + resourceProvider->start( + endpointDetector, + contentType, + v1::DEFAULT_CREDENTIAL); + + AWAIT_READY(subscribed1); + EXPECT_EQ(resourceProviderInfo.id(), subscribed1->provider_id()); Future<Nothing> __recover = FUTURE_DISPATCH(_, &Slave::__recover); @@ -1167,10 +1174,21 @@ TEST_P(ResourceProviderManagerHttpApiTest, ResubscribeResourceProvider) endpointDetector.reset(new ConstantEndpointDetector(url)); - resourceProvider.start(endpointDetector, contentType, v1::DEFAULT_CREDENTIAL); + resourceProvider.reset(new v1::MockResourceProvider( + resourceProviderInfo, + Some(v1::Resources(disk)))); + + Future<Event::Subscribed> subscribed2; + EXPECT_CALL(*resourceProvider, subscribed(_)) + .WillOnce(FutureArg<0>(&subscribed2)); + + resourceProvider->start( + endpointDetector, + contentType, + v1::DEFAULT_CREDENTIAL); AWAIT_READY(subscribed2); - EXPECT_EQ(resourceProviderId, subscribed2->provider_id()); + EXPECT_EQ(resourceProviderInfo.id(), subscribed2->provider_id()); }