You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by bb...@apache.org on 2018/03/26 15:08:02 UTC

[1/2] mesos git commit: Enabled agent resource provider capability by default.

Repository: mesos
Updated Branches:
  refs/heads/master 1ed3eae3c -> ebe92c9b3


http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/storage_local_resource_provider_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/storage_local_resource_provider_tests.cpp b/src/tests/storage_local_resource_provider_tests.cpp
index 49aa4ff..98b697d 100644
--- a/src/tests/storage_local_resource_provider_tests.cpp
+++ b/src/tests/storage_local_resource_provider_tests.cpp
@@ -291,16 +291,6 @@ TEST_F(StorageLocalResourceProviderTest, ROOT_NoResource)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
 
   // Since the local resource provider daemon is started after the agent
@@ -389,16 +379,6 @@ TEST_F(StorageLocalResourceProviderTest, ROOT_ZeroSizedDisk)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
 
   // Since the local resource provider daemon is started after the agent
@@ -466,16 +446,6 @@ TEST_F(StorageLocalResourceProviderTest, ROOT_SmallDisk)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
   slaveFlags.disk_profile_adaptor = URI_DISK_PROFILE_ADAPTOR_NAME;
 
@@ -581,16 +551,6 @@ TEST_F(StorageLocalResourceProviderTest, ROOT_NewProfile)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
   slaveFlags.disk_profile_adaptor = URI_DISK_PROFILE_ADAPTOR_NAME;
 
@@ -692,16 +652,6 @@ TEST_F(StorageLocalResourceProviderTest, ROOT_CreateDestroyVolume)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
   slaveFlags.disk_profile_adaptor = URI_DISK_PROFILE_ADAPTOR_NAME;
 
@@ -881,16 +831,6 @@ TEST_F(StorageLocalResourceProviderTest, ROOT_CreateDestroyVolumeRecovery)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
   slaveFlags.disk_profile_adaptor = URI_DISK_PROFILE_ADAPTOR_NAME;
 
@@ -1090,16 +1030,6 @@ TEST_F(StorageLocalResourceProviderTest, ROOT_AgentRegisteredWithNewId)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
   slaveFlags.disk_profile_adaptor = URI_DISK_PROFILE_ADAPTOR_NAME;
 
@@ -1302,16 +1232,6 @@ TEST_F(StorageLocalResourceProviderTest, ROOT_PublishResources)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
   slaveFlags.disk_profile_adaptor = URI_DISK_PROFILE_ADAPTOR_NAME;
 
@@ -1528,16 +1448,6 @@ TEST_F(StorageLocalResourceProviderTest, ROOT_PublishResourcesRecovery)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
   slaveFlags.disk_profile_adaptor = URI_DISK_PROFILE_ADAPTOR_NAME;
 
@@ -1811,16 +1721,6 @@ TEST_F(StorageLocalResourceProviderTest, ROOT_PublishResourcesReboot)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
   slaveFlags.disk_profile_adaptor = URI_DISK_PROFILE_ADAPTOR_NAME;
 
@@ -2135,16 +2035,6 @@ TEST_F(
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
   slaveFlags.disk_profile_adaptor = URI_DISK_PROFILE_ADAPTOR_NAME;
 
@@ -2412,16 +2302,6 @@ TEST_F(StorageLocalResourceProviderTest, ROOT_ConvertPreExistingVolume)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
 
   // Since the local resource provider daemon is started after the agent
@@ -2640,16 +2520,6 @@ TEST_F(StorageLocalResourceProviderTest, ROOT_RetryOperationStatusUpdate)
   // Disable HTTP authentication to simplify resource provider interactions.
   flags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  flags.agent_features = SlaveCapabilities();
-  flags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   flags.resource_provider_config_dir = resourceProviderConfigDir;
   flags.disk_profile_adaptor = URI_DISK_PROFILE_ADAPTOR_NAME;
 
@@ -2804,16 +2674,6 @@ TEST_F(
   // Disable HTTP authentication to simplify resource provider interactions.
   flags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  flags.agent_features = SlaveCapabilities();
-  flags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   flags.resource_provider_config_dir = resourceProviderConfigDir;
   flags.disk_profile_adaptor = URI_DISK_PROFILE_ADAPTOR_NAME;
 
@@ -2980,16 +2840,6 @@ TEST_F(StorageLocalResourceProviderTest, ROOT_Metrics)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
 
   slave::Fetcher fetcher(slaveFlags);
@@ -3087,16 +2937,6 @@ TEST_F(StorageLocalResourceProviderTest, ROOT_ReconcileDroppedOperation)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
 
   Future<SlaveRegisteredMessage> slaveRegisteredMessage =
@@ -3304,16 +3144,6 @@ TEST_F(
   // Disable HTTP authentication to simplify resource provider interactions.
   flags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  flags.agent_features = SlaveCapabilities();
-  flags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   flags.resource_provider_config_dir = resourceProviderConfigDir;
   flags.disk_profile_adaptor = URI_DISK_PROFILE_ADAPTOR_NAME;
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/support/mesos-mini/Dockerfile
----------------------------------------------------------------------
diff --git a/support/mesos-mini/Dockerfile b/support/mesos-mini/Dockerfile
index f9bcdb5..f317359 100644
--- a/support/mesos-mini/Dockerfile
+++ b/support/mesos-mini/Dockerfile
@@ -52,7 +52,6 @@ RUN chmod +x /usr/bin/mesos-init-wrapper && \
 
 COPY mesos/master_environment /etc/default/mesos-master
 COPY mesos/agent_environment /etc/default/mesos-agent
-COPY mesos/agent_features.json /etc/mesos/agent_features.json
 COPY mesos/modules /etc/mesos/modules
 
 # Prepare Marathon environment.

http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/support/mesos-mini/mesos/agent_features.json
----------------------------------------------------------------------
diff --git a/support/mesos-mini/mesos/agent_features.json b/support/mesos-mini/mesos/agent_features.json
deleted file mode 100644
index a66852a..0000000
--- a/support/mesos-mini/mesos/agent_features.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "capabilities": [
-    { "type": "MULTI_ROLE" },
-    { "type": "HIERARCHICAL_ROLE" },
-    { "type": "RESERVATION_REFINEMENT" },
-    { "type": "RESOURCE_PROVIDER"}
-  ]
-}


[2/2] mesos git commit: Enabled agent resource provider capability by default.

Posted by bb...@apache.org.
Enabled agent resource provider capability by default.

This patch add `RESOURCE_PROVIDER` to the list of default-enabled
agent capabilities. In addition we also adjust tests to accommodate
the change in the agent registration protocol this triggers. We rely
on masters ignoring redundant `UpdateSlaveMessage`s.

Review: https://reviews.apache.org/r/66037/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/ebe92c9b
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/ebe92c9b
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/ebe92c9b

Branch: refs/heads/master
Commit: ebe92c9b39933136968e4ba3a52527e52b361d22
Parents: 1ed3eae
Author: Benjamin Bannier <be...@mesosphere.io>
Authored: Mon Mar 26 15:54:02 2018 +0200
Committer: Benjamin Bannier <bb...@apache.org>
Committed: Mon Mar 26 15:54:02 2018 +0200

----------------------------------------------------------------------
 src/slave/constants.cpp                         |  10 +-
 ...agent_resource_provider_config_api_tests.cpp |  60 -----
 src/tests/api_tests.cpp                         |  40 ---
 src/tests/master_tests.cpp                      |  27 +-
 src/tests/oversubscription_tests.cpp            |   9 +-
 src/tests/persistent_volume_endpoints_tests.cpp |  43 +--
 src/tests/persistent_volume_tests.cpp           | 262 +++++++-----------
 src/tests/reservation_endpoints_tests.cpp       |  20 +-
 src/tests/reservation_tests.cpp                 | 270 +++++++++----------
 src/tests/resource_provider_manager_tests.cpp   |  10 -
 src/tests/scheduler_tests.cpp                   |  40 ++-
 src/tests/slave_recovery_tests.cpp              |  22 +-
 src/tests/slave_tests.cpp                       |  48 +---
 .../storage_local_resource_provider_tests.cpp   | 170 ------------
 support/mesos-mini/Dockerfile                   |   1 -
 support/mesos-mini/mesos/agent_features.json    |   8 -
 16 files changed, 300 insertions(+), 740 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/slave/constants.cpp
----------------------------------------------------------------------
diff --git a/src/slave/constants.cpp b/src/slave/constants.cpp
index 9b60bd0..51de71b 100644
--- a/src/slave/constants.cpp
+++ b/src/slave/constants.cpp
@@ -14,12 +14,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <vector>
-
 #include "master/constants.hpp"
 
 #include "slave/constants.hpp"
 
+#include <vector>
+
 using std::vector;
 
 namespace mesos {
@@ -36,10 +36,10 @@ Duration DEFAULT_MASTER_PING_TIMEOUT()
 vector<SlaveInfo::Capability> AGENT_CAPABILITIES()
 {
   SlaveInfo::Capability::Type types[] = {
-    SlaveInfo::Capability::MULTI_ROLE,
     SlaveInfo::Capability::HIERARCHICAL_ROLE,
-    SlaveInfo::Capability::RESERVATION_REFINEMENT
-  };
+    SlaveInfo::Capability::MULTI_ROLE,
+    SlaveInfo::Capability::RESERVATION_REFINEMENT,
+    SlaveInfo::Capability::RESOURCE_PROVIDER};
 
   vector<SlaveInfo::Capability> result;
   foreach (SlaveInfo::Capability::Type type, types) {

http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/agent_resource_provider_config_api_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/agent_resource_provider_config_api_tests.cpp b/src/tests/agent_resource_provider_config_api_tests.cpp
index bd5312b..53b8cb8 100644
--- a/src/tests/agent_resource_provider_config_api_tests.cpp
+++ b/src/tests/agent_resource_provider_config_api_tests.cpp
@@ -298,16 +298,6 @@ TEST_P(AgentResourceProviderConfigApiTest, ROOT_Add)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
 
   Future<SlaveRegisteredMessage> slaveRegisteredMessage =
@@ -395,16 +385,6 @@ TEST_P(AgentResourceProviderConfigApiTest, ROOT_AddConflict)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
 
   // Generate a pre-existing config.
@@ -467,16 +447,6 @@ TEST_P(AgentResourceProviderConfigApiTest, ROOT_Update)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
 
   // Generate a pre-existing config.
@@ -588,16 +558,6 @@ TEST_P(AgentResourceProviderConfigApiTest, UpdateNotFound)
 
   slave::Flags slaveFlags = CreateSlaveFlags();
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
 
   Future<SlaveRegisteredMessage> slaveRegisteredMessage =
@@ -641,16 +601,6 @@ TEST_P(AgentResourceProviderConfigApiTest, ROOT_Remove)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
 
   // Generate a pre-existing config.
@@ -732,16 +682,6 @@ TEST_P(AgentResourceProviderConfigApiTest, RemoveNotFound)
 
   slave::Flags slaveFlags = CreateSlaveFlags();
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
 
   Future<SlaveRegisteredMessage> slaveRegisteredMessage =

http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/api_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/api_tests.cpp b/src/tests/api_tests.cpp
index 7e9233e..dd8e221 100644
--- a/src/tests/api_tests.cpp
+++ b/src/tests/api_tests.cpp
@@ -180,16 +180,6 @@ TEST_P(MasterAPITest, GetAgents)
   slaveFlags.hostname = "host";
   slaveFlags.domain = createDomainInfo("region-xyz", "zone-456");
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   Try<Owned<cluster::Slave>> agent = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(agent);
 
@@ -1037,16 +1027,6 @@ TEST_P(MasterAPITest, GetOperations)
   // authentication.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   Try<Owned<cluster::Slave>> agent = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(agent);
 
@@ -6625,16 +6605,6 @@ TEST_P(AgentAPITest, GetResourceProviders)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   Try<Owned<cluster::Slave>> slave = StartSlave(&detector, slaveFlags);
   ASSERT_SOME(slave);
 
@@ -6724,16 +6694,6 @@ TEST_P(AgentAPITest, GetOperations)
   // authentication.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   Try<Owned<cluster::Slave>> agent = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(agent);
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/master_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_tests.cpp b/src/tests/master_tests.cpp
index 85a509a..be7a3cc 100644
--- a/src/tests/master_tests.cpp
+++ b/src/tests/master_tests.cpp
@@ -5044,10 +5044,11 @@ TEST_F(MasterTest, StateEndpointAgentCapabilities)
   ASSERT_EQ(1u, slaveInfo.values.count("capabilities"));
   JSON::Value slaveCapabilities = slaveInfo.values.at("capabilities");
 
-  // Agents should always have MULTI_ROLE, HIERARCHICAL_ROLE, and
-  // RESERVATION_REFINEMENT capabilities in current implementation.
+  // Agents should have MULTI_ROLE, HIERARCHICAL_ROLE, RESERVATION_REFINEMENT,
+  // and RESOURCE_PROVIDER capabilities in current implementation.
   Try<JSON::Value> expectedCapabilities = JSON::parse(
-      "[\"MULTI_ROLE\",\"HIERARCHICAL_ROLE\",\"RESERVATION_REFINEMENT\"]");
+      "[\"MULTI_ROLE\",\"HIERARCHICAL_ROLE\",\"RESERVATION_REFINEMENT\","
+      "\"RESOURCE_PROVIDER\"]");
 
   ASSERT_SOME(expectedCapabilities);
   EXPECT_TRUE(slaveCapabilities.contains(expectedCapabilities.get()));
@@ -8639,16 +8640,6 @@ TEST_F(MasterTest, UpdateSlaveMessageWithPendingOffers)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   Try<Owned<cluster::Slave>> agent = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(agent);
 
@@ -8770,16 +8761,6 @@ TEST_F(MasterTest, OperationUpdateDuringFailover)
   // authentication.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   Future<UpdateSlaveMessage> updateSlaveMessage =
     FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/oversubscription_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/oversubscription_tests.cpp b/src/tests/oversubscription_tests.cpp
index 5644057..47c51e3 100644
--- a/src/tests/oversubscription_tests.cpp
+++ b/src/tests/oversubscription_tests.cpp
@@ -286,8 +286,9 @@ TEST_F(OversubscriptionTest, ForwardUpdateSlaveMessage)
   Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
-  Future<SlaveRegisteredMessage> slaveRegistered =
-    FUTURE_PROTOBUF(SlaveRegisteredMessage(), _, _);
+  // The agent will send a single `UpdateSlaveMessage` after registration.
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   MockResourceEstimator resourceEstimator;
 
@@ -305,7 +306,7 @@ TEST_F(OversubscriptionTest, ForwardUpdateSlaveMessage)
     StartSlave(detector.get(), &resourceEstimator, flags);
   ASSERT_SOME(slave);
 
-  AWAIT_READY(slaveRegistered);
+  AWAIT_READY(updateSlaveMessage);
 
   Future<UpdateSlaveMessage> update =
     FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
@@ -333,7 +334,7 @@ TEST_F(OversubscriptionTest, ForwardUpdateSlaveMessage)
       1u,
       metrics.values.count("master/messages_update_slave"));
   ASSERT_EQ(
-      1u,
+      2u,
       metrics.values["master/messages_update_slave"]);
 
   ASSERT_EQ(

http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/persistent_volume_endpoints_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/persistent_volume_endpoints_tests.cpp b/src/tests/persistent_volume_endpoints_tests.cpp
index b9dbb96..770c482 100644
--- a/src/tests/persistent_volume_endpoints_tests.cpp
+++ b/src/tests/persistent_volume_endpoints_tests.cpp
@@ -1524,15 +1524,15 @@ TEST_F(PersistentVolumeEndpointsTest, OfferCreateThenEndpointRemove)
 
   EXPECT_EQ(offer.slave_id(), slaveId);
 
-  Future<CheckpointResourcesMessage> checkpointResources =
-    FUTURE_PROTOBUF(CheckpointResourcesMessage(), _, _);
+  Future<UpdateOperationStatusMessage> updateOperationStatusMessage =
+    FUTURE_PROTOBUF(UpdateOperationStatusMessage(), _, _);
 
   // Reserve the resources.
   driver.acceptOffers({offer.id()}, {RESERVE(dynamicallyReserved)});
 
   // Make sure the allocator processes the `RESERVE` operation before summoning
   // an offer.
-  AWAIT_READY(checkpointResources);
+  AWAIT_READY(updateOperationStatusMessage);
 
   // Summon an offer.
   EXPECT_CALL(sched, resourceOffers(&driver, _))
@@ -1559,13 +1559,14 @@ TEST_F(PersistentVolumeEndpointsTest, OfferCreateThenEndpointRemove)
       None(),
       frameworkInfo.principal());
 
-  checkpointResources = FUTURE_PROTOBUF(CheckpointResourcesMessage(), _, _);
+  updateOperationStatusMessage =
+    FUTURE_PROTOBUF(UpdateOperationStatusMessage(), _, _);
 
   // Create the volume.
   driver.acceptOffers({offer.id()}, {CREATE(volume)});
 
   // Make sure the master processes the accept call before summoning an offer.
-  AWAIT_READY(checkpointResources);
+  AWAIT_READY(updateOperationStatusMessage);
 
   // Summon an offer.
   EXPECT_CALL(sched, resourceOffers(&driver, _))
@@ -1726,13 +1727,13 @@ TEST_F(PersistentVolumeEndpointsTest, EndpointCreateThenOfferRemove)
   EXPECT_TRUE(Resources(offer.resources()).contains(
       allocatedResources(volume, frameworkInfo.roles(0))));
 
-  Future<CheckpointResourcesMessage> checkpointResources =
-    FUTURE_PROTOBUF(CheckpointResourcesMessage(), _, _);
+  Future<UpdateOperationStatusMessage> updateOperationStatusMessage =
+    FUTURE_PROTOBUF(UpdateOperationStatusMessage(), _, _);
 
   driver.acceptOffers({offer.id()}, {DESTROY(volume)});
 
   // Make sure the master processes the accept call before summoning an offer.
-  AWAIT_READY(checkpointResources);
+  AWAIT_READY(updateOperationStatusMessage);
 
   // Summon an offer.
   EXPECT_CALL(sched, resourceOffers(&driver, _))
@@ -1752,13 +1753,14 @@ TEST_F(PersistentVolumeEndpointsTest, EndpointCreateThenOfferRemove)
     << Resources(offer.resources()) << " vs "
     << allocatedResources(dynamicallyReserved, frameworkInfo.roles(0));
 
-  checkpointResources = FUTURE_PROTOBUF(CheckpointResourcesMessage(), _, _);
+  updateOperationStatusMessage =
+    FUTURE_PROTOBUF(UpdateOperationStatusMessage(), _, _);
 
   // Unreserve the resources.
   driver.acceptOffers({offer.id()}, {UNRESERVE(dynamicallyReserved)});
 
   // Make sure the master processes the accept call before summoning an offer.
-  AWAIT_READY(checkpointResources);
+  AWAIT_READY(updateOperationStatusMessage);
 
   // Summon an offer.
   EXPECT_CALL(sched, resourceOffers(&driver, _))
@@ -1854,10 +1856,11 @@ TEST_F(PersistentVolumeEndpointsTest, ReserveAndSlaveRemoval)
 
   ASSERT_EQ(2u, offers->size());
 
-  Future<CheckpointResourcesMessage> checkpointResources =
-    FUTURE_PROTOBUF(CheckpointResourcesMessage(),
-                    master.get()->pid,
-                    slave2.get()->pid);
+  Future<ApplyOperationMessage> applyOperationMessage =
+    FUTURE_PROTOBUF(ApplyOperationMessage(), _, _);
+
+  Future<UpdateOperationStatusMessage> updateOperationStatusMessage =
+    FUTURE_PROTOBUF(UpdateOperationStatusMessage(), _, _);
 
   // Use the offers API to reserve all CPUs on `slave2`.
   Resources slave2Unreserved = Resources::parse("cpus:3").get();
@@ -1878,9 +1881,15 @@ TEST_F(PersistentVolumeEndpointsTest, ReserveAndSlaveRemoval)
     }
   }
 
-  AWAIT_READY(checkpointResources);
-  EXPECT_EQ(Resources(checkpointResources->resources()),
-            slave2Reserved);
+  Resources sentResources =
+    applyOperationMessage->operation_info().reserve().resources();
+
+  sentResources.unallocate();
+
+  AWAIT_READY(applyOperationMessage);
+  EXPECT_EQ(sentResources, slave2Reserved);
+
+  AWAIT_READY(updateOperationStatusMessage);
 
   // Shutdown `slave2` with an explicit shutdown message.
   EXPECT_CALL(sched, offerRescinded(_, _));

http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/persistent_volume_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/persistent_volume_tests.cpp b/src/tests/persistent_volume_tests.cpp
index 924d845..4edf781 100644
--- a/src/tests/persistent_volume_tests.cpp
+++ b/src/tests/persistent_volume_tests.cpp
@@ -91,18 +91,9 @@ enum PersistentVolumeSourceType
 };
 
 
-enum ResourceProviderCapability
-{
-  DISABLED,
-  ENABLED
-};
-
-
 class PersistentVolumeTest
   : public MesosTest,
-    public WithParamInterface<::testing::tuple<
-        PersistentVolumeSourceType,
-        ResourceProviderCapability>>
+    public WithParamInterface<PersistentVolumeSourceType>
 {
 protected:
   virtual void SetUp()
@@ -114,7 +105,7 @@ protected:
 
     diskPath = path.get();
 
-    if (::testing::get<0>(GetParam()) == MOUNT) {
+    if (GetParam() == MOUNT) {
       // On linux we mount a `tmpfs`.
 #ifdef __linux__
       for (size_t i = 1; i <= NUM_DISKS; ++i) {
@@ -135,7 +126,7 @@ protected:
   virtual void TearDown()
   {
 #ifdef __linux__
-    if (::testing::get<0>(GetParam()) == MOUNT) {
+    if (GetParam() == MOUNT) {
       for (size_t i = 1; i <= NUM_DISKS; ++i) {
         ASSERT_SOME(
             fs::unmountAll(path::join(diskPath, "disk" + stringify(i))));
@@ -168,83 +159,42 @@ protected:
     return flags;
   }
 
-  virtual slave::Flags CreateSlaveFlags()
-  {
-    slave::Flags slaveFlags = MesosTest::CreateSlaveFlags();
-    if (::testing::get<1>(GetParam()) == ENABLED) {
-      // Set the resource provider capability.
-      vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-      SlaveInfo::Capability capability;
-      capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-      capabilities.push_back(capability);
-
-      slaveFlags.agent_features = SlaveCapabilities();
-      slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-          {capabilities.begin(), capabilities.end()});
-    }
-
-    return slaveFlags;
-  }
-
   // Depending on the agent capability, the master will send different
   // messages to the agent when a persistent volume is applied.
   template<typename To>
   Future<Resources> getOperationMessage(To to)
   {
-    if (::testing::get<1>(GetParam()) == ENABLED) {
-      return FUTURE_PROTOBUF(ApplyOperationMessage(), _, to)
-        .then([](const ApplyOperationMessage& message) {
-          switch (message.operation_info().type()) {
-            case Offer::Operation::UNKNOWN:
-            case Offer::Operation::LAUNCH:
-            case Offer::Operation::LAUNCH_GROUP:
-            case Offer::Operation::RESERVE:
-            case Offer::Operation::UNRESERVE:
-            case Offer::Operation::CREATE_VOLUME:
-            case Offer::Operation::DESTROY_VOLUME:
-            case Offer::Operation::CREATE_BLOCK:
-            case Offer::Operation::DESTROY_BLOCK:
-              UNREACHABLE();
-            case Offer::Operation::CREATE: {
-              Resources resources = message.operation_info().create().volumes();
-              resources.unallocate();
-
-              return resources;
-            }
-            case Offer::Operation::DESTROY: {
-              Resources resources =
-                message.operation_info().destroy().volumes();
-              resources.unallocate();
-
-              return resources;
-            }
+    return FUTURE_PROTOBUF(ApplyOperationMessage(), _, to)
+      .then([](const ApplyOperationMessage& message) {
+        switch (message.operation_info().type()) {
+          case Offer::Operation::UNKNOWN:
+          case Offer::Operation::LAUNCH:
+          case Offer::Operation::LAUNCH_GROUP:
+          case Offer::Operation::RESERVE:
+          case Offer::Operation::UNRESERVE:
+          case Offer::Operation::CREATE_VOLUME:
+          case Offer::Operation::DESTROY_VOLUME:
+          case Offer::Operation::CREATE_BLOCK:
+          case Offer::Operation::DESTROY_BLOCK:
+            UNREACHABLE();
+          case Offer::Operation::CREATE: {
+            Resources resources = message.operation_info().create().volumes();
+            resources.unallocate();
+
+            return resources;
           }
+          case Offer::Operation::DESTROY: {
+            Resources resources = message.operation_info().destroy().volumes();
+            resources.unallocate();
 
-          UNREACHABLE();
-        });
-    }
+            return resources;
+          }
+        }
 
-    return FUTURE_PROTOBUF(CheckpointResourcesMessage(), _, to)
-      .then([](const CheckpointResourcesMessage& message) {
-        return Resources(message.resources());
+        UNREACHABLE();
       });
   }
 
-  // Agents with enabled 'RESOURCE_PROVIDER' capability will send a
-  // 'UpdateSlaveMessage' after (re-)registration. Offers will be
-  // rescinded if they were created prior to this message. Hence, we
-  // have to wait for this message before accepting offers.
-  Future<Nothing> getSlaveReady()
-  {
-    if (::testing::get<1>(GetParam()) == ENABLED) {
-      return FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _).then([] {
-        return Nothing();
-      });
-    }
-
-    return Nothing();
-  }
-
   // Creates a disk with / without a `source` based on the
   // parameterization of the test. `id` influences the `root` if one
   // is specified so that we can create multiple disks in the tests.
@@ -254,7 +204,7 @@ protected:
     CHECK_GE(NUM_DISKS, id);
     Resource diskResource;
 
-    switch (::testing::get<0>(GetParam())) {
+    switch (GetParam()) {
       case NONE: {
         diskResource = createDiskResource(
             stringify((double) mb.bytes() / Bytes::MEGABYTES),
@@ -311,12 +261,8 @@ protected:
 INSTANTIATE_TEST_CASE_P(
     DiskResource,
     PersistentVolumeTest,
-    ::testing::Combine(
-        ::testing::Values(
-            PersistentVolumeSourceType::NONE, PersistentVolumeSourceType::PATH),
-        ::testing::Values(
-            ResourceProviderCapability::DISABLED,
-            ResourceProviderCapability::ENABLED)));
+    ::testing::Values(
+        PersistentVolumeSourceType::NONE, PersistentVolumeSourceType::PATH));
 
 
 // We also want to parameterize them for `MOUNT`. On linux this means
@@ -327,22 +273,14 @@ INSTANTIATE_TEST_CASE_P(
 INSTANTIATE_TEST_CASE_P(
     ROOT_MountDiskResource,
     PersistentVolumeTest,
-    ::testing::Combine(
-        ::testing::Values(PersistentVolumeSourceType::MOUNT),
-        ::testing::Values(
-            ResourceProviderCapability::DISABLED,
-            ResourceProviderCapability::ENABLED)));
+    ::testing::Values(PersistentVolumeSourceType::MOUNT));
 #else // __linux__
 // Otherwise we can run it without root privileges as we just require
 // a directory.
 INSTANTIATE_TEST_CASE_P(
     MountDiskResource,
     PersistentVolumeTest,
-    ::testing::Combine(
-        ::testing::Values(PersistentVolumeSourceType::MOUNT),
-        ::testing::Values(
-            ResourceProviderCapability::DISABLED,
-            ResourceProviderCapability::ENABLED)));
+    ::testing::Values(PersistentVolumeSourceType::MOUNT));
 #endif // __linux__
 
 
@@ -363,13 +301,14 @@ TEST_P(PersistentVolumeTest, CreateAndDestroyPersistentVolumes)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = getSlaveResources();
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(slave);
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
@@ -420,7 +359,7 @@ TEST_P(PersistentVolumeTest, CreateAndDestroyPersistentVolumes)
   // exist (it is created by the test `SetUp()` function). For
   // non-MOUNT disks, the directory is created when the persistent
   // volume is created.
-  if (::testing::get<0>(GetParam()) == MOUNT) {
+  if (GetParam() == MOUNT) {
     EXPECT_TRUE(os::exists(volume1Path));
     EXPECT_TRUE(os::exists(volume2Path));
   } else {
@@ -479,12 +418,7 @@ TEST_P(PersistentVolumeTest, CreateAndDestroyPersistentVolumes)
       filters);
 
   AWAIT_READY(message3);
-  if (::testing::get<1>(GetParam()) == ENABLED) {
-    EXPECT_TRUE(message3->contains(volume1));
-  } else {
-    EXPECT_TRUE(message3->contains(volume2));
-    EXPECT_FALSE(message3->contains(volume1));
-  }
+  EXPECT_TRUE(message3->contains(volume1));
 
   // Ensure that the messages reach the slave.
   Clock::settle();
@@ -493,7 +427,7 @@ TEST_P(PersistentVolumeTest, CreateAndDestroyPersistentVolumes)
   // delete all of the files and subdirectories underneath it). For
   // non-MOUNT disks, the volume directory should be removed when the
   // volume is destroyed.
-  if (::testing::get<0>(GetParam()) == MOUNT) {
+  if (GetParam() == MOUNT) {
     EXPECT_TRUE(os::exists(volume1Path));
 
     Try<list<string>> files = ::fs::list(path::join(volume1Path, "*"));
@@ -523,13 +457,14 @@ TEST_P(PersistentVolumeTest, ResourcesCheckpointing)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = getSlaveResources();
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(slave);
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
   frameworkInfo.set_roles(0, DEFAULT_TEST_ROLE);
@@ -596,13 +531,14 @@ TEST_P(PersistentVolumeTest, PreparePersistentVolume)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = getSlaveResources();
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(slave);
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
   frameworkInfo.set_roles(0, DEFAULT_TEST_ROLE);
@@ -669,12 +605,13 @@ TEST_P(PersistentVolumeTest, MasterFailover)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = getSlaveResources();
 
-  Future<Nothing> slaveReady1 = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage1 =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Try<Owned<cluster::Slave>> slave = StartSlave(&detector, slaveFlags);
   ASSERT_SOME(slave);
 
-  AWAIT_READY(slaveReady1);
+  AWAIT_READY(updateSlaveMessage1);
 
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
   frameworkInfo.set_roles(0, DEFAULT_TEST_ROLE);
@@ -723,10 +660,8 @@ TEST_P(PersistentVolumeTest, MasterFailover)
 
   EXPECT_CALL(sched, registered(&driver, _, _));
 
-  Future<SlaveReregisteredMessage> slaveReregistered =
-    FUTURE_PROTOBUF(SlaveReregisteredMessage(), _, _);
-
-  Future<Nothing> slaveReady2 = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage2 =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Future<vector<Offer>> offers2;
   EXPECT_CALL(sched, resourceOffers(&driver, _))
@@ -746,8 +681,7 @@ TEST_P(PersistentVolumeTest, MasterFailover)
   Clock::settle();
   Clock::resume();
 
-  AWAIT_READY(slaveReregistered);
-  AWAIT_READY(slaveReady2);
+  AWAIT_READY(updateSlaveMessage2);
 
   AWAIT_READY(offers2);
   ASSERT_FALSE(offers2->empty());
@@ -773,7 +707,8 @@ TEST_P(PersistentVolumeTest, IncompatibleCheckpointedResources)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = getSlaveResources();
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   MockExecutor exec(DEFAULT_EXECUTOR_ID);
   TestContainerizer containerizer(&exec);
@@ -790,7 +725,7 @@ TEST_P(PersistentVolumeTest, IncompatibleCheckpointedResources)
 
   slave1.get()->start();
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
   frameworkInfo.set_roles(0, DEFAULT_TEST_ROLE);
@@ -879,7 +814,8 @@ TEST_P(PersistentVolumeTest, AccessPersistentVolume)
 
   slaveFlags.resources = getSlaveResources();
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -887,7 +823,7 @@ TEST_P(PersistentVolumeTest, AccessPersistentVolume)
 
   Clock::advance(slaveFlags.registration_backoff_factor);
   Clock::settle();
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
   frameworkInfo.set_roles(0, DEFAULT_TEST_ROLE);
@@ -1016,11 +952,7 @@ TEST_P(PersistentVolumeTest, AccessPersistentVolume)
   driver.acceptOffers({offer.id()}, {DESTROY(volume)});
 
   AWAIT_READY(message);
-  if (::testing::get<1>(GetParam()) == ENABLED) {
-    EXPECT_TRUE(message->contains(volume));
-  } else {
-    EXPECT_FALSE(message->contains(volume));
-  }
+  EXPECT_TRUE(message->contains(volume));
 
   // Ensure that operation message reaches the slave.
   Clock::settle();
@@ -1031,7 +963,7 @@ TEST_P(PersistentVolumeTest, AccessPersistentVolume)
   // delete all of the files and subdirectories underneath it). For
   // non-MOUNT disks, the volume directory should be removed when the
   // volume is destroyed.
-  if (::testing::get<0>(GetParam()) == MOUNT) {
+  if (GetParam() == MOUNT) {
     EXPECT_TRUE(os::exists(volumePath));
 
     Try<list<string>> files = ::fs::list(path::join(volumePath, "*"));
@@ -1059,13 +991,14 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeMultipleTasks)
   slaveFlags.resources =
     "cpus:2;mem:1024;disk(" + string(DEFAULT_TEST_ROLE) + "):1024";
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(slave);
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
   frameworkInfo.set_roles(0, DEFAULT_TEST_ROLE);
@@ -1182,7 +1115,8 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeRescindOnDestroy)
 
   slaveFlags.resources = getSlaveResources();
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -1190,7 +1124,7 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeRescindOnDestroy)
 
   Clock::advance(slaveFlags.registration_backoff_factor);
   Clock::settle();
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   // 1. Create framework1 so that all resources are offered to this framework.
   FrameworkInfo frameworkInfo1 = DEFAULT_FRAMEWORK_INFO;
@@ -1362,7 +1296,8 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeMultipleFrameworks)
 
   slaveFlags.resources = getSlaveResources();
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -1370,7 +1305,7 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeMultipleFrameworks)
 
   Clock::advance(slaveFlags.registration_backoff_factor);
   Clock::settle();
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   // 1. Create framework1 so that all resources are offered to this framework.
   FrameworkInfo frameworkInfo1 = DEFAULT_FRAMEWORK_INFO;
@@ -1557,12 +1492,13 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeMasterFailover)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = getSlaveResources();
 
-  Future<Nothing> slaveReady1 = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage1 =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Try<Owned<cluster::Slave>> slave = StartSlave(&detector, slaveFlags);
   ASSERT_SOME(slave);
 
-  AWAIT_READY(slaveReady1);
+  AWAIT_READY(updateSlaveMessage1);
 
   // Create the framework with SHARED_RESOURCES capability.
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
@@ -1648,10 +1584,8 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeMasterFailover)
 
   EXPECT_CALL(sched, registered(&driver, _, _));
 
-  Future<SlaveReregisteredMessage> slaveReregistered =
-    FUTURE_PROTOBUF(SlaveReregisteredMessage(), _, _);
-
-  Future<Nothing> slaveReady2 = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage2 =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Future<vector<Offer>> offers2;
   EXPECT_CALL(sched, resourceOffers(&driver, _))
@@ -1665,8 +1599,7 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeMasterFailover)
   // slave will do a re-registration.
   detector.appoint(master.get()->pid);
 
-  AWAIT_READY(slaveReregistered);
-  AWAIT_READY(slaveReady2);
+  AWAIT_READY(updateSlaveMessage2);
 
   AWAIT_READY(offers2);
   ASSERT_FALSE(offers2->empty());
@@ -1715,7 +1648,8 @@ TEST_P(PersistentVolumeTest, DestroyPersistentVolumeMultipleTasks)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = getSlaveResources();
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -1723,7 +1657,7 @@ TEST_P(PersistentVolumeTest, DestroyPersistentVolumeMultipleTasks)
 
   Clock::advance(slaveFlags.registration_backoff_factor);
   Clock::settle();
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   // Create a scheduler/framework.
   MockScheduler sched;
@@ -1935,7 +1869,8 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeMultipleIterations)
 
   slaveFlags.resources = getSlaveResources();
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -1943,7 +1878,7 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeMultipleIterations)
 
   Clock::advance(slaveFlags.registration_backoff_factor);
   Clock::settle();
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   // 1. Create framework so that all resources are offered to this framework.
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
@@ -2080,13 +2015,14 @@ TEST_P(PersistentVolumeTest, SlaveRecovery)
 
   slaveFlags.resources = getSlaveResources();
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(slave);
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
   frameworkInfo.set_roles(0, DEFAULT_TEST_ROLE);
@@ -2250,7 +2186,8 @@ TEST_P(PersistentVolumeTest, GoodACLCreateThenDestroy)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = getSlaveResources();
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -2258,7 +2195,7 @@ TEST_P(PersistentVolumeTest, GoodACLCreateThenDestroy)
 
   Clock::advance(slaveFlags.registration_backoff_factor);
   Clock::settle();
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   // Create a scheduler/framework.
   MockScheduler sched;
@@ -2332,11 +2269,7 @@ TEST_P(PersistentVolumeTest, GoodACLCreateThenDestroy)
       filters);
 
   AWAIT_READY(message2);
-  if (::testing::get<1>(GetParam()) == ENABLED) {
-    EXPECT_TRUE(message2->contains(volume));
-  } else {
-    EXPECT_FALSE(message2->contains(volume));
-  }
+  EXPECT_TRUE(message2->contains(volume));
 
   // Expect an offer that does not contain the persistent volume.
   EXPECT_CALL(sched, resourceOffers(&driver, _))
@@ -2406,7 +2339,8 @@ TEST_P(PersistentVolumeTest, GoodACLNoPrincipal)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = getSlaveResources();
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -2414,7 +2348,7 @@ TEST_P(PersistentVolumeTest, GoodACLNoPrincipal)
 
   Clock::advance(slaveFlags.registration_backoff_factor);
   Clock::settle();
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   // Create a scheduler/framework.
   MockScheduler sched;
@@ -2504,11 +2438,7 @@ TEST_P(PersistentVolumeTest, GoodACLNoPrincipal)
   // Check that the persistent volume was not created.
   EXPECT_FALSE(Resources(offer.resources()).contains(
       allocatedResources(volume, frameworkInfo.roles(0))));
-  if (::testing::get<1>(GetParam()) == ENABLED) {
-    EXPECT_TRUE(message2->contains(volume));
-  } else {
-    EXPECT_FALSE(message2->contains(volume));
-  }
+  EXPECT_TRUE(message2->contains(volume));
 
   driver.stop();
   driver.join();
@@ -2571,7 +2501,8 @@ TEST_P(PersistentVolumeTest, BadACLNoPrincipal)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = getSlaveResources();
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -2579,7 +2510,7 @@ TEST_P(PersistentVolumeTest, BadACLNoPrincipal)
 
   Clock::advance(slaveFlags.registration_backoff_factor);
   Clock::settle();
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   // Create a scheduler/framework.
   MockScheduler sched1;
@@ -2799,7 +2730,8 @@ TEST_P(PersistentVolumeTest, BadACLDropCreateAndDestroy)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = getSlaveResources();
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -2807,7 +2739,7 @@ TEST_P(PersistentVolumeTest, BadACLDropCreateAndDestroy)
 
   Clock::advance(slaveFlags.registration_backoff_factor);
   Clock::settle();
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   // Create a scheduler/framework.
   MockScheduler sched1;

http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/reservation_endpoints_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/reservation_endpoints_tests.cpp b/src/tests/reservation_endpoints_tests.cpp
index 51146ea..61af7ac 100644
--- a/src/tests/reservation_endpoints_tests.cpp
+++ b/src/tests/reservation_endpoints_tests.cpp
@@ -1528,22 +1528,22 @@ TEST_F(ReservationEndpointsTest, AgentStateEndpointResources)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = "cpus:4;mem:2048;disk:4096;cpus(role):2;mem(role):512";
 
-  Future<SlaveRegisteredMessage> slaveRegisteredMessage =
-    FUTURE_PROTOBUF(SlaveRegisteredMessage(), master.get()->pid, _);
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> agent = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(agent);
 
-  AWAIT_READY(slaveRegisteredMessage);
-  const SlaveID& slaveId = slaveRegisteredMessage->slave_id();
+  AWAIT_READY(updateSlaveMessage);
+  const SlaveID& slaveId = updateSlaveMessage->slave_id();
 
   Resources unreserved = Resources::parse("cpus:1;mem:512;disk:1024").get();
   Resources dynamicallyReserved = unreserved.pushReservation(
       createDynamicReservationInfo("role1", DEFAULT_CREDENTIAL.principal()));
 
-  Future<CheckpointResourcesMessage> checkpointResources =
-    FUTURE_PROTOBUF(CheckpointResourcesMessage(), _, _);
+  Future<UpdateOperationStatusMessage> updateOperationStatusMessage =
+    FUTURE_PROTOBUF(UpdateOperationStatusMessage(), _, _);
 
   {
     Future<Response> response = process::http::post(
@@ -1555,10 +1555,10 @@ TEST_F(ReservationEndpointsTest, AgentStateEndpointResources)
     AWAIT_EXPECT_RESPONSE_STATUS_EQ(Accepted().status, response);
   }
 
-  // Now verify the reservations from the agent's /state endpoint. We wait
-  // for the agent to receive and process CheckpointResourcesMessage first
-  // because dynamic reservations are propgated to the agent asynchronously.
-  AWAIT_READY(checkpointResources);
+  // Now verify the reservations from the agent's /state endpoint. We wait for
+  // the agent to receive and process the `ApplyOperationMessage` and respond
+  // with an initial operation status update.
+  AWAIT_READY(updateOperationStatusMessage);
 
   // Make sure CheckpointResourcesMessage handling is completed
   // before proceeding.

http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/reservation_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/reservation_tests.cpp b/src/tests/reservation_tests.cpp
index 8d8e9c8..5570df2 100644
--- a/src/tests/reservation_tests.cpp
+++ b/src/tests/reservation_tests.cpp
@@ -77,124 +77,66 @@ namespace mesos {
 namespace internal {
 namespace tests {
 
-enum ResourceProviderCapability
-{
-  DISABLED,
-  ENABLED
-};
-
-
-class ReservationTest
-  : public MesosTest,
-    public ::testing::WithParamInterface<ResourceProviderCapability>
+class ReservationTest : public MesosTest
 {
 public:
-  slave::Flags CreateSlaveFlags() override
-  {
-    slave::Flags slaveFlags = MesosTest::CreateSlaveFlags();
-    if (GetParam() == ENABLED) {
-      // Set the resource provider capability.
-      vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-      SlaveInfo::Capability capability;
-      capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-      capabilities.push_back(capability);
-
-      slaveFlags.agent_features = SlaveCapabilities();
-      slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-          {capabilities.begin(), capabilities.end()});
-    }
-
-    return slaveFlags;
-  }
-
   // Depending on the agent capability, the master will send different
   // messages to the agent when a reservation is applied.
   template <typename To>
   Future<Resources> getOperationMessage(To to)
   {
-    if (GetParam() == ENABLED) {
-      return FUTURE_PROTOBUF(ApplyOperationMessage(), _, to)
-        .then([](const ApplyOperationMessage& message) {
-          switch (message.operation_info().type()) {
-            case Offer::Operation::UNKNOWN:
-            case Offer::Operation::LAUNCH:
-            case Offer::Operation::LAUNCH_GROUP:
-            case Offer::Operation::CREATE_VOLUME:
-            case Offer::Operation::DESTROY_VOLUME:
-            case Offer::Operation::CREATE_BLOCK:
-            case Offer::Operation::DESTROY_BLOCK:
-              UNREACHABLE();
-            case Offer::Operation::RESERVE: {
-              Resources resources =
-                message.operation_info().reserve().resources();
-              resources.unallocate();
-
-              return resources;
-            }
-            case Offer::Operation::UNRESERVE: {
-              Resources resources =
-                message.operation_info().unreserve().resources();
-              resources.unallocate();
-
-              return resources;
-            }
-            case Offer::Operation::CREATE: {
-              Resources resources = message.operation_info().create().volumes();
-              resources.unallocate();
-
-              return resources;
-            }
-            case Offer::Operation::DESTROY: {
-              Resources resources =
-                message.operation_info().destroy().volumes();
-              resources.unallocate();
-
-              return resources;
-            }
+    return FUTURE_PROTOBUF(ApplyOperationMessage(), _, to)
+      .then([](const ApplyOperationMessage& message) {
+        switch (message.operation_info().type()) {
+          case Offer::Operation::UNKNOWN:
+          case Offer::Operation::LAUNCH:
+          case Offer::Operation::LAUNCH_GROUP:
+          case Offer::Operation::CREATE_VOLUME:
+          case Offer::Operation::DESTROY_VOLUME:
+          case Offer::Operation::CREATE_BLOCK:
+          case Offer::Operation::DESTROY_BLOCK:
+            UNREACHABLE();
+          case Offer::Operation::RESERVE: {
+            Resources resources =
+              message.operation_info().reserve().resources();
+            resources.unallocate();
+
+            return resources;
           }
+          case Offer::Operation::UNRESERVE: {
+            Resources resources =
+              message.operation_info().unreserve().resources();
+            resources.unallocate();
 
-          UNREACHABLE();
-        });
-    }
+            return resources;
+          }
+          case Offer::Operation::CREATE: {
+            Resources resources = message.operation_info().create().volumes();
+            resources.unallocate();
 
-    return FUTURE_PROTOBUF(CheckpointResourcesMessage(), _, to)
-      .then([](const CheckpointResourcesMessage& message) {
-        return Resources(message.resources());
-      });
-  }
+            return resources;
+          }
+          case Offer::Operation::DESTROY: {
+            Resources resources = message.operation_info().destroy().volumes();
+            resources.unallocate();
 
-  // Agents with enabled 'RESOURCE_PROVIDER' capability will send a
-  // 'UpdateSlaveMessage' after (re-)registration. Offers will be
-  // rescinded if they were created prior to this message. Hence, we
-  // have to wait for this message before accepting offers.
-  Future<Nothing> getSlaveReady()
-  {
-    if (GetParam() == ENABLED) {
-      return FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _).then([] {
-        return Nothing();
-      });
-    }
+            return resources;
+          }
+        }
 
-    return Nothing();
+        UNREACHABLE();
+      });
   }
 };
 
 
-INSTANTIATE_TEST_CASE_P(
-    ResourceProviderCapability,
-    ReservationTest,
-    ::testing::Values(
-        ResourceProviderCapability::DISABLED,
-        ResourceProviderCapability::ENABLED));
-
-
 // This tests that a framework can send back a Reserve operation
 // as a response to an offer, which updates the resources in the
 // allocator and results in the reserved resources being reoffered to
 // the framework. The framework then sends back an Unreserved offer
 // operation to unreserve the reserved resources. Finally, We test
 // that the framework receives the unreserved resources.
-TEST_P(ReservationTest, ReserveThenUnreserve)
+TEST_F(ReservationTest, ReserveThenUnreserve)
 {
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
   frameworkInfo.set_roles(0, "role");
@@ -209,13 +151,14 @@ TEST_P(ReservationTest, ReserveThenUnreserve)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = "cpus:1;mem:512";
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(slave);
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
@@ -295,7 +238,7 @@ TEST_P(ReservationTest, ReserveThenUnreserve)
 // the framework. The framework then sends back a new resource reservation
 // request which involves a floating point value for the resources being
 // reserved, which in turn triggers a problematic floating point comparison.
-TEST_P(ReservationTest, ReserveTwiceWithDoubleValue)
+TEST_F(ReservationTest, ReserveTwiceWithDoubleValue)
 {
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
   frameworkInfo.set_roles(0, "role");
@@ -309,13 +252,14 @@ TEST_P(ReservationTest, ReserveTwiceWithDoubleValue)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = "cpus:24;mem:4096";
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(slave);
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
@@ -401,7 +345,7 @@ TEST_P(ReservationTest, ReserveTwiceWithDoubleValue)
 // sends back an Unreserved operation to unreserve the reserved
 // resources. We test that the framework receives the unreserved
 // resources.
-TEST_P(ReservationTest, ReserveAndLaunchThenUnreserve)
+TEST_F(ReservationTest, ReserveAndLaunchThenUnreserve)
 {
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
   frameworkInfo.set_roles(0, "role");
@@ -419,7 +363,8 @@ TEST_P(ReservationTest, ReserveAndLaunchThenUnreserve)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = "cpus:1;mem:512";
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
 
@@ -427,7 +372,7 @@ TEST_P(ReservationTest, ReserveAndLaunchThenUnreserve)
     StartSlave(detector.get(), &containerizer, slaveFlags);
   ASSERT_SOME(slave);
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
@@ -524,7 +469,7 @@ TEST_P(ReservationTest, ReserveAndLaunchThenUnreserve)
 // the next resource offer, framework1 declines the offer. This
 // should lead to framework2 receiving the resources that framework1
 // reserved.
-TEST_P(ReservationTest, ReserveShareWithinRole)
+TEST_F(ReservationTest, ReserveShareWithinRole)
 {
   string role = "role";
 
@@ -546,13 +491,14 @@ TEST_P(ReservationTest, ReserveShareWithinRole)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = "cpus:1;mem:512";
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(slave);
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   MockScheduler sched1;
   MesosSchedulerDriver driver1(
@@ -644,7 +590,7 @@ TEST_P(ReservationTest, ReserveShareWithinRole)
 // This tests that a Reserve operation where the specified resources
 // does not exist in the given offer (too large, in this case) is
 // dropped.
-TEST_P(ReservationTest, DropReserveTooLarge)
+TEST_F(ReservationTest, DropReserveTooLarge)
 {
   TestAllocator<> allocator;
 
@@ -665,13 +611,14 @@ TEST_P(ReservationTest, DropReserveTooLarge)
 
   EXPECT_CALL(allocator, addSlave(_, _, _, _, _, _));
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(slave);
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
@@ -742,7 +689,7 @@ TEST_P(ReservationTest, DropReserveTooLarge)
 // This test verifies that the slave checkpoints the resources for
 // dynamic reservations to the disk, recovers them upon restart, and
 // sends them to the master during re-registration.
-TEST_P(ReservationTest, ResourcesCheckpointing)
+TEST_F(ReservationTest, ResourcesCheckpointing)
 {
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
   frameworkInfo.set_roles(0, "role");
@@ -758,13 +705,14 @@ TEST_P(ReservationTest, ResourcesCheckpointing)
   slaveFlags.recover = "reconnect";
   slaveFlags.resources = "cpus:8;mem:4096";
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(slave);
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
@@ -839,7 +787,7 @@ TEST_P(ReservationTest, ResourcesCheckpointing)
 // This test verifies the case where a slave that has checkpointed
 // dynamic reservations reregisters with a failed over master, and the
 // dynamic reservations are later correctly offered to the framework.
-TEST_P(ReservationTest, MasterFailover)
+TEST_F(ReservationTest, MasterFailover)
 {
   // Pause the cock and control it manually in order to
   // control the timing of the offer cycle.
@@ -858,7 +806,8 @@ TEST_P(ReservationTest, MasterFailover)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = "cpus:8;mem:2048";
 
-  Future<Nothing> slaveReady1 = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   StandaloneMasterDetector detector(master1.get()->pid);
 
@@ -867,7 +816,7 @@ TEST_P(ReservationTest, MasterFailover)
 
   Clock::advance(slaveFlags.registration_backoff_factor);
   Clock::settle();
-  AWAIT_READY(slaveReady1);
+  AWAIT_READY(updateSlaveMessage);
 
   MockScheduler sched;
   TestingMesosSchedulerDriver driver(&sched, &detector, frameworkInfo);
@@ -965,7 +914,7 @@ TEST_P(ReservationTest, MasterFailover)
 // This test verifies that a slave can restart as long as the
 // checkpointed resources it recovers are compatible with the slave
 // resources specified using the '--resources' flag.
-TEST_P(ReservationTest, CompatibleCheckpointedResources)
+TEST_F(ReservationTest, CompatibleCheckpointedResources)
 {
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
   frameworkInfo.set_roles(0, "role");
@@ -980,7 +929,8 @@ TEST_P(ReservationTest, CompatibleCheckpointedResources)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = "cpus:8;mem:4096";
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   MockExecutor exec(DEFAULT_EXECUTOR_ID);
   TestContainerizer containerizer(&exec);
@@ -998,7 +948,7 @@ TEST_P(ReservationTest, CompatibleCheckpointedResources)
 
   slave1.get()->start();
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
@@ -1088,7 +1038,7 @@ TEST_P(ReservationTest, CompatibleCheckpointedResources)
 // checkpointed resources (including persistent volumes) it recovers
 // are compatible with the slave resources specified using the
 // '--resources' flag.
-TEST_P(ReservationTest, CompatibleCheckpointedResourcesWithPersistentVolumes)
+TEST_F(ReservationTest, CompatibleCheckpointedResourcesWithPersistentVolumes)
 {
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
   frameworkInfo.set_roles(0, "role");
@@ -1103,7 +1053,8 @@ TEST_P(ReservationTest, CompatibleCheckpointedResourcesWithPersistentVolumes)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = "cpus:8;mem:4096;disk:2048";
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   MockExecutor exec(DEFAULT_EXECUTOR_ID);
   TestContainerizer containerizer(&exec);
@@ -1121,7 +1072,7 @@ TEST_P(ReservationTest, CompatibleCheckpointedResourcesWithPersistentVolumes)
 
   slave1.get()->start();
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
@@ -1251,7 +1202,7 @@ TEST_P(ReservationTest, CompatibleCheckpointedResourcesWithPersistentVolumes)
 // This test verifies that a slave will refuse to start if the
 // checkpointed resources it recovers are not compatible with the
 // slave resources specified using the '--resources' flag.
-TEST_P(ReservationTest, IncompatibleCheckpointedResources)
+TEST_F(ReservationTest, IncompatibleCheckpointedResources)
 {
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
   frameworkInfo.set_roles(0, "role");
@@ -1266,7 +1217,8 @@ TEST_P(ReservationTest, IncompatibleCheckpointedResources)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = "cpus:8;mem:4096";
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   MockExecutor exec(DEFAULT_EXECUTOR_ID);
   TestContainerizer containerizer(&exec);
@@ -1284,7 +1236,7 @@ TEST_P(ReservationTest, IncompatibleCheckpointedResources)
 
   slave1.get()->start();
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
@@ -1371,7 +1323,7 @@ TEST_P(ReservationTest, IncompatibleCheckpointedResources)
 
 // This test verifies that reserve and unreserve operations complete
 // successfully when authorization succeeds.
-TEST_P(ReservationTest, GoodACLReserveThenUnreserve)
+TEST_F(ReservationTest, GoodACLReserveThenUnreserve)
 {
   ACLs acls;
 
@@ -1403,13 +1355,14 @@ TEST_P(ReservationTest, GoodACLReserveThenUnreserve)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = "cpus:1;mem:512";
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(slave);
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   // Create a scheduler.
   MockScheduler sched;
@@ -1485,7 +1438,7 @@ TEST_P(ReservationTest, GoodACLReserveThenUnreserve)
 
 // This test verifies that a reserve operation
 // gets dropped if authorization fails.
-TEST_P(ReservationTest, BadACLDropReserve)
+TEST_F(ReservationTest, BadACLDropReserve)
 {
   ACLs acls;
 
@@ -1510,13 +1463,14 @@ TEST_P(ReservationTest, BadACLDropReserve)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = "cpus:1;mem:512";
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(slave);
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   // Create a scheduler.
   MockScheduler sched;
@@ -1577,7 +1531,7 @@ TEST_P(ReservationTest, BadACLDropReserve)
 
 // This test verifies that an unreserve operation
 // gets dropped if authorization fails.
-TEST_P(ReservationTest, BadACLDropUnreserve)
+TEST_F(ReservationTest, BadACLDropUnreserve)
 {
   ACLs acls;
 
@@ -1607,13 +1561,14 @@ TEST_P(ReservationTest, BadACLDropUnreserve)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = "cpus:2;mem:1024";
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(slave);
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   // Create a scheduler.
   MockScheduler sched;
@@ -1706,7 +1661,7 @@ TEST_P(ReservationTest, BadACLDropUnreserve)
 
 // Tests a couple more complex combinations of `RESERVE`, `UNRESERVE`, and
 // `LAUNCH` operations to verify that they work with authorization.
-TEST_P(ReservationTest, ACLMultipleOperations)
+TEST_F(ReservationTest, ACLMultipleOperations)
 {
   // Pause the clock and control it manually in order to
   // control the timing of the offer cycle.
@@ -1743,7 +1698,8 @@ TEST_P(ReservationTest, ACLMultipleOperations)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = "cpus:2;mem:1024";
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
 
@@ -1753,7 +1709,7 @@ TEST_P(ReservationTest, ACLMultipleOperations)
 
   Clock::advance(slaveFlags.registration_backoff_factor);
   Clock::settle();
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   // Create a scheduler.
   MockScheduler sched;
@@ -1921,7 +1877,7 @@ TEST_P(ReservationTest, ACLMultipleOperations)
 
 // Confirms that reserve and unreserve operations work without authentication
 // when a framework has no principal.
-TEST_P(ReservationTest, WithoutAuthenticationWithoutPrincipal)
+TEST_F(ReservationTest, WithoutAuthenticationWithoutPrincipal)
 {
   // Pause the clock and control it manually in order to
   // control the timing of the offer cycle.
@@ -1942,7 +1898,8 @@ TEST_P(ReservationTest, WithoutAuthenticationWithoutPrincipal)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = "cpus:1;mem:512";
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -1950,7 +1907,7 @@ TEST_P(ReservationTest, WithoutAuthenticationWithoutPrincipal)
 
   Clock::advance(slaveFlags.registration_backoff_factor);
   Clock::settle();
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(&sched, frameworkInfo, master.get()->pid);
@@ -2035,7 +1992,7 @@ TEST_P(ReservationTest, WithoutAuthenticationWithoutPrincipal)
 
 // Confirms that reserve and unreserve operations work without authentication
 // when a framework has a principal.
-TEST_P(ReservationTest, WithoutAuthenticationWithPrincipal)
+TEST_F(ReservationTest, WithoutAuthenticationWithPrincipal)
 {
   // Pause the clock and control it manually in order to
   // control the timing of the offer cycle.
@@ -2055,7 +2012,8 @@ TEST_P(ReservationTest, WithoutAuthenticationWithPrincipal)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = "cpus:1;mem:512";
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -2063,7 +2021,7 @@ TEST_P(ReservationTest, WithoutAuthenticationWithPrincipal)
 
   Clock::advance(slaveFlags.registration_backoff_factor);
   Clock::settle();
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(&sched, frameworkInfo, master.get()->pid);
@@ -2149,7 +2107,7 @@ TEST_P(ReservationTest, WithoutAuthenticationWithPrincipal)
 
 // This tests that a framework can't reserve resources using a role different
 // from the one it registered with.
-TEST_P(ReservationTest, DropReserveWithDifferentRole)
+TEST_F(ReservationTest, DropReserveWithDifferentRole)
 {
   const string frameworkRole = "role";
 
@@ -2168,7 +2126,8 @@ TEST_P(ReservationTest, DropReserveWithDifferentRole)
   slave::Flags agentFlags = CreateSlaveFlags();
   agentFlags.resources = "cpus:1;mem:512";
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   EXPECT_CALL(allocator, addSlave(_, _, _, _, _, _));
 
@@ -2176,7 +2135,7 @@ TEST_P(ReservationTest, DropReserveWithDifferentRole)
   Try<Owned<cluster::Slave>> agent = StartSlave(detector.get(), agentFlags);
   ASSERT_SOME(agent);
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
@@ -2245,7 +2204,7 @@ TEST_P(ReservationTest, DropReserveWithDifferentRole)
 
 // This test ensures that a framework can't unreserve resources
 // reserved by a framework with another role.
-TEST_P(ReservationTest, PreventUnreservingAlienResources)
+TEST_F(ReservationTest, PreventUnreservingAlienResources)
 {
   const string frameworkRole1 = "role1";
   FrameworkInfo frameworkInfo1 = DEFAULT_FRAMEWORK_INFO;
@@ -2269,13 +2228,14 @@ TEST_P(ReservationTest, PreventUnreservingAlienResources)
   slave::Flags agentFlags = CreateSlaveFlags();
   agentFlags.resources = "cpus:1;mem:512";
 
-  Future<Nothing> slaveReady = getSlaveReady();
+  Future<UpdateSlaveMessage> updateSlaveMessage =
+    FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> agent = StartSlave(detector.get(), agentFlags);
   ASSERT_SOME(agent);
 
-  AWAIT_READY(slaveReady);
+  AWAIT_READY(updateSlaveMessage);
 
   MockScheduler sched1;
   MesosSchedulerDriver driver1(
@@ -2434,6 +2394,18 @@ TEST_F(ReservationCheckpointingTest, SendingCheckpointResourcesMessage)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.resources = "cpus:8;mem:4096";
 
+  // The master only sends `CheckpointResourcesMessage` to
+  // agents which are not resource provider-capable.
+  slaveFlags.agent_features = SlaveCapabilities();
+
+  foreach (
+      const SlaveInfo::Capability& slaveCapability,
+      slave::AGENT_CAPABILITIES()) {
+    if (slaveCapability.type() != SlaveInfo::Capability::RESOURCE_PROVIDER) {
+      slaveFlags.agent_features->add_capabilities()->CopyFrom(slaveCapability);
+    }
+  }
+
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(slave);

http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/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 718436e..d947bd0 100644
--- a/src/tests/resource_provider_manager_tests.cpp
+++ b/src/tests/resource_provider_manager_tests.cpp
@@ -111,16 +111,6 @@ public:
 
     slaveFlags.authenticate_http_readwrite = false;
 
-    // Set the resource provider capability.
-    vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-    SlaveInfo::Capability capability;
-    capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-    capabilities.push_back(capability);
-
-    slaveFlags.agent_features = SlaveCapabilities();
-    slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-        {capabilities.begin(), capabilities.end()});
-
     return slaveFlags;
   }
 };

http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/scheduler_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/scheduler_tests.cpp b/src/tests/scheduler_tests.cpp
index 1b9b39f..749420a 100644
--- a/src/tests/scheduler_tests.cpp
+++ b/src/tests/scheduler_tests.cpp
@@ -1019,20 +1019,9 @@ TEST_P(SchedulerTest, OperationFeedbackValidationWithResourceProviderCapability)
   Try<Owned<cluster::Master>> master = StartMaster(masterFlags);
   ASSERT_SOME(master);
 
-  slave::Flags slaveFlags = CreateSlaveFlags();
-
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   Owned<MasterDetector> detector = master.get()->createDetector();
 
-  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
+  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get());
   ASSERT_SOME(slave);
 
   auto scheduler = std::make_shared<v1::MockHTTPScheduler>();
@@ -1127,7 +1116,19 @@ TEST_P(SchedulerTest, OperationFeedbackValidationNoResourceProviderCapability)
 
   Owned<MasterDetector> detector = master.get()->createDetector();
 
-  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get());
+  slave::Flags slaveFlags = CreateSlaveFlags();
+
+  slaveFlags.agent_features = SlaveCapabilities();
+
+  foreach (
+      const SlaveInfo::Capability& slaveCapability,
+      slave::AGENT_CAPABILITIES()) {
+    if (slaveCapability.type() != SlaveInfo::Capability::RESOURCE_PROVIDER) {
+      slaveFlags.agent_features->add_capabilities()->CopyFrom(slaveCapability);
+    }
+  }
+
+  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(slave);
 
   auto scheduler = std::make_shared<v1::MockHTTPScheduler>();
@@ -1202,20 +1203,9 @@ TEST_P(SchedulerTest, OperationFeedbackValidationSchedulerDriverFramework)
   Try<Owned<cluster::Master>> master = StartMaster(masterFlags);
   ASSERT_SOME(master);
 
-  slave::Flags slaveFlags = CreateSlaveFlags();
-
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   Owned<MasterDetector> detector = master.get()->createDetector();
 
-  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
+  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get());
   ASSERT_SOME(slave);
 
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;

http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/slave_recovery_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/slave_recovery_tests.cpp b/src/tests/slave_recovery_tests.cpp
index 4a5860c..afe8b8a 100644
--- a/src/tests/slave_recovery_tests.cpp
+++ b/src/tests/slave_recovery_tests.cpp
@@ -4865,6 +4865,18 @@ TYPED_TEST(SlaveRecoveryTest, CheckpointedResources)
 
   slave::Flags slaveFlags = this->CreateSlaveFlags();
 
+  // The master only sends `CheckpointResourcesMessage` to
+  // agents which are not resource provider-capable.
+  slaveFlags.agent_features = SlaveCapabilities();
+
+  foreach (
+      const SlaveInfo::Capability& slaveCapability,
+      slave::AGENT_CAPABILITIES()) {
+    if (slaveCapability.type() != SlaveInfo::Capability::RESOURCE_PROVIDER) {
+      slaveFlags.agent_features->add_capabilities()->CopyFrom(slaveCapability);
+    }
+  }
+
   StandaloneMasterDetector detector(master.get()->pid);
   Try<Owned<cluster::Slave>> slave = this->StartSlave(&detector, slaveFlags);
   ASSERT_SOME(slave);
@@ -4960,16 +4972,6 @@ TYPED_TEST(SlaveRecoveryTest, CheckpointedResourcesResourceProviderCapable)
 
   slave::Flags slaveFlags = this->CreateSlaveFlags();
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   Future<UpdateSlaveMessage> updateSlaveMessage =
     FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/slave_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/slave_tests.cpp b/src/tests/slave_tests.cpp
index 028cd32..d695622 100644
--- a/src/tests/slave_tests.cpp
+++ b/src/tests/slave_tests.cpp
@@ -1610,10 +1610,12 @@ TEST_F(SlaveTest, StateEndpoint)
   EXPECT_FALSE(state.values["capabilities"].as<JSON::Array>().values.empty());
   JSON::Value slaveCapabilities = state.values.at("capabilities");
 
-  // Agents should always have MULTI_ROLE, HIERARCHICAL_ROLE, and
-  // RESERVATION_REFINEMENT capabilities in current implementation.
+  // Agents should always have MULTI_ROLE, HIERARCHICAL_ROLE,
+  // RESERVATION_REFINEMENT, and RESOURCE_PROVIDER capabilities
+  // in current implementation.
   Try<JSON::Value> expectedCapabilities = JSON::parse(
-      "[\"MULTI_ROLE\",\"HIERARCHICAL_ROLE\",\"RESERVATION_REFINEMENT\"]");
+      "[\"MULTI_ROLE\",\"HIERARCHICAL_ROLE\",\"RESERVATION_REFINEMENT\","
+      "\"RESOURCE_PROVIDER\"]");
 
   ASSERT_SOME(expectedCapabilities);
   EXPECT_TRUE(slaveCapabilities.contains(expectedCapabilities.get()));
@@ -9636,16 +9638,6 @@ TEST_F(SlaveTest, ResourceProviderSubscribe)
   // Disable HTTP authentication to simplify resource provider interactions.
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   StandaloneMasterDetector detector(master.get()->pid);
   Try<Owned<cluster::Slave>> slave = StartSlave(&detector, slaveFlags);
   ASSERT_SOME(slave);
@@ -9753,16 +9745,6 @@ TEST_F_TEMP_DISABLED_ON_WINDOWS(SlaveTest, ResourceProviderPublishAll)
   slave::Flags flags = CreateSlaveFlags();
   flags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  flags.agent_features = SlaveCapabilities();
-  flags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   Future<SlaveRegisteredMessage> slaveRegisteredMessage =
     FUTURE_PROTOBUF(SlaveRegisteredMessage(), _, _);
 
@@ -10047,16 +10029,6 @@ TEST_F(SlaveTest, ResourceProviderReconciliation)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   Future<UpdateSlaveMessage> updateSlaveMessage =
     FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
 
@@ -10264,16 +10236,6 @@ TEST_F(SlaveTest, RunTaskResourceVersions)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.authenticate_http_readwrite = false;
 
-  // Set the resource provider capability.
-  vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
-  SlaveInfo::Capability capability;
-  capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
-  capabilities.push_back(capability);
-
-  slaveFlags.agent_features = SlaveCapabilities();
-  slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
-      {capabilities.begin(), capabilities.end()});
-
   Future<UpdateSlaveMessage> updateSlaveMessage =
     FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);