You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by jo...@apache.org on 2017/05/26 01:41:03 UTC

[12/16] mesos git commit: Addressed a TODO about checkpointing in tests.

Addressed a TODO about checkpointing in tests.

Checkpointing only plays a role in tests when the containerizer
is destroyed and subsequently recovered.  This commit updates a
couple of test files to the new containerizer interface and
also turns checkpointing _off_ in tests which do not perform any
containerizer recovery.

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


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

Branch: refs/heads/master
Commit: b194d5a62e44711d0147ba5a65d8f0e7cd6c367d
Parents: 012e6a2
Author: Joseph Wu <jo...@apache.org>
Authored: Tue May 2 16:51:43 2017 -0700
Committer: Joseph Wu <jo...@apache.org>
Committed: Thu May 25 18:37:07 2017 -0700

----------------------------------------------------------------------
 .../containerizer/io_switchboard_tests.cpp      |  45 +-
 .../containerizer/mesos_containerizer_tests.cpp | 247 ++++------
 .../nested_mesos_containerizer_tests.cpp        | 483 +++++++++----------
 .../volume_sandbox_path_isolator_tests.cpp      |  30 +-
 4 files changed, 361 insertions(+), 444 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/b194d5a6/src/tests/containerizer/io_switchboard_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer/io_switchboard_tests.cpp b/src/tests/containerizer/io_switchboard_tests.cpp
index f5c2157..777f76a 100644
--- a/src/tests/containerizer/io_switchboard_tests.cpp
+++ b/src/tests/containerizer/io_switchboard_tests.cpp
@@ -711,7 +711,7 @@ TEST_F(IOSwitchboardTest, ContainerAttach)
   flags.launcher = "posix";
   flags.isolation = "posix/cpu";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -744,13 +744,9 @@ TEST_F(IOSwitchboardTest, ContainerAttach)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      executorInfo,
-      directory.get(),
-      None(),
-      SlaveID(),
+      createContainerConfig(None(), executorInfo, directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -777,7 +773,7 @@ TEST_F(IOSwitchboardTest, OutputRedirectionWithTTY)
   flags.launcher = "posix";
   flags.isolation = "posix/cpu";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -813,13 +809,9 @@ TEST_F(IOSwitchboardTest, OutputRedirectionWithTTY)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      executorInfo,
-      directory.get(),
-      None(),
-      SlaveID(),
+      createContainerConfig(None(), executorInfo, directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -842,7 +834,7 @@ TEST_F(IOSwitchboardTest, KillSwitchboardContainerDestroyed)
   flags.launcher = "posix";
   flags.isolation = "posix/cpu";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -871,13 +863,9 @@ TEST_F(IOSwitchboardTest, KillSwitchboardContainerDestroyed)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      executorInfo,
-      directory.get(),
-      None(),
-      SlaveID(),
+      createContainerConfig(None(), executorInfo, directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -887,11 +875,12 @@ TEST_F(IOSwitchboardTest, KillSwitchboardContainerDestroyed)
 
   launch = containerizer->launch(
       childContainerId,
-      createCommandInfo("sleep 1000"),
-      None(),
-      None(),
-      state.id,
-      mesos::slave::ContainerClass::DEBUG);
+      createContainerConfig(
+          createCommandInfo("sleep 1000"),
+          None(),
+          mesos::slave::ContainerClass::DEBUG),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -937,7 +926,7 @@ TEST_F(IOSwitchboardTest, DISABLED_RecoverThenKillSwitchboardContainerDestroyed)
   flags.launcher = "posix";
   flags.isolation = "posix/cpu";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
 
@@ -1058,7 +1047,7 @@ TEST_F(IOSwitchboardTest, ContainerAttachAfterSlaveRestart)
   flags.launcher = "posix";
   flags.isolation = "posix/cpu";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/b194d5a6/src/tests/containerizer/mesos_containerizer_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer/mesos_containerizer_tests.cpp b/src/tests/containerizer/mesos_containerizer_tests.cpp
index 13e0f7e..d3a2bd7 100644
--- a/src/tests/containerizer/mesos_containerizer_tests.cpp
+++ b/src/tests/containerizer/mesos_containerizer_tests.cpp
@@ -106,7 +106,7 @@ TEST_F(MesosContainerizerTest, Launch)
   flags.launcher = "posix";
   flags.isolation = "posix/cpu";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -130,13 +130,12 @@ TEST_F(MesosContainerizerTest, Launch)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      createExecutorInfo("executor", "exit 42", "cpus:1"),
-      directory.get(),
-      None(),
-      SlaveID(),
+      createContainerConfig(
+          None(),
+          createExecutorInfo("executor", "exit 42", "cpus:1"),
+          directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -155,7 +154,7 @@ TEST_F(MesosContainerizerTest, Destroy)
   flags.launcher = "posix";
   flags.isolation = "posix/cpu";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -179,13 +178,12 @@ TEST_F(MesosContainerizerTest, Destroy)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      createExecutorInfo("executor", "sleep 1000", "cpus:1"),
-      directory.get(),
-      None(),
-      SlaveID(),
+      createContainerConfig(
+          None(),
+          createExecutorInfo("executor", "sleep 1000", "cpus:1"),
+          directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -208,7 +206,7 @@ TEST_F(MesosContainerizerTest, StatusWithContainerID)
   flags.launcher = "posix";
   flags.isolation = "posix/cpu";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -232,13 +230,12 @@ TEST_F(MesosContainerizerTest, StatusWithContainerID)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      createExecutorInfo("executor", "sleep 1000", "cpus:1"),
-      directory.get(),
-      None(),
-      SlaveID(),
+      createContainerConfig(
+          None(),
+          createExecutorInfo("executor", "sleep 1000", "cpus:1"),
+          directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -264,7 +261,6 @@ public:
   // Construct a MesosContainerizer with MockIsolator(s) which return
   // the provided ContainerLaunchInfo for Isolator::prepare.
   Try<MesosContainerizer*> createContainerizer(
-      Fetcher* fetcher,
       const vector<Option<ContainerLaunchInfo>>& launchInfos)
   {
     vector<Owned<Isolator>> isolators;
@@ -281,6 +277,8 @@ public:
     slave::Flags flags = CreateSlaveFlags();
     flags.launcher = "posix";
 
+    fetcher.reset(new Fetcher(flags));
+
     Try<Launcher*> launcher_ = SubprocessLauncher::create(flags);
     if (launcher_.isError()) {
       return Error(launcher_.error());
@@ -296,37 +294,33 @@ public:
     return MesosContainerizer::create(
         flags,
         true,
-        fetcher,
+        fetcher.get(),
         std::move(launcher),
         provisioner->share(),
         isolators);
   }
 
   Try<MesosContainerizer*> createContainerizer(
-      Fetcher* fetcher,
       const Option<ContainerLaunchInfo>& launchInfo)
   {
     vector<Option<ContainerLaunchInfo>> launchInfos = {launchInfo};
-    return createContainerizer(fetcher, launchInfos);
+    return createContainerizer(launchInfos);
   }
+
+private:
+  Owned<Fetcher> fetcher;
 };
 
 
 // The isolator has a prepare command that succeeds.
 TEST_F(MesosContainerizerIsolatorPreparationTest, ScriptSucceeds)
 {
-  string directory = os::getcwd(); // We're inside a temporary sandbox.
-  string file = path::join(directory, "child.script.executed");
-
-  Fetcher fetcher;
+  string file = path::join(sandbox.get(), "child.script.executed");
 
   ContainerLaunchInfo launchInfo;
   launchInfo.add_pre_exec_commands()->set_value("touch " + file);
 
-  Try<MesosContainerizer*> create = createContainerizer(
-      &fetcher,
-      launchInfo);
-
+  Try<MesosContainerizer*> create = createContainerizer(launchInfo);
   ASSERT_SOME(create);
 
   Owned<MesosContainerizer> containerizer(create.get());
@@ -336,13 +330,12 @@ TEST_F(MesosContainerizerIsolatorPreparationTest, ScriptSucceeds)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      createExecutorInfo("executor", "exit 0"),
-      directory,
-      None(),
-      SlaveID(),
+      createContainerConfig(
+          None(),
+          createExecutorInfo("executor", "exit 0"),
+          sandbox.get()),
       map<string, string>(),
-      false);
+      None());
 
   // Wait until the launch completes.
   AWAIT_READY(launch);
@@ -368,19 +361,13 @@ TEST_F(MesosContainerizerIsolatorPreparationTest, ScriptSucceeds)
 // The isolator has a prepare command that fails.
 TEST_F(MesosContainerizerIsolatorPreparationTest, ScriptFails)
 {
-  string directory = os::getcwd(); // We're inside a temporary sandbox.
-  string file = path::join(directory, "child.script.executed");
-
-  Fetcher fetcher;
+  string file = path::join(sandbox.get(), "child.script.executed");
 
   ContainerLaunchInfo launchInfo;
   launchInfo.add_pre_exec_commands()->set_value(
       "touch " + file + " && exit 1");
 
-  Try<MesosContainerizer*> create = createContainerizer(
-      &fetcher,
-      launchInfo);
-
+  Try<MesosContainerizer*> create = createContainerizer(launchInfo);
   ASSERT_SOME(create);
 
   Owned<MesosContainerizer> containerizer(create.get());
@@ -390,13 +377,12 @@ TEST_F(MesosContainerizerIsolatorPreparationTest, ScriptFails)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      createExecutorInfo("executor", "exit 0"),
-      directory,
-      None(),
-      SlaveID(),
+      createContainerConfig(
+          None(),
+          createExecutorInfo("executor", "exit 0"),
+          sandbox.get()),
       map<string, string>(),
-      false);
+      None());
 
   // Wait until the launch completes.
   AWAIT_READY(launch);
@@ -424,9 +410,8 @@ TEST_F(MesosContainerizerIsolatorPreparationTest, ScriptFails)
 // launch should fail from the failing prepare command.
 TEST_F(MesosContainerizerIsolatorPreparationTest, MultipleScripts)
 {
-  string directory = os::getcwd(); // We're inside a temporary sandbox.
-  string file1 = path::join(directory, "child.script.executed.1");
-  string file2 = path::join(directory, "child.script.executed.2");
+  string file1 = path::join(sandbox.get(), "child.script.executed.1");
+  string file2 = path::join(sandbox.get(), "child.script.executed.2");
 
   vector<Option<ContainerLaunchInfo>> launchInfos;
 
@@ -441,12 +426,7 @@ TEST_F(MesosContainerizerIsolatorPreparationTest, MultipleScripts)
   launch2.add_pre_exec_commands()->set_value("touch " + file2 + " && exit 1");
   launchInfos.push_back(launch2);
 
-  Fetcher fetcher;
-
-  Try<MesosContainerizer*> create = createContainerizer(
-      &fetcher,
-      launchInfos);
-
+  Try<MesosContainerizer*> create = createContainerizer(launchInfos);
   ASSERT_SOME(create);
 
   Owned<MesosContainerizer> containerizer(create.get());
@@ -456,13 +436,12 @@ TEST_F(MesosContainerizerIsolatorPreparationTest, MultipleScripts)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      createExecutorInfo("executor", "exit 0"),
-      directory,
-      None(),
-      SlaveID(),
+      createContainerConfig(
+          None(),
+          createExecutorInfo("executor", "exit 0"),
+          sandbox.get()),
       map<string, string>(),
-      false);
+      None());
 
   // Wait until the launch completes.
   AWAIT_READY(launch);
@@ -496,10 +475,7 @@ TEST_F(MesosContainerizerIsolatorPreparationTest, ExecutorEnvironmentVariable)
   net::IP ip = net::IP(INADDR_LOOPBACK);
   os::setenv("LIBPROCESS_IP", stringify(ip));
 
-  string directory = os::getcwd(); // We're inside a temporary sandbox.
-  string file = path::join(directory, "child.script.executed");
-
-  Fetcher fetcher;
+  string file = path::join(sandbox.get(), "child.script.executed");
 
   ContainerLaunchInfo launchInfo;
 
@@ -509,10 +485,7 @@ TEST_F(MesosContainerizerIsolatorPreparationTest, ExecutorEnvironmentVariable)
   variable->set_name("TEST_ENVIRONMENT");
   variable->set_value(file);
 
-  Try<MesosContainerizer*> create = createContainerizer(
-      &fetcher,
-      launchInfo);
-
+  Try<MesosContainerizer*> create = createContainerizer(launchInfo);
   ASSERT_SOME(create);
 
   Owned<MesosContainerizer> containerizer(create.get());
@@ -534,7 +507,7 @@ TEST_F(MesosContainerizerIsolatorPreparationTest, ExecutorEnvironmentVariable)
   map<string, string> environment = executorEnvironment(
       flags,
       executorInfo,
-      directory,
+      sandbox.get(),
       slaveId,
       PID<Slave>(),
       None(),
@@ -542,13 +515,9 @@ TEST_F(MesosContainerizerIsolatorPreparationTest, ExecutorEnvironmentVariable)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      executorInfo,
-      directory,
-      None(),
-      slaveId,
+      createContainerConfig(None(), executorInfo, sandbox.get()),
       environment,
-      false);
+      None());
 
   // Wait until the launch completes.
   AWAIT_READY(launch);
@@ -583,11 +552,9 @@ class MesosContainerizerExecuteTest : public MesosTest {};
 
 TEST_F(MesosContainerizerExecuteTest, IoRedirection)
 {
-  string directory = os::getcwd(); // We're inside a temporary sandbox.
-
   slave::Flags flags = CreateSlaveFlags();
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   // Use local=false so std{err,out} are redirected to files.
   Try<MesosContainerizer*> create = MesosContainerizer::create(
@@ -609,13 +576,12 @@ TEST_F(MesosContainerizerExecuteTest, IoRedirection)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      createExecutorInfo("executor", command),
-      directory,
-      None(),
-      SlaveID(),
+      createContainerConfig(
+          None(),
+          createExecutorInfo("executor", command),
+          sandbox.get()),
       map<string, string>(),
-      false);
+      None());
 
   // Wait for the launch to complete.
   AWAIT_READY(launch);
@@ -634,11 +600,11 @@ TEST_F(MesosContainerizerExecuteTest, IoRedirection)
   // Check that std{err, out} was redirected.
   // NOTE: Fetcher uses GLOG, which outputs extra information to
   // stderr.
-  Try<string> stderr = os::read(path::join(directory, "stderr"));
+  Try<string> stderr = os::read(path::join(sandbox.get(), "stderr"));
   ASSERT_SOME(stderr);
   EXPECT_TRUE(strings::contains(stderr.get(), errMsg));
 
-  EXPECT_SOME_EQ(outMsg + "\n", os::read(path::join(directory, "stdout")));
+  EXPECT_SOME_EQ(outMsg + "\n", os::read(path::join(sandbox.get(), "stdout")));
 }
 
 
@@ -646,12 +612,10 @@ TEST_F(MesosContainerizerExecuteTest, IoRedirection)
 // are owned by the task user.
 TEST_F(MesosContainerizerExecuteTest, ROOT_SandboxFileOwnership)
 {
-  string sandbox = os::getcwd(); // We're inside a temporary sandbox.
-
   slave::Flags flags;
   flags.launcher_dir = getLauncherDir();
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> _containerizer =
     MesosContainerizer::create(flags, false, &fetcher);
@@ -669,13 +633,9 @@ TEST_F(MesosContainerizerExecuteTest, ROOT_SandboxFileOwnership)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      executor,
-      sandbox,
-      None(),
-      SlaveID(),
+      createContainerConfig(None(), executor, sandbox.get()),
       map<string, string>(),
-      false);
+      None());
 
   // Wait for the launch to complete.
   AWAIT_READY(launch);
@@ -685,12 +645,12 @@ TEST_F(MesosContainerizerExecuteTest, ROOT_SandboxFileOwnership)
 
   // Verify that stdout is owned by the task user.
   struct stat s;
-  string stdoutPath = path::join(sandbox, "stdout");
+  string stdoutPath = path::join(sandbox.get(), "stdout");
   EXPECT_EQ(0, ::stat(stdoutPath.c_str(), &s));
   EXPECT_EQ(uid.get(), s.st_uid);
 
   // Verify that stderr is owned by the task user.
-  string stderrPath = path::join(sandbox, "stderr");
+  string stderrPath = path::join(sandbox.get(), "stderr");
   EXPECT_EQ(0, ::stat(stderrPath.c_str(), &s));
   EXPECT_EQ(uid.get(), s.st_uid);
 
@@ -720,7 +680,7 @@ TEST_F(MesosContainerizerDestroyTest, DestroyWhileFetching)
 
   Owned<Launcher> launcher(launcher_.get());
 
-  MockFetcherProcess* mockFetcherProcess = new MockFetcherProcess();
+  MockFetcherProcess* mockFetcherProcess = new MockFetcherProcess(flags);
   Owned<FetcherProcess> fetcherProcess(mockFetcherProcess);
   Fetcher fetcher(fetcherProcess);
 
@@ -743,7 +703,7 @@ TEST_F(MesosContainerizerDestroyTest, DestroyWhileFetching)
   Promise<Nothing> promise;
 
   // Letting exec hang to simulate a long fetch.
-  EXPECT_CALL(*mockFetcherProcess, _fetch(_, _, _, _, _, _))
+  EXPECT_CALL(*mockFetcherProcess, _fetch(_, _, _, _, _))
     .WillOnce(DoAll(FutureSatisfy(&fetch),
                     Return(promise.future())));
 
@@ -756,13 +716,12 @@ TEST_F(MesosContainerizerDestroyTest, DestroyWhileFetching)
 
   containerizer->launch(
       containerId,
-      taskInfo,
-      createExecutorInfo("executor", "exit 0"),
-      os::getcwd(),
-      None(),
-      SlaveID(),
+      createContainerConfig(
+          taskInfo,
+          createExecutorInfo("executor", "exit 0"),
+          sandbox.get()),
       map<string, string>(),
-      false);
+      None());
 
   Future<Option<ContainerTermination>> wait =
     containerizer->wait(containerId);
@@ -799,7 +758,7 @@ TEST_F(MesosContainerizerDestroyTest, DestroyWhilePreparing)
     .WillOnce(DoAll(FutureSatisfy(&prepare),
                     Return(promise.future())));
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<Owned<Provisioner>> provisioner = Provisioner::create(flags);
   ASSERT_SOME(provisioner);
@@ -825,13 +784,12 @@ TEST_F(MesosContainerizerDestroyTest, DestroyWhilePreparing)
 
   containerizer->launch(
       containerId,
-      taskInfo,
-      createExecutorInfo("executor", "exit 0"),
-      os::getcwd(),
-      None(),
-      SlaveID(),
+      createContainerConfig(
+          taskInfo,
+          createExecutorInfo("executor", "exit 0"),
+          sandbox.get()),
       map<string, string>(),
-      false);
+      None());
 
   Future<Option<ContainerTermination>> wait =
     containerizer->wait(containerId);
@@ -864,7 +822,7 @@ TEST_F(MesosContainerizerDestroyTest, DestroyUnknownContainer)
 {
   slave::Flags flags = CreateSlaveFlags();
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -925,7 +883,7 @@ TEST_F(MesosContainerizerProvisionerTest, ProvisionFailed)
   EXPECT_CALL(*provisioner, destroy(_))
     .WillOnce(Return(true));
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> _containerizer = MesosContainerizer::create(
       flags,
@@ -963,13 +921,9 @@ TEST_F(MesosContainerizerProvisionerTest, ProvisionFailed)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      taskInfo,
-      executorInfo,
-      os::getcwd(),
-      None(),
-      SlaveID(),
+      createContainerConfig(taskInfo, executorInfo, sandbox.get()),
       map<string, string>(),
-      false);
+      None());
 
   AWAIT_READY(provision);
 
@@ -1013,7 +967,7 @@ TEST_F(MesosContainerizerProvisionerTest, DestroyWhileProvisioning)
   EXPECT_CALL(*provisioner, destroy(_))
     .WillOnce(Return(true));
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> _containerizer = MesosContainerizer::create(
       flags,
@@ -1051,13 +1005,9 @@ TEST_F(MesosContainerizerProvisionerTest, DestroyWhileProvisioning)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      taskInfo,
-      executorInfo,
-      os::getcwd(),
-      None(),
-      SlaveID(),
+      createContainerConfig(taskInfo, executorInfo, sandbox.get()),
       map<string, string>(),
-      false);
+      None());
 
   Future<Option<ContainerTermination>> wait = containerizer->wait(containerId);
 
@@ -1108,7 +1058,7 @@ TEST_F(MesosContainerizerProvisionerTest, IsolatorCleanupBeforePrepare)
   EXPECT_CALL(*isolator, cleanup(_))
     .Times(0);
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> _containerizer = MesosContainerizer::create(
       flags,
@@ -1146,13 +1096,9 @@ TEST_F(MesosContainerizerProvisionerTest, IsolatorCleanupBeforePrepare)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      taskInfo,
-      executorInfo,
-      os::getcwd(),
-      None(),
-      SlaveID(),
+      createContainerConfig(taskInfo, executorInfo, sandbox.get()),
       map<string, string>(),
-      false);
+      None());
 
   Future<Option<ContainerTermination>> wait = containerizer->wait(containerId);
 
@@ -1198,7 +1144,7 @@ TEST_F(MesosContainerizerDestroyTest, LauncherDestroyFailure)
 
   Owned<Launcher> launcher(testLauncher);
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<Owned<Provisioner>> provisioner = Provisioner::create(flags);
   ASSERT_SOME(provisioner);
@@ -1228,13 +1174,12 @@ TEST_F(MesosContainerizerDestroyTest, LauncherDestroyFailure)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      taskInfo,
-      createExecutorInfo("executor", "sleep 1000"),
-      os::getcwd(),
-      None(),
-      SlaveID(),
+      createContainerConfig(
+          taskInfo,
+          createExecutorInfo("executor", "sleep 1000"),
+          sandbox.get()),
       map<string, string>(),
-      false);
+      None());
 
   AWAIT_READY(launch);
 
@@ -1271,7 +1216,7 @@ class MesosContainerizerRecoverTest : public MesosTest {};
 TEST_F(MesosContainerizerRecoverTest, SkipRecoverNonMesosContainers)
 {
   slave::Flags flags = CreateSlaveFlags();
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -1371,7 +1316,7 @@ TEST_F(MesosContainerizerWaitTest, WaitUnknownContainer)
 {
   slave::Flags flags = CreateSlaveFlags();
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,

http://git-wip-us.apache.org/repos/asf/mesos/blob/b194d5a6/src/tests/containerizer/nested_mesos_containerizer_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer/nested_mesos_containerizer_tests.cpp b/src/tests/containerizer/nested_mesos_containerizer_tests.cpp
index d47e9ae..e466434 100644
--- a/src/tests/containerizer/nested_mesos_containerizer_tests.cpp
+++ b/src/tests/containerizer/nested_mesos_containerizer_tests.cpp
@@ -173,7 +173,7 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_LaunchNested)
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -197,13 +197,12 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_LaunchNested)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      createExecutorInfo("executor", "sleep 1000", "cpus:1"),
-      directory.get(),
-      None(),
-      state.id,
+      createContainerConfig(
+          None(),
+          createExecutorInfo("executor", "sleep 1000", "cpus:1"),
+          directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -214,10 +213,9 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_LaunchNested)
 
   launch = containerizer->launch(
       nestedContainerId,
-      createCommandInfo("exit 42"),
-      None(),
-      None(),
-      state.id);
+      createContainerConfig(createCommandInfo("exit 42")),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -249,7 +247,7 @@ TEST_F(NestedMesosContainerizerTest,
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -282,13 +280,14 @@ TEST_F(NestedMesosContainerizerTest,
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      executor,
-      directory.get(),
-      None(),
-      state.id,
+      createContainerConfig(None(), executor, directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      slave::paths::getForkedPidPath(
+          slave::paths::getMetaRootDir(flags.work_dir),
+          state.id,
+          executor.framework_id(),
+          executor.executor_id(),
+          containerId));
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -307,11 +306,12 @@ TEST_F(NestedMesosContainerizerTest,
 
     Future<bool> launchNested = containerizer->launch(
         nestedContainerId,
-        createCommandInfo("exit $" + envKey),
-        None(),
-        None(),
-        state.id,
-        ContainerClass::DEBUG);
+        createContainerConfig(
+            createCommandInfo("exit $" + envKey),
+            None(),
+            ContainerClass::DEBUG),
+        map<string, string>(),
+        None());
 
     AWAIT_ASSERT_TRUE(launchNested);
 
@@ -340,11 +340,12 @@ TEST_F(NestedMesosContainerizerTest,
 
     Future<bool> launchNested = containerizer->launch(
         nestedContainerId,
-        nestedCommand,
-        None(),
-        None(),
-        state.id,
-        ContainerClass::DEBUG);
+        createContainerConfig(
+            nestedCommand,
+            None(),
+            ContainerClass::DEBUG),
+        map<string, string>(),
+        None());
 
     AWAIT_ASSERT_TRUE(launchNested);
 
@@ -390,11 +391,12 @@ TEST_F(NestedMesosContainerizerTest,
 
     Future<bool> launchNested = containerizer->launch(
         nestedContainerId,
-        createCommandInfo("exit $" + envKey),
-        None(),
-        None(),
-        state.id,
-        ContainerClass::DEBUG);
+        createContainerConfig(
+            createCommandInfo("exit $" + envKey),
+            None(),
+            ContainerClass::DEBUG),
+        map<string, string>(),
+        None());
 
     AWAIT_ASSERT_TRUE(launchNested);
 
@@ -428,7 +430,7 @@ TEST_F(NestedMesosContainerizerTest,
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -472,13 +474,12 @@ TEST_F(NestedMesosContainerizerTest,
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      executor,
-      directory.get(),
-      None(),
-      state.id,
+      createContainerConfig(
+          None(),
+          executor,
+          directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -509,11 +510,12 @@ TEST_F(NestedMesosContainerizerTest,
 
     Future<bool> launchNested = containerizer->launch(
         nestedContainerId,
-        nestedCommand,
-        None(),
-        None(),
-        state.id,
-        ContainerClass::DEBUG);
+        createContainerConfig(
+            nestedCommand,
+            None(),
+            ContainerClass::DEBUG),
+        map<string, string>(),
+        None());
 
     AWAIT_ASSERT_TRUE(launchNested);
 
@@ -549,7 +551,7 @@ TEST_F(NestedMesosContainerizerTest,
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -596,13 +598,17 @@ TEST_F(NestedMesosContainerizerTest,
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      executor,
-      directory.get(),
-      None(),
-      state.id,
+      createContainerConfig(
+          None(),
+          executor,
+          directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      slave::paths::getForkedPidPath(
+          slave::paths::getMetaRootDir(flags.work_dir),
+          state.id,
+          executor.framework_id(),
+          executor.executor_id(),
+          containerId));
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -626,11 +632,12 @@ TEST_F(NestedMesosContainerizerTest,
 
     Future<bool> launchNested = containerizer->launch(
         nestedContainerId,
-        createCommandInfo("ls " + filename),
-        None(),
-        None(),
-        state.id,
-        ContainerClass::DEBUG);
+        createContainerConfig(
+            createCommandInfo("ls " + filename),
+            None(),
+            ContainerClass::DEBUG),
+        map<string, string>(),
+        None());
 
     AWAIT_ASSERT_TRUE(launchNested);
 
@@ -675,11 +682,12 @@ TEST_F(NestedMesosContainerizerTest,
 
     Future<bool> launchNested = containerizer->launch(
         nestedContainerId,
-        createCommandInfo("ls " + filename),
-        None(),
-        None(),
-        state.id,
-        ContainerClass::DEBUG);
+        createContainerConfig(
+            createCommandInfo("ls " + filename),
+            None(),
+            ContainerClass::DEBUG),
+        map<string, string>(),
+        None());
 
     AWAIT_ASSERT_TRUE(launchNested);
 
@@ -711,7 +719,7 @@ TEST_F(NestedMesosContainerizerTest,
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -735,13 +743,12 @@ TEST_F(NestedMesosContainerizerTest,
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      createExecutorInfo("executor", "sleep 1000", "cpus:1"),
-      directory.get(),
-      None(),
-      state.id,
+      createContainerConfig(
+          None(),
+          createExecutorInfo("executor", "sleep 1000", "cpus:1"),
+          directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -764,14 +771,13 @@ TEST_F(NestedMesosContainerizerTest,
   // 6) `ps`
   launch = containerizer->launch(
       nestedContainerId,
-      createCommandInfo(
+      createContainerConfig(createCommandInfo(
           "PS_LINES=`ps | wc -l`;"
           "if [ ${PS_LINES} -ne 6 ]; then"
           "  exit ${PS_LINES};"
-          "fi;"),
-      None(),
-      None(),
-      state.id);
+          "fi;")),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -790,15 +796,16 @@ TEST_F(NestedMesosContainerizerTest,
   // We expect to see much more than 6 lines of output from `ps`.
   launch = containerizer->launch(
       nestedContainerId,
-      createCommandInfo(
-          "PS_LINES=`ps | wc -l`;"
-          "if [ ${PS_LINES} -le 6 ]; then"
-          "  exit ${PS_LINES};"
-          "fi;"),
-      None(),
-      None(),
-      state.id,
-      ContainerClass::DEBUG);
+      createContainerConfig(
+          createCommandInfo(
+              "PS_LINES=`ps | wc -l`;"
+              "if [ ${PS_LINES} -le 6 ]; then"
+              "  exit ${PS_LINES};"
+              "fi;"),
+          None(),
+          ContainerClass::DEBUG),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -832,7 +839,7 @@ TEST_F(NestedMesosContainerizerTest,
 
   Owned<MasterDetector> detector = master.get()->createDetector();
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> _containerizer =
     MesosContainerizer::create(flags, true, &fetcher);
@@ -914,15 +921,16 @@ TEST_F(NestedMesosContainerizerTest,
   // image (but not on the host filesystem).
   Future<bool> launch = containerizer->launch(
       nestedContainerId,
-      createCommandInfo(
-          "LINES=`ls -la /etc/alpine-release | wc -l`;"
-          "if [ ${LINES} -ne 1 ]; then"
-          "  exit 1;"
-          "fi;"),
-      None(),
-      None(),
-      statusRunning->slave_id(),
-      ContainerClass::DEBUG);
+      createContainerConfig(
+          createCommandInfo(
+              "LINES=`ls -la /etc/alpine-release | wc -l`;"
+              "if [ ${LINES} -ne 1 ]; then"
+              "  exit 1;"
+              "fi;"),
+          None(),
+          ContainerClass::DEBUG),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -946,7 +954,7 @@ TEST_F(NestedMesosContainerizerTest,
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -975,13 +983,14 @@ TEST_F(NestedMesosContainerizerTest,
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      executor,
-      directory.get(),
-      None(),
-      SlaveID(),
+      createContainerConfig(None(), executor, directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      slave::paths::getForkedPidPath(
+          slave::paths::getMetaRootDir(flags.work_dir),
+          state.id,
+          executor.framework_id(),
+          executor.executor_id(),
+          containerId));
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -998,11 +1007,12 @@ TEST_F(NestedMesosContainerizerTest,
 
   launch = containerizer->launch(
       nestedContainerId,
-      createCommandInfo("sleep 1000"),
-      None(),
-      None(),
-      state.id,
-      ContainerClass::DEBUG);
+      createContainerConfig(
+          createCommandInfo("sleep 1000"),
+          None(),
+          ContainerClass::DEBUG),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -1062,7 +1072,7 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_DestroyNested)
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -1086,13 +1096,12 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_DestroyNested)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      createExecutorInfo("executor", "sleep 1000", "cpus:1"),
-      directory.get(),
-      None(),
-      state.id,
+      createContainerConfig(
+          None(),
+          createExecutorInfo("executor", "sleep 1000", "cpus:1"),
+          directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -1103,10 +1112,9 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_DestroyNested)
 
   launch = containerizer->launch(
       nestedContainerId,
-      createCommandInfo("sleep 1000"),
-      None(),
-      None(),
-      state.id);
+      createContainerConfig(createCommandInfo("sleep 1000")),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -1141,7 +1149,7 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_DestroyParent)
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -1165,13 +1173,12 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_DestroyParent)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      createExecutorInfo("executor", "sleep 1000", "cpus:1"),
-      directory.get(),
-      None(),
-      state.id,
+      createContainerConfig(
+          None(),
+          createExecutorInfo("executor", "sleep 1000", "cpus:1"),
+          directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -1182,10 +1189,9 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_DestroyParent)
 
   launch = containerizer->launch(
       nestedContainerId,
-      createCommandInfo("sleep 1000"),
-      None(),
-      None(),
-      state.id);
+      createContainerConfig(createCommandInfo("sleep 1000")),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -1218,7 +1224,7 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_ParentExit)
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -1260,13 +1266,9 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_ParentExit)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      executor,
-      directory.get(),
-      None(),
-      state.id,
+      createContainerConfig(None(), executor, directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      None());
 
   close(pipes[0]); // We're never going to read.
 
@@ -1279,10 +1281,9 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_ParentExit)
 
   launch = containerizer->launch(
       nestedContainerId,
-      createCommandInfo("sleep 1000"),
-      None(),
-      None(),
-      state.id);
+      createContainerConfig(createCommandInfo("sleep 1000")),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -1317,7 +1318,7 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_ParentSigterm)
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -1361,13 +1362,9 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_ParentSigterm)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      executor,
-      directory.get(),
-      None(),
-      state.id,
+      createContainerConfig(None(), executor, directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -1380,10 +1377,9 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_ParentSigterm)
 
   launch = containerizer->launch(
       nestedContainerId,
-      createCommandInfo("sleep 1000"),
-      None(),
-      None(),
-      state.id);
+      createContainerConfig(createCommandInfo("sleep 1000")),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -1427,7 +1423,7 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_RecoverNested)
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -1456,13 +1452,14 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_RecoverNested)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      executor,
-      directory.get(),
-      None(),
-      SlaveID(),
+      createContainerConfig(None(), executor, directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      slave::paths::getForkedPidPath(
+          slave::paths::getMetaRootDir(flags.work_dir),
+          state.id,
+          executor.framework_id(),
+          executor.executor_id(),
+          containerId));
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -1479,10 +1476,9 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_RecoverNested)
 
   launch = containerizer->launch(
       nestedContainerId,
-      createCommandInfo("sleep 1000"),
-      None(),
-      None(),
-      state.id);
+      createContainerConfig(createCommandInfo("sleep 1000")),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -1557,7 +1553,7 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_RecoverLauncherOrphans)
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -1608,7 +1604,7 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_RecoverNestedLauncherOrphans)
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -1637,13 +1633,14 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_RecoverNestedLauncherOrphans)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      executor,
-      directory.get(),
-      None(),
-      SlaveID(),
+      createContainerConfig(None(), executor, directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      slave::paths::getForkedPidPath(
+          slave::paths::getMetaRootDir(flags.work_dir),
+          state.id,
+          executor.framework_id(),
+          executor.executor_id(),
+          containerId));
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -1730,7 +1727,7 @@ TEST_F(NestedMesosContainerizerTest,
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -1802,7 +1799,7 @@ TEST_F(NestedMesosContainerizerTest,
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -1831,13 +1828,14 @@ TEST_F(NestedMesosContainerizerTest,
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      executor,
-      directory.get(),
-      None(),
-      SlaveID(),
+      createContainerConfig(None(), executor, directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      slave::paths::getForkedPidPath(
+          slave::paths::getMetaRootDir(flags.work_dir),
+          state.id,
+          executor.framework_id(),
+          executor.executor_id(),
+          containerId));
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -1941,7 +1939,7 @@ TEST_F(NestedMesosContainerizerTest,
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -1970,13 +1968,14 @@ TEST_F(NestedMesosContainerizerTest,
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      executor,
-      directory.get(),
-      None(),
-      SlaveID(),
+      createContainerConfig(None(), executor, directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      slave::paths::getForkedPidPath(
+          slave::paths::getMetaRootDir(flags.work_dir),
+          state.id,
+          executor.framework_id(),
+          executor.executor_id(),
+          containerId));
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -1993,10 +1992,9 @@ TEST_F(NestedMesosContainerizerTest,
 
   launch = containerizer->launch(
       nestedContainerId1,
-      createCommandInfo("sleep 1000"),
-      None(),
-      None(),
-      state.id);
+      createContainerConfig(createCommandInfo("sleep 1000")),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -2101,7 +2099,7 @@ TEST_F(NestedMesosContainerizerTest,
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -2187,7 +2185,7 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_WaitAfterDestroy)
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -2198,8 +2196,6 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_WaitAfterDestroy)
 
   Owned<MesosContainerizer> containerizer(create.get());
 
-  SlaveID slaveId = SlaveID();
-
   // Launch a top-level container.
   ContainerID containerId;
   containerId.set_value(UUID::random().toString());
@@ -2209,13 +2205,12 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_WaitAfterDestroy)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      createExecutorInfo("executor", "sleep 1000", "cpus:1"),
-      directory.get(),
-      None(),
-      slaveId,
+      createContainerConfig(
+          None(),
+          createExecutorInfo("executor", "sleep 1000", "cpus:1"),
+          directory.get()),
       map<string, string>(),
-      true);
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -2226,10 +2221,9 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_WaitAfterDestroy)
 
   launch = containerizer->launch(
       nestedContainerId,
-      createCommandInfo("exit 42"),
-      None(),
-      None(),
-      slaveId);
+      createContainerConfig(createCommandInfo("exit 42")),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -2278,7 +2272,7 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_AgentEnvironmentNotLeaked)
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -2302,13 +2296,12 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_AgentEnvironmentNotLeaked)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      createExecutorInfo("executor", "sleep 1000", "cpus:1"),
-      directory.get(),
-      None(),
-      state.id,
+      createContainerConfig(
+          None(),
+          createExecutorInfo("executor", "sleep 1000", "cpus:1"),
+          directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -2336,10 +2329,9 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_AgentEnvironmentNotLeaked)
 
   launch = containerizer->launch(
       nestedContainerId,
-      command,
-      None(),
-      None(),
-      state.id);
+      createContainerConfig(command),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -2368,7 +2360,7 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_LaunchNestedThreeLevels)
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -2392,13 +2384,12 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_LaunchNestedThreeLevels)
 
   Future<bool> launch = containerizer->launch(
       level1ContainerId,
-      None(),
-      createExecutorInfo("executor", "sleep 1000", "cpus:1"),
-      directory.get(),
-      None(),
-      state.id,
+      createContainerConfig(
+          None(),
+          createExecutorInfo("executor", "sleep 1000", "cpus:1"),
+          directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -2408,10 +2399,9 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_LaunchNestedThreeLevels)
 
   launch = containerizer->launch(
       level2ContainerId,
-      createCommandInfo("sleep 1000"),
-      None(),
-      None(),
-      state.id);
+      createContainerConfig(createCommandInfo("sleep 1000")),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -2421,10 +2411,9 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_LaunchNestedThreeLevels)
 
   launch = containerizer->launch(
       level3ContainerId,
-      createCommandInfo("exit 42"),
-      None(),
-      None(),
-      state.id);
+      createContainerConfig(createCommandInfo("exit 42")),
+      map<string, string>(),
+      None());
 
   Future<Option<ContainerTermination>> wait =
     containerizer->wait(level3ContainerId);
@@ -2451,7 +2440,7 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_Remove)
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -2475,13 +2464,12 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_Remove)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      createExecutorInfo("executor", "sleep 1000", "cpus:1"),
-      directory.get(),
-      None(),
-      state.id,
+      createContainerConfig(
+          None(),
+          createExecutorInfo("executor", "sleep 1000", "cpus:1"),
+          directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -2492,10 +2480,9 @@ TEST_F(NestedMesosContainerizerTest, ROOT_CGROUPS_Remove)
 
   launch = containerizer->launch(
       nestedContainerId,
-      createCommandInfo("true"),
-      None(),
-      None(),
-      state.id);
+      createContainerConfig(createCommandInfo("true")),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -2542,7 +2529,7 @@ TEST_F(NestedMesosContainerizerTest,
   flags.launcher = "linux";
   flags.isolation = "cgroups/cpu,filesystem/linux,namespaces/pid";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -2566,13 +2553,12 @@ TEST_F(NestedMesosContainerizerTest,
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      createExecutorInfo("executor", "sleep 1000", "cpus:1"),
-      directory.get(),
-      None(),
-      state.id,
+      createContainerConfig(
+          None(),
+          createExecutorInfo("executor", "sleep 1000", "cpus:1"),
+          directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to test not checkpointing?
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -2583,10 +2569,9 @@ TEST_F(NestedMesosContainerizerTest,
 
   launch = containerizer->launch(
       nestedContainerId,
-      createCommandInfo("true"),
-      None(),
-      None(),
-      state.id);
+      createContainerConfig(createCommandInfo("true")),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/b194d5a6/src/tests/containerizer/volume_sandbox_path_isolator_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer/volume_sandbox_path_isolator_tests.cpp b/src/tests/containerizer/volume_sandbox_path_isolator_tests.cpp
index 5f4e382..3228b9a 100644
--- a/src/tests/containerizer/volume_sandbox_path_isolator_tests.cpp
+++ b/src/tests/containerizer/volume_sandbox_path_isolator_tests.cpp
@@ -54,7 +54,7 @@ TEST_F(VolumeSandboxPathIsolatorTest, SharedVolume)
   slave::Flags flags = CreateSlaveFlags();
   flags.isolation = "volume/sandbox_path";
 
-  Fetcher fetcher;
+  Fetcher fetcher(flags);
 
   Try<MesosContainerizer*> create = MesosContainerizer::create(
       flags,
@@ -80,13 +80,9 @@ TEST_F(VolumeSandboxPathIsolatorTest, SharedVolume)
 
   Future<bool> launch = containerizer->launch(
       containerId,
-      None(),
-      executor,
-      directory.get(),
-      None(),
-      state.id,
+      createContainerConfig(None(), executor, directory.get()),
       map<string, string>(),
-      true); // TODO(benh): Ever want to check not-checkpointing?
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -110,10 +106,11 @@ TEST_F(VolumeSandboxPathIsolatorTest, SharedVolume)
 
   launch = containerizer->launch(
       nestedContainerId1,
-      createCommandInfo("touch parent/file; sleep 1000"),
-      containerInfo,
-      None(),
-      state.id);
+      createContainerConfig(
+          createCommandInfo("touch parent/file; sleep 1000"),
+          containerInfo),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);
 
@@ -123,11 +120,12 @@ TEST_F(VolumeSandboxPathIsolatorTest, SharedVolume)
 
   launch = containerizer->launch(
       nestedContainerId2,
-      createCommandInfo(
-        "while true; do if [ -f parent/file ]; then exit 0; fi; done"),
-      containerInfo,
-      None(),
-      state.id);
+      createContainerConfig(
+          createCommandInfo(
+            "while true; do if [ -f parent/file ]; then exit 0; fi; done"),
+          containerInfo),
+      map<string, string>(),
+      None());
 
   AWAIT_ASSERT_TRUE(launch);