You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by mp...@apache.org on 2016/03/16 14:17:10 UTC

[15/15] mesos git commit: Update test suite to use the reworked MesosTest helpers.

Update test suite to use the reworked MesosTest helpers.

Includes the following changes:

* Added the `<process/owned.hpp>` header where appropriate.
* Added the namespace `using process::Owned;` where appropriate.
* Generally replaced `Try<PID<Master>>` with
  `Try<Owned<cluster::Master>>`, and `Try<PID<Slave>>` with
  `Try<Owned<cluster::Slave>>`.
* Added the (now required) `MasterDetector` argument to all slaves.
  Before, this was fetched from the first master in `Cluster`.
* Removed `Shutdown();` from all tests.
* Replaced `Stop(...)` with the appropriate master/slave
  destruction calls.
* Wrap various slave objects in `Owned`
  (i.e. containerizers, isolators, launchers, etc).
* Replace `CHECK` in tests with `ASSERT`.

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


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

Branch: refs/heads/master
Commit: 951539317525f3afe9490ed098617e5d4563a80a
Parents: c7df1d7
Author: Joseph Wu <jo...@mesosphere.io>
Authored: Wed Mar 16 08:19:17 2016 -0400
Committer: Michael Park <mp...@apache.org>
Committed: Wed Mar 16 08:19:17 2016 -0400

----------------------------------------------------------------------
 src/tests/authentication_tests.cpp              | 168 ++---
 src/tests/command_executor_tests.cpp            |  16 +-
 src/tests/container_logger_tests.cpp            |  52 +-
 .../docker_containerizer_tests.cpp              | 417 ++++++-----
 .../external_containerizer_test.cpp             |  12 +-
 .../containerizer/filesystem_isolator_tests.cpp |  58 +-
 src/tests/containerizer/isolator_tests.cpp      | 268 ++++---
 .../containerizer/memory_pressure_tests.cpp     |  60 +-
 .../containerizer/mesos_containerizer_tests.cpp |  50 +-
 src/tests/containerizer/port_mapping_tests.cpp  |  97 ++-
 .../containerizer/provisioner_docker_tests.cpp  |  19 +-
 .../containerizer/runtime_isolator_tests.cpp    |  30 +-
 src/tests/credentials_tests.cpp                 |  22 +-
 src/tests/disk_quota_tests.cpp                  |  99 +--
 src/tests/exception_tests.cpp                   |  29 +-
 src/tests/executor_http_api_tests.cpp           | 127 ++--
 src/tests/fault_tolerance_tests.cpp             | 276 ++++---
 src/tests/gc_tests.cpp                          |  67 +-
 src/tests/health_check_tests.cpp                | 159 ++--
 src/tests/hook_tests.cpp                        |  92 ++-
 src/tests/http_fault_tolerance_tests.cpp        |  68 +-
 src/tests/master_allocator_tests.cpp            | 192 ++---
 src/tests/master_authorization_tests.cpp        | 127 ++--
 src/tests/master_contender_detector_tests.cpp   |  28 +-
 src/tests/master_quota_tests.cpp                | 163 ++---
 src/tests/master_slave_reconciliation_tests.cpp |  95 +--
 src/tests/master_tests.cpp                      | 716 +++++++++----------
 src/tests/master_validation_tests.cpp           |  84 +--
 src/tests/metrics_tests.cpp                     |  11 +-
 src/tests/monitor_tests.cpp                     |  10 +-
 src/tests/oversubscription_tests.cpp            | 116 +--
 src/tests/partition_tests.cpp                   |  75 +-
 src/tests/persistent_volume_endpoints_tests.cpp | 233 +++---
 src/tests/persistent_volume_tests.cpp           | 128 ++--
 src/tests/rate_limiting_tests.cpp               | 116 ++-
 src/tests/reconciliation_tests.cpp              | 127 ++--
 src/tests/registrar_zookeeper_tests.cpp         |  12 +-
 src/tests/repair_tests.cpp                      |  44 +-
 src/tests/reservation_endpoints_tests.cpp       | 219 +++---
 src/tests/reservation_tests.cpp                 | 185 +++--
 src/tests/role_tests.cpp                        |  72 +-
 src/tests/scheduler_driver_tests.cpp            |  66 +-
 src/tests/scheduler_event_call_tests.cpp        |  93 +--
 src/tests/scheduler_http_api_tests.cpp          |  93 ++-
 src/tests/slave_tests.cpp                       | 484 +++++++------
 src/tests/status_update_manager_tests.cpp       | 148 ++--
 src/tests/teardown_tests.cpp                    |  61 +-
 47 files changed, 2891 insertions(+), 2993 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/95153931/src/tests/authentication_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/authentication_tests.cpp b/src/tests/authentication_tests.cpp
index 85f14c3..8143cd7 100644
--- a/src/tests/authentication_tests.cpp
+++ b/src/tests/authentication_tests.cpp
@@ -52,11 +52,12 @@ class AuthenticationTest : public MesosTest {};
 // denied registration by the master.
 TEST_F(AuthenticationTest, UnauthenticatedFramework)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockScheduler sched;
-  MesosSchedulerDriver driver(&sched, DEFAULT_FRAMEWORK_INFO, master.get());
+  MesosSchedulerDriver driver(
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid);
 
   Future<Nothing> error;
   EXPECT_CALL(sched, error(&driver, _))
@@ -69,8 +70,6 @@ TEST_F(AuthenticationTest, UnauthenticatedFramework)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -78,7 +77,7 @@ TEST_F(AuthenticationTest, UnauthenticatedFramework)
 // denied registration by the master.
 TEST_F(AuthenticationTest, UnauthenticatedSlave)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   Future<ShutdownMessage> shutdownMessage =
@@ -88,14 +87,13 @@ TEST_F(AuthenticationTest, UnauthenticatedSlave)
   slave::Flags flags = CreateSlaveFlags();
   flags.credential = None();
 
-  Try<PID<Slave>> slave = StartSlave(flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), flags);
   ASSERT_SOME(slave);
 
   // Slave should get error message from the master.
   AWAIT_READY(shutdownMessage);
   ASSERT_NE("", shutdownMessage.get().message());
-
-  Shutdown();
 }
 
 
@@ -106,12 +104,13 @@ TEST_F(AuthenticationTest, DisableFrameworkAuthentication)
   master::Flags flags = CreateMasterFlags();
   flags.authenticate_frameworks = false; // Disable authentication.
 
-  Try<PID<Master>> master = StartMaster(flags);
+  Try<Owned<cluster::Master>> master = StartMaster(flags);
   ASSERT_SOME(master);
 
   // Start the scheduler without credentials.
   MockScheduler sched;
-  MesosSchedulerDriver driver(&sched, DEFAULT_FRAMEWORK_INFO, master.get());
+  MesosSchedulerDriver driver(
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid);
 
   Future<Nothing> registered;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -124,8 +123,6 @@ TEST_F(AuthenticationTest, DisableFrameworkAuthentication)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -136,7 +133,7 @@ TEST_F(AuthenticationTest, DisableSlaveAuthentication)
   master::Flags flags = CreateMasterFlags();
   flags.authenticate_slaves = false; // Disable authentication.
 
-  Try<PID<Master>> master = StartMaster(flags);
+  Try<Owned<cluster::Master>> master = StartMaster(flags);
   ASSERT_SOME(master);
 
   Future<SlaveRegisteredMessage> slaveRegisteredMessage =
@@ -146,14 +143,13 @@ TEST_F(AuthenticationTest, DisableSlaveAuthentication)
   slave::Flags slaveFlags = CreateSlaveFlags();
   slaveFlags.credential = None();
 
-  Try<PID<Slave>> slave = StartSlave(slaveFlags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
   ASSERT_SOME(slave);
 
   // Slave should be able to get registered.
   AWAIT_READY(slaveRegisteredMessage);
   ASSERT_NE("", slaveRegisteredMessage.get().slave_id().value());
-
-  Shutdown();
 }
 
 
@@ -162,7 +158,7 @@ TEST_F(AuthenticationTest, DisableSlaveAuthentication)
 // FrameworkInfo.principal than Credential.principal.
 TEST_F(AuthenticationTest, MismatchedFrameworkInfoPrincipal)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockScheduler sched;
@@ -170,10 +166,7 @@ TEST_F(AuthenticationTest, MismatchedFrameworkInfoPrincipal)
   frameworkInfo.set_principal("mismatched-principal");
 
   MesosSchedulerDriver driver(
-      &sched,
-      frameworkInfo,
-      master.get(),
-      DEFAULT_CREDENTIAL);
+      &sched, frameworkInfo, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<Nothing> error;
   EXPECT_CALL(sched, error(&driver, _))
@@ -186,8 +179,6 @@ TEST_F(AuthenticationTest, MismatchedFrameworkInfoPrincipal)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -200,7 +191,7 @@ TEST_F(AuthenticationTest, DisabledFrameworkAuthenticationPrincipalMismatch)
   master::Flags flags = CreateMasterFlags();
   flags.authenticate_frameworks = false; // Authentication not required.
 
-  Try<PID<Master>> master = StartMaster(flags);
+  Try<Owned<cluster::Master>> master = StartMaster(flags);
   ASSERT_SOME(master);
 
   MockScheduler sched;
@@ -208,10 +199,7 @@ TEST_F(AuthenticationTest, DisabledFrameworkAuthenticationPrincipalMismatch)
   frameworkInfo.set_principal("mismatched-principal");
 
   MesosSchedulerDriver driver(
-      &sched,
-      frameworkInfo,
-      master.get(),
-      DEFAULT_CREDENTIAL);
+      &sched, frameworkInfo, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<Nothing> error;
   EXPECT_CALL(sched, error(&driver, _))
@@ -224,8 +212,6 @@ TEST_F(AuthenticationTest, DisabledFrameworkAuthenticationPrincipalMismatch)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -234,7 +220,7 @@ TEST_F(AuthenticationTest, DisabledFrameworkAuthenticationPrincipalMismatch)
 // register.
 TEST_F(AuthenticationTest, UnspecifiedFrameworkInfoPrincipal)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockScheduler sched;
@@ -242,10 +228,7 @@ TEST_F(AuthenticationTest, UnspecifiedFrameworkInfoPrincipal)
   frameworkInfo.clear_principal();
 
   MesosSchedulerDriver driver(
-      &sched,
-      frameworkInfo,
-      master.get(),
-      DEFAULT_CREDENTIAL);
+      &sched, frameworkInfo, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<Nothing> registered;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -258,8 +241,6 @@ TEST_F(AuthenticationTest, UnspecifiedFrameworkInfoPrincipal)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -270,13 +251,13 @@ TEST_F(AuthenticationTest, AuthenticatedFramework)
   master::Flags flags = CreateMasterFlags();
   flags.authenticate_frameworks = false; // Disable authentication.
 
-  Try<PID<Master>> master = StartMaster(flags);
+  Try<Owned<cluster::Master>> master = StartMaster(flags);
   ASSERT_SOME(master);
 
   // Start the scheduler with credentials.
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<Nothing> registered;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -289,8 +270,6 @@ TEST_F(AuthenticationTest, AuthenticatedFramework)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -301,21 +280,21 @@ TEST_F(AuthenticationTest, AuthenticatedSlave)
   master::Flags flags = CreateMasterFlags();
   flags.authenticate_slaves = false; // Disable authentication.
 
-  Try<PID<Master>> master = StartMaster(flags);
+  Try<Owned<cluster::Master>> master = StartMaster(flags);
   ASSERT_SOME(master);
 
   Future<SlaveRegisteredMessage> slaveRegisteredMessage =
     FUTURE_PROTOBUF(SlaveRegisteredMessage(), _, _);
 
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
   // Start the slave with credentials.
-  Try<PID<Slave>> slave = StartSlave();
+  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get());
   ASSERT_SOME(slave);
 
   // Slave should be able to get registered.
   AWAIT_READY(slaveRegisteredMessage);
   ASSERT_NE("", slaveRegisteredMessage.get().slave_id().value());
-
-  Shutdown();
 }
 
 
@@ -323,12 +302,12 @@ TEST_F(AuthenticationTest, AuthenticatedSlave)
 // authentication when authenticate message is lost.
 TEST_F(AuthenticationTest, RetryFrameworkAuthentication)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   // Drop the first authenticate message from the scheduler.
   Future<AuthenticateMessage> authenticateMessage =
@@ -353,8 +332,6 @@ TEST_F(AuthenticationTest, RetryFrameworkAuthentication)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -362,14 +339,15 @@ TEST_F(AuthenticationTest, RetryFrameworkAuthentication)
 // authentication when authenticate message is lost.
 TEST_F(AuthenticationTest, RetrySlaveAuthentication)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   // Drop the first authenticate message from the slave.
   Future<AuthenticateMessage> authenticateMessage =
     DROP_PROTOBUF(AuthenticateMessage(), _, _);
 
-  Try<PID<Slave>> slave = StartSlave();
+  Owned<MasterDetector> detector = master.get()->createDetector();
+  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get());
   ASSERT_SOME(slave);
 
   AWAIT_READY(authenticateMessage);
@@ -386,8 +364,6 @@ TEST_F(AuthenticationTest, RetrySlaveAuthentication)
   // Slave should be able to get registered.
   AWAIT_READY(slaveRegisteredMessage);
   ASSERT_NE("", slaveRegisteredMessage.get().slave_id().value());
-
-  Shutdown();
 }
 
 
@@ -396,12 +372,12 @@ TEST_F(AuthenticationTest, RetrySlaveAuthentication)
 // is lost.
 TEST_F(AuthenticationTest, DropIntermediateSASLMessage)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   // Drop the AuthenticationStepMessage from authenticator.
   Future<AuthenticationStepMessage> authenticationStepMessage =
@@ -432,8 +408,6 @@ TEST_F(AuthenticationTest, DropIntermediateSASLMessage)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -442,14 +416,15 @@ TEST_F(AuthenticationTest, DropIntermediateSASLMessage)
 // is lost.
 TEST_F(AuthenticationTest, DropIntermediateSASLMessageForSlave)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   // Drop the AuthenticationStepMessage from authenticator.
   Future<AuthenticationStepMessage> authenticationStepMessage =
     DROP_PROTOBUF(AuthenticationStepMessage(), _, _);
 
-  Try<PID<Slave>> slave = StartSlave();
+  Owned<MasterDetector> detector = master.get()->createDetector();
+  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get());
   ASSERT_SOME(slave);
 
   AWAIT_READY(authenticationStepMessage);
@@ -472,8 +447,6 @@ TEST_F(AuthenticationTest, DropIntermediateSASLMessageForSlave)
   // Slave should be able to get registered.
   AWAIT_READY(slaveRegisteredMessage);
   ASSERT_NE("", slaveRegisteredMessage.get().slave_id().value());
-
-  Shutdown();
 }
 
 
@@ -485,12 +458,12 @@ TEST_F(AuthenticationTest, DropIntermediateSASLMessageForSlave)
 // eventually register.
 TEST_F(AuthenticationTest, DropFinalSASLMessage)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   // Drop the AuthenticationCompletedMessage from authenticator.
   Future<AuthenticationCompletedMessage> authenticationCompletedMessage =
@@ -521,8 +494,6 @@ TEST_F(AuthenticationTest, DropFinalSASLMessage)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -534,14 +505,15 @@ TEST_F(AuthenticationTest, DropFinalSASLMessage)
 // eventually register.
 TEST_F(AuthenticationTest, DropFinalSASLMessageForSlave)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   // Drop the AuthenticationCompletedMessage from authenticator.
   Future<AuthenticationCompletedMessage> authenticationCompletedMessage =
     DROP_PROTOBUF(AuthenticationCompletedMessage(), _, _);
 
-  Try<PID<Slave>> slave = StartSlave();
+  Owned<MasterDetector> detector = master.get()->createDetector();
+  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get());
   ASSERT_SOME(slave);
 
   AWAIT_READY(authenticationCompletedMessage);
@@ -564,8 +536,6 @@ TEST_F(AuthenticationTest, DropFinalSASLMessageForSlave)
   // Slave should be able to get registered.
   AWAIT_READY(slaveRegisteredMessage);
   ASSERT_NE("", slaveRegisteredMessage.get().slave_id().value());
-
-  Shutdown();
 }
 
 
@@ -574,12 +544,12 @@ TEST_F(AuthenticationTest, DropFinalSASLMessageForSlave)
 // authenticates.
 TEST_F(AuthenticationTest, MasterFailover)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockScheduler sched;
   Owned<StandaloneMasterDetector> detector(
-      new StandaloneMasterDetector(master.get()));
+      new StandaloneMasterDetector(master.get()->pid));
   TestingMesosSchedulerDriver driver(&sched, detector.get());
 
   // Drop the authenticate message from the scheduler.
@@ -592,7 +562,7 @@ TEST_F(AuthenticationTest, MasterFailover)
 
   // While the authentication is in progress simulate a failed over
   // master by restarting the master.
-  Stop(master.get());
+  master->reset();
   master = StartMaster();
   ASSERT_SOME(master);
 
@@ -601,15 +571,13 @@ TEST_F(AuthenticationTest, MasterFailover)
     .WillOnce(FutureSatisfy(&registered));
 
   // Appoint a new master and inform the scheduler about it.
-  detector->appoint(master.get());
+  detector->appoint(master.get()->pid);
 
   // Scheduler should successfully register with the new master.
   AWAIT_READY(registered);
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -618,23 +586,23 @@ TEST_F(AuthenticationTest, MasterFailover)
 // authenticates.
 TEST_F(AuthenticationTest, MasterFailoverDuringSlaveAuthentication)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   // Drop the authenticate message from the slave.
   Future<AuthenticateMessage> authenticateMessage =
     DROP_PROTOBUF(AuthenticateMessage(), _, _);
 
-  StandaloneMasterDetector detector(master.get());
+  StandaloneMasterDetector detector(master.get()->pid);
   slave::Flags slaveFlags = CreateSlaveFlags();
-  Try<PID<Slave>> slave = StartSlave(&detector, slaveFlags);
+  Try<Owned<cluster::Slave>> slave = StartSlave(&detector, slaveFlags);
   ASSERT_SOME(slave);
 
   AWAIT_READY(authenticateMessage);
 
   // While the authentication is in progress simulate a failed over
   // master by restarting the master.
-  Stop(master.get());
+  master->reset();
   master = StartMaster();
   ASSERT_SOME(master);
 
@@ -642,13 +610,11 @@ TEST_F(AuthenticationTest, MasterFailoverDuringSlaveAuthentication)
     FUTURE_PROTOBUF(SlaveRegisteredMessage(), _, _);
 
   // Appoint a new master and inform the slave about it.
-  detector.appoint(master.get());
+  detector.appoint(master.get()->pid);
 
   // Slave should be able to get registered.
   AWAIT_READY(slaveRegisteredMessage);
   ASSERT_NE("", slaveRegisteredMessage.get().slave_id().value());
-
-  Shutdown();
 }
 
 
@@ -657,12 +623,12 @@ TEST_F(AuthenticationTest, MasterFailoverDuringSlaveAuthentication)
 // detected due to leader election), it is handled properly.
 TEST_F(AuthenticationTest, LeaderElection)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockScheduler sched;
   Owned<StandaloneMasterDetector> detector(
-      new StandaloneMasterDetector(master.get()));
+      new StandaloneMasterDetector(master.get()->pid));
   TestingMesosSchedulerDriver driver(&sched, detector.get());
 
   // Drop the AuthenticationStepMessage from authenticator.
@@ -679,15 +645,13 @@ TEST_F(AuthenticationTest, LeaderElection)
     .WillOnce(FutureSatisfy(&registered));
 
   // Appoint a new master and inform the scheduler about it.
-  detector->appoint(master.get());
+  detector->appoint(master.get()->pid);
 
   // Scheduler should successfully register with the new master.
   AWAIT_READY(registered);
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -696,16 +660,16 @@ TEST_F(AuthenticationTest, LeaderElection)
 // detected due to leader election), it is handled properly.
 TEST_F(AuthenticationTest, LeaderElectionDuringSlaveAuthentication)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   // Drop the AuthenticationStepMessage from authenticator.
   Future<AuthenticationStepMessage> authenticationStepMessage =
     DROP_PROTOBUF(AuthenticationStepMessage(), _, _);
 
-  StandaloneMasterDetector detector(master.get());
+  StandaloneMasterDetector detector(master.get()->pid);
   slave::Flags slaveFlags = CreateSlaveFlags();
-  Try<PID<Slave>> slave = StartSlave(&detector, slaveFlags);
+  Try<Owned<cluster::Slave>> slave = StartSlave(&detector, slaveFlags);
   ASSERT_SOME(slave);
 
   // Drop the intermediate SASL message so that authentication fails.
@@ -715,13 +679,11 @@ TEST_F(AuthenticationTest, LeaderElectionDuringSlaveAuthentication)
     FUTURE_PROTOBUF(SlaveRegisteredMessage(), _, _);
 
   // Appoint a new master and inform the slave about it.
-  detector.appoint(master.get());
+  detector.appoint(master.get()->pid);
 
   // Slave should be able to get registered.
   AWAIT_READY(slaveRegisteredMessage);
   ASSERT_NE("", slaveRegisteredMessage.get().slave_id().value());
-
-  Shutdown();
 }
 
 
@@ -730,13 +692,13 @@ TEST_F(AuthenticationTest, LeaderElectionDuringSlaveAuthentication)
 // with the master when it comes back up.
 TEST_F(AuthenticationTest, SchedulerFailover)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   // Launch the first (i.e., failing) scheduler.
   MockScheduler sched1;
   Owned<StandaloneMasterDetector> detector(
-      new StandaloneMasterDetector(master.get()));
+      new StandaloneMasterDetector(master.get()->pid));
   TestingMesosSchedulerDriver driver1(&sched1, detector.get());
 
   Future<FrameworkID> frameworkId;
@@ -755,7 +717,7 @@ TEST_F(AuthenticationTest, SchedulerFailover)
   EXPECT_CALL(sched1, disconnected(&driver1));
 
   // Appoint a new master and inform the scheduler about it.
-  detector->appoint(master.get());
+  detector->appoint(master.get()->pid);
 
   AWAIT_READY(authenticationStepMessage);
 
@@ -769,7 +731,7 @@ TEST_F(AuthenticationTest, SchedulerFailover)
   framework2.mutable_id()->MergeFrom(frameworkId.get());
 
   MesosSchedulerDriver driver2(
-      &sched2, framework2, master.get(), DEFAULT_CREDENTIAL);
+      &sched2, framework2, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<Nothing> sched2Registered;
   EXPECT_CALL(sched2, registered(&driver2, frameworkId.get(), _))
@@ -789,8 +751,6 @@ TEST_F(AuthenticationTest, SchedulerFailover)
 
   driver1.stop();
   driver1.join();
-
-  Shutdown();
 }
 
 
@@ -799,13 +759,13 @@ TEST_F(AuthenticationTest, SchedulerFailover)
 // authentication.
 TEST_F(AuthenticationTest, RejectedSchedulerFailover)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   // Launch the first scheduler.
   MockScheduler sched1;
   Owned<StandaloneMasterDetector> detector(
-      new StandaloneMasterDetector(master.get()));
+      new StandaloneMasterDetector(master.get()->pid));
   TestingMesosSchedulerDriver driver1(&sched1, detector.get());
 
   Future<FrameworkID> frameworkId;
@@ -824,7 +784,7 @@ TEST_F(AuthenticationTest, RejectedSchedulerFailover)
   EXPECT_CALL(sched1, disconnected(&driver1));
 
   // Appoint a new master and inform the scheduler about it.
-  detector->appoint(master.get());
+  detector->appoint(master.get()->pid);
 
   AWAIT_READY(authenticationStepMessage);
 
@@ -839,7 +799,7 @@ TEST_F(AuthenticationTest, RejectedSchedulerFailover)
   framework2.set_principal("mismatched-principal");
 
   MesosSchedulerDriver driver2(
-      &sched2, framework2, master.get(), DEFAULT_CREDENTIAL);
+      &sched2, framework2, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<Nothing> sched1Error;
   EXPECT_CALL(sched1, error(&driver1, _))
@@ -859,8 +819,6 @@ TEST_F(AuthenticationTest, RejectedSchedulerFailover)
 
   driver1.stop();
   driver1.join();
-
-  Shutdown();
 }
 
 } // namespace tests {

http://git-wip-us.apache.org/repos/asf/mesos/blob/95153931/src/tests/command_executor_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/command_executor_tests.cpp b/src/tests/command_executor_tests.cpp
index 0d2fcf6..970cdc3 100644
--- a/src/tests/command_executor_tests.cpp
+++ b/src/tests/command_executor_tests.cpp
@@ -24,6 +24,7 @@
 #include <process/future.hpp>
 #include <process/gmock.hpp>
 #include <process/gtest.hpp>
+#include <process/owned.hpp>
 #include <process/pid.hpp>
 
 #include <stout/gtest.hpp>
@@ -39,6 +40,7 @@ using mesos::internal::master::Master;
 using mesos::internal::slave::Slave;
 
 using process::Future;
+using process::Owned;
 using process::PID;
 
 using std::vector;
@@ -57,16 +59,17 @@ class CommandExecutorTest : public MesosTest {};
 // TASK_KILLING to frameworks that do not support the capability.
 TEST_F(CommandExecutorTest, NoTaskKillingCapability)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
-  Try<PID<Slave>> slave = StartSlave();
+  Owned<MasterDetector> detector = master.get()->createDetector();
+  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get());
   ASSERT_SOME(slave);
 
   // Start the framework without the task killing capability.
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   EXPECT_CALL(sched, registered(&driver, _, _));
 
@@ -114,10 +117,11 @@ TEST_F(CommandExecutorTest, NoTaskKillingCapability)
 // to frameworks that support the capability.
 TEST_F(CommandExecutorTest, TaskKillingCapability)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
-  Try<PID<Slave>> slave = StartSlave();
+  Owned<MasterDetector> detector = master.get()->createDetector();
+  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get());
   ASSERT_SOME(slave);
 
   // Start the framework with the task killing capability.
@@ -129,7 +133,7 @@ TEST_F(CommandExecutorTest, TaskKillingCapability)
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, frameworkInfo, master.get(), DEFAULT_CREDENTIAL);
+      &sched, frameworkInfo, master.get()->pid, DEFAULT_CREDENTIAL);
 
   EXPECT_CALL(sched, registered(&driver, _, _));
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/95153931/src/tests/container_logger_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/container_logger_tests.cpp b/src/tests/container_logger_tests.cpp
index 00f4129..71101c3 100644
--- a/src/tests/container_logger_tests.cpp
+++ b/src/tests/container_logger_tests.cpp
@@ -22,6 +22,7 @@
 
 #include <process/future.hpp>
 #include <process/gtest.hpp>
+#include <process/owned.hpp>
 
 #include <stout/bytes.hpp>
 #include <stout/gtest.hpp>
@@ -277,7 +278,7 @@ TEST_F(ContainerLoggerTest, ROOT_DOCKER_ContainerizerRecover)
 TEST_F(ContainerLoggerTest, DefaultToSandbox)
 {
   // Create a master, agent, and framework.
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   Future<SlaveRegisteredMessage> slaveRegisteredMessage =
@@ -289,11 +290,16 @@ TEST_F(ContainerLoggerTest, DefaultToSandbox)
   Fetcher fetcher;
 
   // We use an actual containerizer + executor since we want something to run.
-  Try<MesosContainerizer*> containerizer =
+  Try<MesosContainerizer*> _containerizer =
     MesosContainerizer::create(flags, false, &fetcher);
-  CHECK_SOME(containerizer);
 
-  Try<PID<Slave>> slave = StartSlave(containerizer.get(), flags);
+  CHECK_SOME(_containerizer);
+  Owned<MesosContainerizer> containerizer(_containerizer.get());
+
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), containerizer.get(), flags);
   ASSERT_SOME(slave);
 
   AWAIT_READY(slaveRegisteredMessage);
@@ -301,7 +307,7 @@ TEST_F(ContainerLoggerTest, DefaultToSandbox)
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -340,7 +346,7 @@ TEST_F(ContainerLoggerTest, DefaultToSandbox)
   driver.stop();
   driver.join();
 
-  Shutdown();
+  slave->reset();
 
   // Check that the sandbox was written to.
   string sandboxDirectory = path::join(
@@ -368,7 +374,7 @@ TEST_F(ContainerLoggerTest, DefaultToSandbox)
 TEST_F(ContainerLoggerTest, LOGROTATE_RotateInSandbox)
 {
   // Create a master, agent, and framework.
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   Future<SlaveRegisteredMessage> slaveRegisteredMessage =
@@ -383,11 +389,16 @@ TEST_F(ContainerLoggerTest, LOGROTATE_RotateInSandbox)
   Fetcher fetcher;
 
   // We use an actual containerizer + executor since we want something to run.
-  Try<MesosContainerizer*> containerizer =
+  Try<MesosContainerizer*> _containerizer =
     MesosContainerizer::create(flags, false, &fetcher);
-  CHECK_SOME(containerizer);
 
-  Try<PID<Slave>> slave = StartSlave(containerizer.get(), flags);
+  CHECK_SOME(_containerizer);
+  Owned<MesosContainerizer> containerizer(_containerizer.get());
+
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), containerizer.get(), flags);
   ASSERT_SOME(slave);
 
   AWAIT_READY(slaveRegisteredMessage);
@@ -395,7 +406,7 @@ TEST_F(ContainerLoggerTest, LOGROTATE_RotateInSandbox)
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -441,8 +452,6 @@ TEST_F(ContainerLoggerTest, LOGROTATE_RotateInSandbox)
   driver.stop();
   driver.join();
 
-  Shutdown();
-
   // The `LogrotateContainerLogger` spawns some `mesos-logrotate-logger`
   // processes above, which continue running briefly after the container exits.
   // Once they finish reading the container's pipe, they should exit.
@@ -498,7 +507,7 @@ TEST_F(ContainerLoggerTest, LOGROTATE_RotateInSandbox)
 TEST_F(ContainerLoggerTest, LOGROTATE_ModuleFDOwnership)
 {
   // Create a master, agent, and framework.
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   Future<SlaveRegisteredMessage> slaveRegisteredMessage =
@@ -513,11 +522,16 @@ TEST_F(ContainerLoggerTest, LOGROTATE_ModuleFDOwnership)
   Fetcher fetcher;
 
   // We use an actual containerizer + executor since we want something to run.
-  Try<MesosContainerizer*> containerizer =
+  Try<MesosContainerizer*> _containerizer =
     MesosContainerizer::create(flags, false, &fetcher);
-  CHECK_SOME(containerizer);
 
-  Try<PID<Slave>> slave = StartSlave(containerizer.get(), flags);
+  CHECK_SOME(_containerizer);
+  Owned<MesosContainerizer> containerizer(_containerizer.get());
+
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), containerizer.get(), flags);
   ASSERT_SOME(slave);
 
   AWAIT_READY(slaveRegisteredMessage);
@@ -525,7 +539,7 @@ TEST_F(ContainerLoggerTest, LOGROTATE_ModuleFDOwnership)
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -586,8 +600,6 @@ TEST_F(ContainerLoggerTest, LOGROTATE_ModuleFDOwnership)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 } // namespace tests {

http://git-wip-us.apache.org/repos/asf/mesos/blob/95153931/src/tests/containerizer/docker_containerizer_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer/docker_containerizer_tests.cpp b/src/tests/containerizer/docker_containerizer_tests.cpp
index 8afaa4d..f6fce7d 100644
--- a/src/tests/containerizer/docker_containerizer_tests.cpp
+++ b/src/tests/containerizer/docker_containerizer_tests.cpp
@@ -58,11 +58,6 @@ using mesos::internal::slave::Slave;
 
 using mesos::slave::ContainerLogger;
 
-using process::Future;
-using process::Message;
-using process::PID;
-using process::UPID;
-
 using std::list;
 using std::string;
 using std::vector;
@@ -173,7 +168,7 @@ public:
 #ifdef __linux__
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_Launch_Executor)
 {
-  Try<PID<Master> > master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -196,12 +191,15 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Launch_Executor)
       Owned<ContainerLogger>(logger.get()),
       docker);
 
-  Try<PID<Slave> > slave = StartSlave(&dockerContainerizer, flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer, flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-    &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+    &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -282,8 +280,6 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Launch_Executor)
 
   ASSERT_FALSE(
     exists(docker, slaveId, containerId.get(), ContainerState::RUNNING));
-
-  Shutdown();
 }
 
 
@@ -299,7 +295,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Launch_Executor)
 // TODO(tnachen): Re-enable this test when we are able to fix MESOS-3123.
 TEST_F(DockerContainerizerTest, DISABLED_ROOT_DOCKER_Launch_Executor_Bridged)
 {
-  Try<PID<Master> > master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -322,12 +318,15 @@ TEST_F(DockerContainerizerTest, DISABLED_ROOT_DOCKER_Launch_Executor_Bridged)
       Owned<ContainerLogger>(logger.get()),
       docker);
 
-  Try<PID<Slave> > slave = StartSlave(&dockerContainerizer, flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer, flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-    &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+    &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -409,15 +408,13 @@ TEST_F(DockerContainerizerTest, DISABLED_ROOT_DOCKER_Launch_Executor_Bridged)
 
   ASSERT_FALSE(
     exists(docker, slaveId, containerId.get(), ContainerState::RUNNING));
-
-  Shutdown();
 }
 #endif // __linux__
 
 
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_Launch)
 {
-  Try<PID<Master> > master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -440,12 +437,15 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Launch)
       Owned<ContainerLogger>(logger.get()),
       docker);
 
-  Try<PID<Slave> > slave = StartSlave(&dockerContainerizer, flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer, flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -510,7 +510,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Launch)
 
   // Check if container information is exposed through master's state endpoint.
   Future<http::Response> response = http::get(
-      master.get(),
+      master.get()->pid,
       "state",
       None(),
       createBasicAuthHeaders(DEFAULT_CREDENTIAL));
@@ -526,7 +526,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Launch)
   EXPECT_SOME_EQ(false, find);
 
   // Check if container information is exposed through slave's state endpoint.
-  response = http::get(slave.get(), "state");
+  response = http::get(slave.get()->pid, "state");
   AWAIT_EXPECT_RESPONSE_STATUS_EQ(process::http::OK().status, response);
 
   parse = JSON::parse<JSON::Object>(response.get().body);
@@ -555,14 +555,12 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Launch)
 
   ASSERT_FALSE(
     exists(docker, slaveId, containerId.get(), ContainerState::RUNNING));
-
-  Shutdown();
 }
 
 
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_Kill)
 {
-  Try<PID<Master> > master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -585,12 +583,15 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Kill)
       Owned<ContainerLogger>(logger.get()),
       docker);
 
-  Try<PID<Slave> > slave = StartSlave(&dockerContainerizer, flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer, flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -670,8 +671,6 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Kill)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -679,7 +678,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Kill)
 // before TASK_KILLED, if the capability is supported.
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_TaskKillingCapability)
 {
-  Try<PID<Master> > master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -702,7 +701,10 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_TaskKillingCapability)
       Owned<ContainerLogger>(logger.get()),
       docker);
 
-  Try<PID<Slave> > slave = StartSlave(&dockerContainerizer, flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer, flags);
   ASSERT_SOME(slave);
 
   // Start the framework with the task killing capability.
@@ -714,7 +716,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_TaskKillingCapability)
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, frameworkInfo, master.get(), DEFAULT_CREDENTIAL);
+      &sched, frameworkInfo, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -798,15 +800,13 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_TaskKillingCapability)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
 // This test tests DockerContainerizer::usage().
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_Usage)
 {
-  Try<PID<Master> > master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   slave::Flags flags = CreateSlaveFlags();
@@ -830,12 +830,15 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Usage)
       Owned<ContainerLogger>(logger.get()),
       docker);
 
-  Try<PID<Slave> > slave = StartSlave(&dockerContainerizer, flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer, flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -943,15 +946,13 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Usage)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
 #ifdef __linux__
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_Update)
 {
-  Try<PID<Master> > master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -974,12 +975,15 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Update)
       Owned<ContainerLogger>(logger.get()),
       docker);
 
-  Try<PID<Slave> > slave = StartSlave(&dockerContainerizer, flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer, flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -1109,8 +1113,6 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Update)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 #endif // __linux__
 
@@ -1235,8 +1237,6 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Recover)
   AWAIT_FAILED(dockerContainerizer.wait(reapedContainerId));
 
   AWAIT_EQ(inspect.get().id, stoppedContainer);
-
-  Shutdown();
 }
 
 
@@ -1306,7 +1306,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_SkipRecoverNonDocker)
 // persistent volume.
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_LaunchWithPersistentVolumes)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -1330,7 +1330,10 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_LaunchWithPersistentVolumes)
       Owned<ContainerLogger>(logger.get()),
       docker);
 
-  Try<PID<Slave>> slave = StartSlave(&dockerContainerizer, flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer, flags);
   ASSERT_SOME(slave);
 
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
@@ -1338,7 +1341,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_LaunchWithPersistentVolumes)
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, frameworkInfo, master.get(), DEFAULT_CREDENTIAL);
+      &sched, frameworkInfo, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -1446,8 +1449,6 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_LaunchWithPersistentVolumes)
     EXPECT_FALSE(
         strings::contains(entry.target, path::join(directory.get(), "path1")));
   }
-
-  Shutdown();
 }
 
 
@@ -1455,7 +1456,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_LaunchWithPersistentVolumes)
 // with persistent volumes and destroy it properly.
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_RecoverPersistentVolumes)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -1473,13 +1474,17 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_RecoverPersistentVolumes)
 
   ASSERT_SOME(logger);
 
-  MockDockerContainerizer* dockerContainerizer = new MockDockerContainerizer(
-      flags,
-      &fetcher,
-      Owned<ContainerLogger>(logger.get()),
-      docker);
+  Owned<MockDockerContainerizer> dockerContainerizer(
+      new MockDockerContainerizer(
+          flags,
+          &fetcher,
+          Owned<ContainerLogger>(logger.get()),
+          docker));
+
+  Owned<MasterDetector> detector = master.get()->createDetector();
 
-  Try<PID<Slave>> slave = StartSlave(dockerContainerizer, flags);
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), dockerContainerizer.get(), flags);
   ASSERT_SOME(slave);
 
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
@@ -1488,7 +1493,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_RecoverPersistentVolumes)
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, frameworkInfo, master.get(), DEFAULT_CREDENTIAL);
+      &sched, frameworkInfo, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -1547,7 +1552,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_RecoverPersistentVolumes)
   EXPECT_CALL(*dockerContainerizer, launch(_, _, _, _, _, _, _, _))
     .WillOnce(DoAll(FutureArg<0>(&containerId),
                     FutureArg<3>(&directory),
-                    Invoke(dockerContainerizer,
+                    Invoke(dockerContainerizer.get(),
                            &MockDockerContainerizer::_launch)));
 
   Future<TaskStatus> statusRunning;
@@ -1565,21 +1570,20 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_RecoverPersistentVolumes)
   AWAIT_READY_FOR(statusRunning, Seconds(60));
   EXPECT_EQ(TASK_RUNNING, statusRunning.get().state());
 
-  Stop(slave.get());
-
   // Recreate containerizer and start slave again.
-  delete dockerContainerizer;
+  slave.get()->terminate();
+  slave->reset();
 
   logger = ContainerLogger::create(flags.container_logger);
   ASSERT_SOME(logger);
 
-  dockerContainerizer = new MockDockerContainerizer(
+  dockerContainerizer.reset(new MockDockerContainerizer(
       flags,
       &fetcher,
       Owned<ContainerLogger>(logger.get()),
-      docker);
+      docker));
 
-  slave = StartSlave(dockerContainerizer, flags);
+  slave = StartSlave(detector.get(), dockerContainerizer.get(), flags);
   ASSERT_SOME(slave);
 
   Future<Nothing> _recover = FUTURE_DISPATCH(_, &Slave::_recover);
@@ -1606,9 +1610,6 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_RecoverPersistentVolumes)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
-  delete dockerContainerizer;
 }
 
 
@@ -1616,7 +1617,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_RecoverPersistentVolumes)
 // orphaned containers with persistent volumes.
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_RecoverOrphanedPersistentVolumes)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -1634,13 +1635,17 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_RecoverOrphanedPersistentVolumes)
 
   ASSERT_SOME(logger);
 
-  MockDockerContainerizer* dockerContainerizer = new MockDockerContainerizer(
-      flags,
-      &fetcher,
-      Owned<ContainerLogger>(logger.get()),
-      docker);
+  Owned<MockDockerContainerizer> dockerContainerizer(
+      new MockDockerContainerizer(
+          flags,
+          &fetcher,
+          Owned<ContainerLogger>(logger.get()),
+          docker));
 
-  Try<PID<Slave>> slave = StartSlave(dockerContainerizer, flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), dockerContainerizer.get(), flags);
   ASSERT_SOME(slave);
 
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
@@ -1649,7 +1654,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_RecoverOrphanedPersistentVolumes)
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, frameworkInfo, master.get(), DEFAULT_CREDENTIAL);
+      &sched, frameworkInfo, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -1706,7 +1711,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_RecoverOrphanedPersistentVolumes)
   EXPECT_CALL(*dockerContainerizer, launch(_, _, _, _, _, _, _, _))
     .WillOnce(DoAll(FutureArg<0>(&containerId),
                     FutureArg<3>(&directory),
-                    Invoke(dockerContainerizer,
+                    Invoke(dockerContainerizer.get(),
                            &MockDockerContainerizer::_launch)));
 
   Future<TaskStatus> statusRunning;
@@ -1724,7 +1729,9 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_RecoverOrphanedPersistentVolumes)
   AWAIT_READY_FOR(statusRunning, Seconds(60));
   EXPECT_EQ(TASK_RUNNING, statusRunning.get().state());
 
-  Stop(slave.get());
+  // Recreate containerizer and start slave again.
+  slave.get()->terminate();
+  slave->reset();
 
   // Wipe the framework directory so that the slave will treat the
   // above running task as an orphan. We don't want to wipe the whole
@@ -1736,19 +1743,16 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_RecoverOrphanedPersistentVolumes)
           offer.slave_id(),
           frameworkId.get())));
 
-  // Recreate containerizer and start slave again.
-  delete dockerContainerizer;
-
   logger = ContainerLogger::create(flags.container_logger);
   ASSERT_SOME(logger);
 
-  dockerContainerizer = new MockDockerContainerizer(
+  dockerContainerizer.reset(new MockDockerContainerizer(
       flags,
       &fetcher,
       Owned<ContainerLogger>(logger.get()),
-      docker);
+      docker));
 
-  slave = StartSlave(dockerContainerizer, flags);
+  slave = StartSlave(detector.get(), dockerContainerizer.get(), flags);
   ASSERT_SOME(slave);
 
   Future<Nothing> _recover = FUTURE_DISPATCH(_, &Slave::_recover);
@@ -1769,8 +1773,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_RecoverOrphanedPersistentVolumes)
   driver.stop();
   driver.join();
 
-  Shutdown();
-  delete dockerContainerizer;
+  slave->reset();
 
   EXPECT_FALSE(exists(docker, offer.slave_id(), containerId.get()));
 }
@@ -1779,7 +1782,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_RecoverOrphanedPersistentVolumes)
 
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_Logs)
 {
-  Try<PID<Master> > master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -1808,12 +1811,15 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Logs)
   EXPECT_CALL(*mockDocker, stop(_, _, _))
     .WillRepeatedly(Return(Nothing()));
 
-  Try<PID<Slave> > slave = StartSlave(&dockerContainerizer, flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer, flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -1907,8 +1913,6 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Logs)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -1916,7 +1920,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Logs)
 // an entrypoint "echo" and a default command "inky".
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_Default_CMD)
 {
-  Try<PID<Master> > master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -1945,12 +1949,15 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Default_CMD)
   EXPECT_CALL(*mockDocker, stop(_, _, _))
     .WillRepeatedly(Return(Nothing()));
 
-  Try<PID<Slave> > slave = StartSlave(&dockerContainerizer, flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer, flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -2039,8 +2046,6 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Default_CMD)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -2048,7 +2053,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Default_CMD)
 // an entrypoint "echo" and a default command "inky".
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_Default_CMD_Override)
 {
-  Try<PID<Master> > master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -2077,12 +2082,15 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Default_CMD_Override)
   EXPECT_CALL(*mockDocker, stop(_, _, _))
     .WillRepeatedly(Return(Nothing()));
 
-  Try<PID<Slave> > slave = StartSlave(&dockerContainerizer, flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer, flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -2174,8 +2182,6 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Default_CMD_Override)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -2183,7 +2189,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Default_CMD_Override)
 // an entrypoint "echo" and a default command "inky".
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_Default_CMD_Args)
 {
-  Try<PID<Master> > master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -2212,12 +2218,15 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Default_CMD_Args)
   EXPECT_CALL(*mockDocker, stop(_, _, _))
     .WillRepeatedly(Return(Nothing()));
 
-  Try<PID<Slave> > slave = StartSlave(&dockerContainerizer, flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer, flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -2310,8 +2319,6 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Default_CMD_Args)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -2320,7 +2327,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_Default_CMD_Args)
 // re-registers and the slave properly sends the update.
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_SlaveRecoveryTaskContainer)
 {
-  Try<PID<Master> > master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -2338,17 +2345,18 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_SlaveRecoveryTaskContainer)
 
   ASSERT_SOME(logger);
 
-  // We put the containerizer on the heap so we can more easily
-  // control it's lifetime, i.e., when we invoke the destructor.
-  MockDockerContainerizer* dockerContainerizer1 =
-    new MockDockerContainerizer(
-        flags,
-        &fetcher,
-        Owned<ContainerLogger>(logger.get()),
-        docker);
+  Owned<MockDockerContainerizer> dockerContainerizer(
+      new MockDockerContainerizer(
+          flags,
+          &fetcher,
+          Owned<ContainerLogger>(logger.get()),
+          docker));
 
-  Try<PID<Slave> > slave1 = StartSlave(dockerContainerizer1, flags);
-  ASSERT_SOME(slave1);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), dockerContainerizer.get(), flags);
+  ASSERT_SOME(slave);
 
   // Enable checkpointing for the framework.
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
@@ -2356,7 +2364,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_SlaveRecoveryTaskContainer)
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, frameworkInfo, master.get(), DEFAULT_CREDENTIAL);
+      &sched, frameworkInfo, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -2399,9 +2407,9 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_SlaveRecoveryTaskContainer)
   task.mutable_container()->CopyFrom(containerInfo);
 
   Future<ContainerID> containerId;
-  EXPECT_CALL(*dockerContainerizer1, launch(_, _, _, _, _, _, _, _))
+  EXPECT_CALL(*dockerContainerizer, launch(_, _, _, _, _, _, _, _))
     .WillOnce(DoAll(FutureArg<0>(&containerId),
-                    Invoke(dockerContainerizer1,
+                    Invoke(dockerContainerizer.get(),
                            &MockDockerContainerizer::_launch)));
 
   // Drop the first update from the executor.
@@ -2415,9 +2423,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_SlaveRecoveryTaskContainer)
   // Stop the slave before the status update is received.
   AWAIT_READY(statusUpdateMessage);
 
-  Stop(slave1.get());
-
-  delete dockerContainerizer1;
+  slave.get()->terminate();
 
   Future<Message> reregisterExecutorMessage =
     FUTURE_MESSAGE(Eq(ReregisterExecutorMessage().GetTypeName()), _, _);
@@ -2431,15 +2437,14 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_SlaveRecoveryTaskContainer)
   logger = ContainerLogger::create(flags.container_logger);
   ASSERT_SOME(logger);
 
-  MockDockerContainerizer* dockerContainerizer2 =
-    new MockDockerContainerizer(
-        flags,
-        &fetcher,
-        Owned<ContainerLogger>(logger.get()),
-        docker);
+  dockerContainerizer.reset(new MockDockerContainerizer(
+      flags,
+      &fetcher,
+      Owned<ContainerLogger>(logger.get()),
+      docker));
 
-  Try<PID<Slave> > slave2 = StartSlave(dockerContainerizer2, flags);
-  ASSERT_SOME(slave2);
+  slave = StartSlave(detector.get(), dockerContainerizer.get(), flags);
+  ASSERT_SOME(slave);
 
   // Ensure the executor re-registers.
   AWAIT_READY(reregisterExecutorMessage);
@@ -2461,16 +2466,12 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_SlaveRecoveryTaskContainer)
   ASSERT_TRUE(exists(docker, slaveId, containerId.get()));
 
   Future<containerizer::Termination> termination =
-    dockerContainerizer2->wait(containerId.get());
+    dockerContainerizer->wait(containerId.get());
 
   driver.stop();
   driver.join();
 
   AWAIT_READY(termination);
-
-  Shutdown();
-
-  delete dockerContainerizer2;
 }
 
 
@@ -2489,7 +2490,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_SlaveRecoveryTaskContainer)
 TEST_F(DockerContainerizerTest,
        DISABLED_ROOT_DOCKER_SlaveRecoveryExecutorContainer)
 {
-  Try<PID<Master> > master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -2507,17 +2508,18 @@ TEST_F(DockerContainerizerTest,
 
   ASSERT_SOME(logger);
 
-  // We put the containerizer on the heap so we can more easily
-  // control it's lifetime, i.e., when we invoke the destructor.
-  MockDockerContainerizer* dockerContainerizer1 =
-    new MockDockerContainerizer(
-        flags,
-        &fetcher,
-        Owned<ContainerLogger>(logger.get()),
-        docker);
+  Owned<MockDockerContainerizer> dockerContainerizer(
+      new MockDockerContainerizer(
+          flags,
+          &fetcher,
+          Owned<ContainerLogger>(logger.get()),
+          docker));
+
+  Owned<MasterDetector> detector = master.get()->createDetector();
 
-  Try<PID<Slave> > slave1 = StartSlave(dockerContainerizer1, flags);
-  ASSERT_SOME(slave1);
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), dockerContainerizer.get(), flags);
+  ASSERT_SOME(slave);
 
   // Enable checkpointing for the framework.
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
@@ -2525,7 +2527,7 @@ TEST_F(DockerContainerizerTest,
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, frameworkInfo, master.get(), DEFAULT_CREDENTIAL);
+      &sched, frameworkInfo, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -2574,10 +2576,10 @@ TEST_F(DockerContainerizerTest,
 
   Future<ContainerID> containerId;
   Future<SlaveID> slaveId;
-  EXPECT_CALL(*dockerContainerizer1, launch(_, _, _, _, _, _, _))
+  EXPECT_CALL(*dockerContainerizer, launch(_, _, _, _, _, _, _))
     .WillOnce(DoAll(FutureArg<0>(&containerId),
                     FutureArg<4>(&slaveId),
-                    Invoke(dockerContainerizer1,
+                    Invoke(dockerContainerizer.get(),
                            &MockDockerContainerizer::_launchExecutor)));
 
   // We need to wait until the container's pid has been been
@@ -2609,9 +2611,7 @@ TEST_F(DockerContainerizerTest,
   AWAIT_READY(statusUpdateMessage1);
   AWAIT_READY(statusUpdateMessage2);
 
-  Stop(slave1.get());
-
-  delete dockerContainerizer1;
+  slave.get()->terminate();
 
   Future<Message> reregisterExecutorMessage =
     FUTURE_MESSAGE(Eq(ReregisterExecutorMessage().GetTypeName()), _, _);
@@ -2625,15 +2625,14 @@ TEST_F(DockerContainerizerTest,
   logger = ContainerLogger::create(flags.container_logger);
   ASSERT_SOME(logger);
 
-  MockDockerContainerizer* dockerContainerizer2 =
-    new MockDockerContainerizer(
-        flags,
-        &fetcher,
-        Owned<ContainerLogger>(logger.get()),
-        docker);
+  dockerContainerizer.reset(new MockDockerContainerizer(
+      flags,
+      &fetcher,
+      Owned<ContainerLogger>(logger.get()),
+      docker));
 
-  Try<PID<Slave> > slave2 = StartSlave(dockerContainerizer2, flags);
-  ASSERT_SOME(slave2);
+  slave = StartSlave(detector.get(), dockerContainerizer.get(), flags);
+  ASSERT_SOME(slave);
 
   // Ensure the executor re-registers.
   AWAIT_READY(reregisterExecutorMessage);
@@ -2656,8 +2655,6 @@ TEST_F(DockerContainerizerTest,
 
   driver.stop();
   driver.join();
-
-  delete dockerContainerizer2;
 }
 
 
@@ -2667,7 +2664,7 @@ TEST_F(DockerContainerizerTest,
 // to the mapped container port.
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_NC_PortMapping)
 {
-  Try<PID<Master> > master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -2697,12 +2694,15 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_NC_PortMapping)
   EXPECT_CALL(*mockDocker, stop(_, _, _))
     .WillRepeatedly(Return(Nothing()));
 
-  Try<PID<Slave> > slave = StartSlave(&dockerContainerizer, flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer, flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -2809,8 +2809,6 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_NC_PortMapping)
   driver.join();
 
   AWAIT_READY(termination);
-
-  Shutdown();
 }
 
 
@@ -2820,7 +2818,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_NC_PortMapping)
 // and incorrectly seperates the sandbox directory.
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_LaunchSandboxWithColon)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -2843,12 +2841,15 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_LaunchSandboxWithColon)
       Owned<ContainerLogger>(logger.get()),
       docker);
 
-  Try<PID<Slave> > slave = StartSlave(&dockerContainerizer, flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer, flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -2916,14 +2917,12 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_LaunchSandboxWithColon)
   driver.join();
 
   AWAIT_READY(termination);
-
-  Shutdown();
 }
 
 
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_DestroyWhileFetching)
 {
-  Try<PID<Master> > master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -2960,12 +2959,15 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_DestroyWhileFetching)
     .WillOnce(DoAll(FutureSatisfy(&fetch),
                     Return(promise.future())));
 
-  Try<PID<Slave> > slave = StartSlave(&dockerContainerizer);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -3032,14 +3034,12 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_DestroyWhileFetching)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_DestroyWhilePulling)
 {
-  Try<PID<Master> > master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -3079,12 +3079,15 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_DestroyWhilePulling)
   EXPECT_CALL(*process, pull(_))
     .WillOnce(Return(promise.future()));
 
-  Try<PID<Slave> > slave = StartSlave(&dockerContainerizer);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -3152,8 +3155,6 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_DestroyWhilePulling)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -3162,7 +3163,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_DestroyWhilePulling)
 // is properly killed and cleaned up.
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_ExecutorCleanupWhenLaunchFailed)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -3191,12 +3192,15 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_ExecutorCleanupWhenLaunchFailed)
   MockDockerContainerizer dockerContainerizer(
       (Owned<DockerContainerizerProcess>(process)));
 
-  Try<PID<Slave>> slave = StartSlave(&dockerContainerizer);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -3260,10 +3264,6 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_ExecutorCleanupWhenLaunchFailed)
 
   driver.stop();
   driver.join();
-
-  // We expect the executor to have exited, and if not in Shutdown
-  // the test will fail because of the executor process still running.
-  Shutdown();
 }
 
 
@@ -3271,7 +3271,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_ExecutorCleanupWhenLaunchFailed)
 // update with message the shows the actual error.
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_FetchFailure)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -3300,12 +3300,15 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_FetchFailure)
   MockDockerContainerizer dockerContainerizer(
       (Owned<DockerContainerizerProcess>(process)));
 
-  Try<PID<Slave>> slave = StartSlave(&dockerContainerizer);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -3372,10 +3375,6 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_FetchFailure)
 
   driver.stop();
   driver.join();
-
-  // We expect the executor to have exited, and if not in Shutdown
-  // the test will fail because of the executor process still running.
-  Shutdown();
 }
 
 
@@ -3383,7 +3382,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_FetchFailure)
 // update with message the shows the actual error.
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_DockerPullFailure)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -3412,12 +3411,15 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_DockerPullFailure)
   MockDockerContainerizer dockerContainerizer(
       (Owned<DockerContainerizerProcess>(process)));
 
-  Try<PID<Slave>> slave = StartSlave(&dockerContainerizer);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -3484,10 +3486,6 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_DockerPullFailure)
 
   driver.stop();
   driver.join();
-
-  // We expect the executor to have exited, and if not in Shutdown
-  // the test will fail because of the executor process still running.
-  Shutdown();
 }
 
 
@@ -3495,7 +3493,7 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_DockerPullFailure)
 // future that is in a retry loop should be discarded.
 TEST_F(DockerContainerizerTest, ROOT_DOCKER_DockerInspectDiscard)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   MockDocker* mockDocker =
@@ -3533,12 +3531,15 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_DockerInspectDiscard)
   EXPECT_CALL(*mockDocker, run(_, _, _, _, _, _, _, _, _))
     .WillOnce(Return(Failure("Run failed")));
 
-  Try<PID<Slave>> slave = StartSlave(&dockerContainerizer);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), &dockerContainerizer);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -3606,10 +3607,6 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_DockerInspectDiscard)
 
   driver.stop();
   driver.join();
-
-  // We expect the inspect to have exited, and if not in Shutdown
-  // the test will fail because of the inspect process still running.
-  Shutdown();
 }
 
 } // namespace tests {

http://git-wip-us.apache.org/repos/asf/mesos/blob/95153931/src/tests/containerizer/external_containerizer_test.cpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer/external_containerizer_test.cpp b/src/tests/containerizer/external_containerizer_test.cpp
index 8e1dbe3..5e21163 100644
--- a/src/tests/containerizer/external_containerizer_test.cpp
+++ b/src/tests/containerizer/external_containerizer_test.cpp
@@ -25,6 +25,7 @@
 #include <mesos/resources.hpp>
 
 #include <process/future.hpp>
+#include <process/owned.hpp>
 
 #include <stout/os.hpp>
 #include <stout/path.hpp>
@@ -122,7 +123,7 @@ public:
 // This test has been temporarily disabled due to MESOS-1257.
 TEST_F(ExternalContainerizerTest, DISABLED_Launch)
 {
-  Try<PID<Master> > master = this->StartMaster();
+  Try<Owned<cluster::Master>> master = this->StartMaster();
   ASSERT_SOME(master);
 
   Flags testFlags;
@@ -135,12 +136,15 @@ TEST_F(ExternalContainerizerTest, DISABLED_Launch)
 
   MockExternalContainerizer containerizer(flags);
 
-  Try<PID<Slave> > slave = this->StartSlave(&containerizer, flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    this->StartSlave(detector.get(), &containerizer, flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -253,8 +257,6 @@ TEST_F(ExternalContainerizerTest, DISABLED_Launch)
 
   driver.stop();
   driver.join();
-
-  this->Shutdown();
 }
 
 #endif // MESOS_HAS_PYTHON

http://git-wip-us.apache.org/repos/asf/mesos/blob/95153931/src/tests/containerizer/filesystem_isolator_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer/filesystem_isolator_tests.cpp b/src/tests/containerizer/filesystem_isolator_tests.cpp
index b1f2c98..b3bd5a0 100644
--- a/src/tests/containerizer/filesystem_isolator_tests.cpp
+++ b/src/tests/containerizer/filesystem_isolator_tests.cpp
@@ -295,7 +295,7 @@ TEST_F(LinuxFilesystemIsolatorTest, ROOT_ChangeRootFilesystem)
 // Also runs the command executor with the new root filesystem.
 TEST_F(LinuxFilesystemIsolatorTest, ROOT_ChangeRootFilesystemCommandExecutor)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   slave::Flags flags = CreateSlaveFlags();
@@ -310,12 +310,15 @@ TEST_F(LinuxFilesystemIsolatorTest, ROOT_ChangeRootFilesystemCommandExecutor)
 
   ASSERT_SOME(containerizer);
 
-  Try<PID<Slave>> slave = StartSlave(containerizer.get().get(), flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), containerizer.get().get(), flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-    &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+    &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -366,8 +369,6 @@ TEST_F(LinuxFilesystemIsolatorTest, ROOT_ChangeRootFilesystemCommandExecutor)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -377,7 +378,7 @@ TEST_F(LinuxFilesystemIsolatorTest, ROOT_ChangeRootFilesystemCommandExecutor)
 TEST_F(LinuxFilesystemIsolatorTest,
        ROOT_ChangeRootFilesystemCommandExecutorWithVolumes)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   slave::Flags flags = CreateSlaveFlags();
@@ -392,12 +393,15 @@ TEST_F(LinuxFilesystemIsolatorTest,
 
   ASSERT_SOME(containerizer);
 
-  Try<PID<Slave>> slave = StartSlave(containerizer.get().get(), flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), containerizer.get().get(), flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-    &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+    &sched, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -467,8 +471,6 @@ TEST_F(LinuxFilesystemIsolatorTest,
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -477,7 +479,7 @@ TEST_F(LinuxFilesystemIsolatorTest,
 TEST_F(LinuxFilesystemIsolatorTest,
        ROOT_ChangeRootFilesystemCommandExecutorPersistentVolume)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   slave::Flags flags = CreateSlaveFlags();
@@ -497,7 +499,10 @@ TEST_F(LinuxFilesystemIsolatorTest,
 
   ASSERT_SOME(containerizer);
 
-  Try<PID<Slave>> slave = StartSlave(containerizer.get().get(), flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), containerizer.get().get(), flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
@@ -505,7 +510,7 @@ TEST_F(LinuxFilesystemIsolatorTest,
   frameworkInfo.set_role("role1");
 
   MesosSchedulerDriver driver(
-    &sched, frameworkInfo, master.get(), DEFAULT_CREDENTIAL);
+    &sched, frameworkInfo, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -594,8 +599,6 @@ TEST_F(LinuxFilesystemIsolatorTest,
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -608,7 +611,7 @@ TEST_F(LinuxFilesystemIsolatorTest,
 // test to test the scenario that the executor itself changes rootfs.
 TEST_F(LinuxFilesystemIsolatorTest, ROOT_RecoverOrphanedPersistentVolume)
 {
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   slave::Flags flags = CreateSlaveFlags();
@@ -625,7 +628,10 @@ TEST_F(LinuxFilesystemIsolatorTest, ROOT_RecoverOrphanedPersistentVolume)
 
   ASSERT_SOME(containerizer);
 
-  Try<PID<Slave>> slave = StartSlave(containerizer.get().get(), flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave =
+    StartSlave(detector.get(), containerizer.get().get(), flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
@@ -634,7 +640,7 @@ TEST_F(LinuxFilesystemIsolatorTest, ROOT_RecoverOrphanedPersistentVolume)
   frameworkInfo.set_checkpoint(true);
 
   MesosSchedulerDriver driver(
-    &sched, frameworkInfo, master.get(), DEFAULT_CREDENTIAL);
+    &sched, frameworkInfo, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -701,7 +707,7 @@ TEST_F(LinuxFilesystemIsolatorTest, ROOT_RecoverOrphanedPersistentVolume)
   AWAIT_READY(ack);
 
   // Restart the slave.
-  Stop(slave.get());
+  slave.get()->terminate();
 
   // Wipe the slave meta directory so that the slave will treat the
   // above running task as an orphan.
@@ -712,7 +718,7 @@ TEST_F(LinuxFilesystemIsolatorTest, ROOT_RecoverOrphanedPersistentVolume)
       flags,
       {{"test_image", path::join(os::getcwd(), "test_image")}});
 
-  slave = StartSlave(containerizer.get().get(), flags);
+  slave = StartSlave(detector.get(), containerizer.get().get(), flags);
   ASSERT_SOME(slave);
 
   // Wait until slave recovery is complete.
@@ -740,8 +746,6 @@ TEST_F(LinuxFilesystemIsolatorTest, ROOT_RecoverOrphanedPersistentVolume)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 
@@ -1455,7 +1459,7 @@ TEST_F(LinuxFilesystemIsolatorTest, ROOT_VolumeUsageExceedsSandboxQuota)
   FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
   frameworkInfo.set_role("role1");
 
-  Try<PID<Master>> master = StartMaster();
+  Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
 
   slave::Flags flags = CreateSlaveFlags();
@@ -1467,12 +1471,14 @@ TEST_F(LinuxFilesystemIsolatorTest, ROOT_VolumeUsageExceedsSandboxQuota)
   flags.enforce_container_disk_quota = true;
   flags.resources = "cpus:2;mem:128;disk(role1):128";
 
-  Try<PID<Slave>> slave = StartSlave(flags);
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), flags);
   ASSERT_SOME(slave);
 
   MockScheduler sched;
   MesosSchedulerDriver driver(
-      &sched, frameworkInfo, master.get(), DEFAULT_CREDENTIAL);
+      &sched, frameworkInfo, master.get()->pid, DEFAULT_CREDENTIAL);
 
   Future<FrameworkID> frameworkId;
   EXPECT_CALL(sched, registered(&driver, _, _))
@@ -1530,8 +1536,6 @@ TEST_F(LinuxFilesystemIsolatorTest, ROOT_VolumeUsageExceedsSandboxQuota)
 
   driver.stop();
   driver.join();
-
-  Shutdown();
 }
 
 #endif // __linux__