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());
 }
 
 

Reply via email to