Pass executor directory to Isolator::prepare().

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


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

Branch: refs/heads/master
Commit: 8e6e36a9ab3376cb2adb9b1e4f9d00e10fec1f8c
Parents: b493875
Author: Ian Downes <[email protected]>
Authored: Fri Jun 27 12:06:12 2014 -0700
Committer: Ian Downes <[email protected]>
Committed: Mon Oct 27 10:36:36 2014 -0700

----------------------------------------------------------------------
 src/slave/containerizer/isolator.cpp            |  6 +-
 src/slave/containerizer/isolator.hpp            |  6 +-
 .../isolators/cgroups/cpushare.cpp              |  3 +-
 .../isolators/cgroups/cpushare.hpp              |  3 +-
 .../containerizer/isolators/cgroups/mem.cpp     |  3 +-
 .../containerizer/isolators/cgroups/mem.hpp     |  3 +-
 .../isolators/cgroups/perf_event.cpp            |  3 +-
 .../isolators/cgroups/perf_event.hpp            |  3 +-
 .../isolators/network/port_mapping.cpp          |  3 +-
 .../isolators/network/port_mapping.hpp          |  3 +-
 src/slave/containerizer/isolators/posix.hpp     |  3 +-
 src/tests/isolator.hpp                          |  3 +-
 src/tests/isolator_tests.cpp                    | 50 +++++++---
 src/tests/port_mapping_tests.cpp                | 99 +++++++++++++++++---
 14 files changed, 149 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/8e6e36a9/src/slave/containerizer/isolator.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolator.cpp 
b/src/slave/containerizer/isolator.cpp
index 5e61bf2..69849d2 100644
--- a/src/slave/containerizer/isolator.cpp
+++ b/src/slave/containerizer/isolator.cpp
@@ -52,12 +52,14 @@ Future<Nothing> Isolator::recover(const 
list<state::RunState>& state)
 
 Future<Option<CommandInfo> > Isolator::prepare(
     const ContainerID& containerId,
-    const ExecutorInfo& executorInfo)
+    const ExecutorInfo& executorInfo,
+    const string& directory)
 {
   return dispatch(process.get(),
                   &IsolatorProcess::prepare,
                   containerId,
-                  executorInfo);
+                  executorInfo,
+                  directory);
 }
 
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/8e6e36a9/src/slave/containerizer/isolator.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolator.hpp 
b/src/slave/containerizer/isolator.hpp
index e52e8b1..4c9d1d8 100644
--- a/src/slave/containerizer/isolator.hpp
+++ b/src/slave/containerizer/isolator.hpp
@@ -77,7 +77,8 @@ public:
   // only the command value is used.
   process::Future<Option<CommandInfo> > prepare(
       const ContainerID& containerId,
-      const ExecutorInfo& executorInfo);
+      const ExecutorInfo& executorInfo,
+      const std::string& directory);
 
   // Isolate the executor.
   process::Future<Nothing> isolate(
@@ -119,7 +120,8 @@ public:
 
   virtual process::Future<Option<CommandInfo> > prepare(
       const ContainerID& containerId,
-      const ExecutorInfo& executorInfo) = 0;
+      const ExecutorInfo& executorInfo,
+      const std::string& directory) = 0;
 
   virtual process::Future<Nothing> isolate(
       const ContainerID& containerId,

http://git-wip-us.apache.org/repos/asf/mesos/blob/8e6e36a9/src/slave/containerizer/isolators/cgroups/cpushare.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/cgroups/cpushare.cpp 
b/src/slave/containerizer/isolators/cgroups/cpushare.cpp
index 7164ecc..f9531e4 100644
--- a/src/slave/containerizer/isolators/cgroups/cpushare.cpp
+++ b/src/slave/containerizer/isolators/cgroups/cpushare.cpp
@@ -249,7 +249,8 @@ Future<Nothing> CgroupsCpushareIsolatorProcess::recover(
 
 Future<Option<CommandInfo> > CgroupsCpushareIsolatorProcess::prepare(
     const ContainerID& containerId,
-    const ExecutorInfo& executorInfo)
+    const ExecutorInfo& executorInfo,
+    const string& directory)
 {
   if (infos.contains(containerId)) {
     return Failure("Container has already been prepared");

http://git-wip-us.apache.org/repos/asf/mesos/blob/8e6e36a9/src/slave/containerizer/isolators/cgroups/cpushare.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/cgroups/cpushare.hpp 
b/src/slave/containerizer/isolators/cgroups/cpushare.hpp
index 2187c29..5d43169 100644
--- a/src/slave/containerizer/isolators/cgroups/cpushare.hpp
+++ b/src/slave/containerizer/isolators/cgroups/cpushare.hpp
@@ -47,7 +47,8 @@ public:
 
   virtual process::Future<Option<CommandInfo> > prepare(
       const ContainerID& containerId,
-      const ExecutorInfo& executorInfo);
+      const ExecutorInfo& executorInfo,
+      const std::string& directory);
 
   virtual process::Future<Nothing> isolate(
       const ContainerID& containerId,

http://git-wip-us.apache.org/repos/asf/mesos/blob/8e6e36a9/src/slave/containerizer/isolators/cgroups/mem.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/cgroups/mem.cpp 
b/src/slave/containerizer/isolators/cgroups/mem.cpp
index b3d4a5d..96bc506 100644
--- a/src/slave/containerizer/isolators/cgroups/mem.cpp
+++ b/src/slave/containerizer/isolators/cgroups/mem.cpp
@@ -204,7 +204,8 @@ Future<Nothing> CgroupsMemIsolatorProcess::recover(
 
 Future<Option<CommandInfo> > CgroupsMemIsolatorProcess::prepare(
     const ContainerID& containerId,
-    const ExecutorInfo& executorInfo)
+    const ExecutorInfo& executorInfo,
+    const string& directory)
 {
   if (infos.contains(containerId)) {
     return Failure("Container has already been prepared");

http://git-wip-us.apache.org/repos/asf/mesos/blob/8e6e36a9/src/slave/containerizer/isolators/cgroups/mem.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/cgroups/mem.hpp 
b/src/slave/containerizer/isolators/cgroups/mem.hpp
index b1b4f5a..25e4afc 100644
--- a/src/slave/containerizer/isolators/cgroups/mem.hpp
+++ b/src/slave/containerizer/isolators/cgroups/mem.hpp
@@ -41,7 +41,8 @@ public:
 
   virtual process::Future<Option<CommandInfo> > prepare(
       const ContainerID& containerId,
-      const ExecutorInfo& executorInfo);
+      const ExecutorInfo& executorInfo,
+      const std::string& directory);
 
   virtual process::Future<Nothing> isolate(
       const ContainerID& containerId,

http://git-wip-us.apache.org/repos/asf/mesos/blob/8e6e36a9/src/slave/containerizer/isolators/cgroups/perf_event.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/cgroups/perf_event.cpp 
b/src/slave/containerizer/isolators/cgroups/perf_event.cpp
index 4ced508..7ed418a 100644
--- a/src/slave/containerizer/isolators/cgroups/perf_event.cpp
+++ b/src/slave/containerizer/isolators/cgroups/perf_event.cpp
@@ -213,7 +213,8 @@ Future<Nothing> CgroupsPerfEventIsolatorProcess::recover(
 
 Future<Option<CommandInfo> > CgroupsPerfEventIsolatorProcess::prepare(
     const ContainerID& containerId,
-    const ExecutorInfo& executorInfo)
+    const ExecutorInfo& executorInfo,
+    const string& directory)
 {
   if (infos.contains(containerId)) {
     return Failure("Container has already been prepared");

http://git-wip-us.apache.org/repos/asf/mesos/blob/8e6e36a9/src/slave/containerizer/isolators/cgroups/perf_event.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/cgroups/perf_event.hpp 
b/src/slave/containerizer/isolators/cgroups/perf_event.hpp
index f7283d8..7cb2ba2 100644
--- a/src/slave/containerizer/isolators/cgroups/perf_event.hpp
+++ b/src/slave/containerizer/isolators/cgroups/perf_event.hpp
@@ -45,7 +45,8 @@ public:
 
   virtual process::Future<Option<CommandInfo> > prepare(
       const ContainerID& containerId,
-      const ExecutorInfo& executorInfo);
+      const ExecutorInfo& executorInfo,
+      const std::string& directory);
 
   virtual process::Future<Nothing> isolate(
       const ContainerID& containerId,

http://git-wip-us.apache.org/repos/asf/mesos/blob/8e6e36a9/src/slave/containerizer/isolators/network/port_mapping.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/network/port_mapping.cpp 
b/src/slave/containerizer/isolators/network/port_mapping.cpp
index 9cb7487..1d0609a 100644
--- a/src/slave/containerizer/isolators/network/port_mapping.cpp
+++ b/src/slave/containerizer/isolators/network/port_mapping.cpp
@@ -1437,7 +1437,8 @@ PortMappingIsolatorProcess::_recover(pid_t pid)
 
 Future<Option<CommandInfo> > PortMappingIsolatorProcess::prepare(
     const ContainerID& containerId,
-    const ExecutorInfo& executorInfo)
+    const ExecutorInfo& executorInfo,
+    const string& directory)
 {
   if (unmanaged.contains(containerId)) {
     return Failure("Asked to prepare an unmanaged container");

http://git-wip-us.apache.org/repos/asf/mesos/blob/8e6e36a9/src/slave/containerizer/isolators/network/port_mapping.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/network/port_mapping.hpp 
b/src/slave/containerizer/isolators/network/port_mapping.hpp
index b3fd331..f9215b2 100644
--- a/src/slave/containerizer/isolators/network/port_mapping.hpp
+++ b/src/slave/containerizer/isolators/network/port_mapping.hpp
@@ -134,7 +134,8 @@ public:
 
   virtual process::Future<Option<CommandInfo> > prepare(
       const ContainerID& containerId,
-      const ExecutorInfo& executorInfo);
+      const ExecutorInfo& executorInfo,
+      const std::string& directory);
 
   virtual process::Future<Nothing> isolate(
       const ContainerID& containerId,

http://git-wip-us.apache.org/repos/asf/mesos/blob/8e6e36a9/src/slave/containerizer/isolators/posix.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/posix.hpp 
b/src/slave/containerizer/isolators/posix.hpp
index 6038e92..7e02f92 100644
--- a/src/slave/containerizer/isolators/posix.hpp
+++ b/src/slave/containerizer/isolators/posix.hpp
@@ -69,7 +69,8 @@ public:
 
   virtual process::Future<Option<CommandInfo> > prepare(
       const ContainerID& containerId,
-      const ExecutorInfo& executorInfo)
+      const ExecutorInfo& executorInfo,
+      const std::string& directory)
   {
     if (promises.contains(containerId)) {
       return process::Failure("Container " + stringify(containerId) +

http://git-wip-us.apache.org/repos/asf/mesos/blob/8e6e36a9/src/tests/isolator.hpp
----------------------------------------------------------------------
diff --git a/src/tests/isolator.hpp b/src/tests/isolator.hpp
index 89df4c4..d8f3f09 100644
--- a/src/tests/isolator.hpp
+++ b/src/tests/isolator.hpp
@@ -45,7 +45,8 @@ public:
 
   virtual process::Future<Option<CommandInfo> > prepare(
       const ContainerID& containerId,
-      const ExecutorInfo& executorInfo)
+      const ExecutorInfo& executorInfo,
+      const std::string& directory)
   {
     return commandInfo;
   }

http://git-wip-us.apache.org/repos/asf/mesos/blob/8e6e36a9/src/tests/isolator_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/isolator_tests.cpp b/src/tests/isolator_tests.cpp
index 52b38a3..db7a58a 100644
--- a/src/tests/isolator_tests.cpp
+++ b/src/tests/isolator_tests.cpp
@@ -148,10 +148,13 @@ TYPED_TEST(CpuIsolatorTest, UserCpuUsage)
   ContainerID containerId;
   containerId.set_value("user_cpu_usage");
 
-  AWAIT_READY(isolator.get()->prepare(containerId, executorInfo));
-
-  Try<string> dir = os::mkdtemp();
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
   ASSERT_SOME(dir);
+
+  AWAIT_READY(isolator.get()->prepare(containerId, executorInfo, dir.get()));
+
   const string& file = path::join(dir.get(), "mesos_isolator_test_ready");
 
   // Max out a single core in userspace. This will run for at most one second.
@@ -230,8 +233,6 @@ TYPED_TEST(CpuIsolatorTest, UserCpuUsage)
 
   delete isolator.get();
   delete launcher.get();
-
-  CHECK_SOME(os::rmdir(dir.get()));
 }
 
 
@@ -252,10 +253,13 @@ TYPED_TEST(CpuIsolatorTest, SystemCpuUsage)
   ContainerID containerId;
   containerId.set_value("system_cpu_usage");
 
-  AWAIT_READY(isolator.get()->prepare(containerId, executorInfo));
-
-  Try<string> dir = os::mkdtemp();
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
   ASSERT_SOME(dir);
+
+  AWAIT_READY(isolator.get()->prepare(containerId, executorInfo, dir.get()));
+
   const string& file = path::join(dir.get(), "mesos_isolator_test_ready");
 
   // Generating random numbers is done by the kernel and will max out a single
@@ -335,8 +339,6 @@ TYPED_TEST(CpuIsolatorTest, SystemCpuUsage)
 
   delete isolator.get();
   delete launcher.get();
-
-  CHECK_SOME(os::rmdir(dir.get()));
 }
 
 
@@ -364,7 +366,12 @@ TEST_F(LimitedCpuIsolatorTest, ROOT_CGROUPS_Cfs)
   ContainerID containerId;
   containerId.set_value("mesos_test_cfs_cpu_limit");
 
-  AWAIT_READY(isolator.get()->prepare(containerId, executorInfo));
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir);
+
+  AWAIT_READY(isolator.get()->prepare(containerId, executorInfo, dir.get()));
 
   // Generate random numbers to max out a single core. We'll run this for 0.5
   // seconds of wall time so it should consume approximately 250 ms of total
@@ -465,7 +472,12 @@ TEST_F(LimitedCpuIsolatorTest, ROOT_CGROUPS_Cfs_Big_Quota)
   ContainerID containerId;
   containerId.set_value("mesos_test_cfs_big_cpu_limit");
 
-  AWAIT_READY(isolator.get()->prepare(containerId, executorInfo));
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir);
+
+  AWAIT_READY(isolator.get()->prepare(containerId, executorInfo, dir.get()));
 
   int pipes[2];
   ASSERT_NE(-1, ::pipe(pipes));
@@ -594,7 +606,12 @@ TYPED_TEST(MemIsolatorTest, MemUsage)
   ContainerID containerId;
   containerId.set_value("memory_usage");
 
-  AWAIT_READY(isolator.get()->prepare(containerId, executorInfo));
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir);
+
+  AWAIT_READY(isolator.get()->prepare(containerId, executorInfo, dir.get()));
 
   int pipes[2];
   ASSERT_NE(-1, ::pipe(pipes));
@@ -681,7 +698,12 @@ TEST_F(PerfEventIsolatorTest, ROOT_CGROUPS_Sample)
   ContainerID containerId;
   containerId.set_value("test");
 
-  AWAIT_READY(isolator.get()->prepare(containerId, executorInfo));
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir);
+
+  AWAIT_READY(isolator.get()->prepare(containerId, executorInfo, dir.get()));
 
   // This first sample is likely to be empty because perf hasn't
   // completed yet but we should still have the required fields.

http://git-wip-us.apache.org/repos/asf/mesos/blob/8e6e36a9/src/tests/port_mapping_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/port_mapping_tests.cpp b/src/tests/port_mapping_tests.cpp
index 973bdef..1a5e52c 100644
--- a/src/tests/port_mapping_tests.cpp
+++ b/src/tests/port_mapping_tests.cpp
@@ -357,8 +357,13 @@ TEST_F(PortMappingIsolatorTest, 
ROOT_ContainerToContainerTCPTest)
   ContainerID containerId1;
   containerId1.set_value("container1");
 
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir1 = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir1);
+
   Future<Option<CommandInfo> > preparation1 =
-    isolator.get()->prepare(containerId1, executorInfo);
+    isolator.get()->prepare(containerId1, executorInfo, dir1.get());
   AWAIT_READY(preparation1);
   ASSERT_SOME(preparation1.get());
 
@@ -411,8 +416,14 @@ TEST_F(PortMappingIsolatorTest, 
ROOT_ContainerToContainerTCPTest)
   executorInfo.mutable_resources()->CopyFrom(
       Resources::parse(container2Ports).get());
 
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir2 = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir2);
+
   Future<Option<CommandInfo> > preparation2 =
-    isolator.get()->prepare(containerId2, executorInfo);
+    isolator.get()->prepare(containerId2, executorInfo, dir2.get());
+
   AWAIT_READY(preparation2);
   ASSERT_SOME(preparation2.get());
 
@@ -493,8 +504,13 @@ TEST_F(PortMappingIsolatorTest, 
ROOT_ContainerToContainerUDPTest)
   ContainerID containerId1;
   containerId1.set_value("container1");
 
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir1 = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir1);
+
   Future<Option<CommandInfo> > preparation1 =
-    isolator.get()->prepare(containerId1, executorInfo);
+    isolator.get()->prepare(containerId1, executorInfo, dir1.get());
   AWAIT_READY(preparation1);
   ASSERT_SOME(preparation1.get());
 
@@ -548,8 +564,13 @@ TEST_F(PortMappingIsolatorTest, 
ROOT_ContainerToContainerUDPTest)
   executorInfo.mutable_resources()->CopyFrom(
       Resources::parse(container2Ports).get());
 
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir2 = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir2);
+
   Future<Option<CommandInfo> > preparation2 =
-    isolator.get()->prepare(containerId2, executorInfo);
+    isolator.get()->prepare(containerId2, executorInfo, dir2.get());
   AWAIT_READY(preparation2);
   ASSERT_SOME(preparation2.get());
 
@@ -631,8 +652,13 @@ TEST_F(PortMappingIsolatorTest, 
ROOT_HostToContainerUDPTest)
   ContainerID containerId;
   containerId.set_value("container1");
 
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir);
+
   Future<Option<CommandInfo> > preparation1 =
-    isolator.get()->prepare(containerId, executorInfo);
+    isolator.get()->prepare(containerId, executorInfo, dir.get());
   AWAIT_READY(preparation1);
   ASSERT_SOME(preparation1.get());
 
@@ -740,8 +766,13 @@ TEST_F(PortMappingIsolatorTest, 
ROOT_HostToContainerTCPTest)
   ContainerID containerId;
   containerId.set_value("container1");
 
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir);
+
   Future<Option<CommandInfo> > preparation1 =
-    isolator.get()->prepare(containerId, executorInfo);
+    isolator.get()->prepare(containerId, executorInfo, dir.get());
   AWAIT_READY(preparation1);
   ASSERT_SOME(preparation1.get());
 
@@ -856,8 +887,13 @@ TEST_F(PortMappingIsolatorTest, 
ROOT_ContainerICMPExternalTest)
   ContainerID containerId;
   containerId.set_value("container1");
 
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir);
+
   Future<Option<CommandInfo> > preparation1 =
-    isolator.get()->prepare(containerId, executorInfo);
+    isolator.get()->prepare(containerId, executorInfo, dir.get());
   AWAIT_READY(preparation1);
   ASSERT_SOME(preparation1.get());
 
@@ -929,8 +965,13 @@ TEST_F(PortMappingIsolatorTest, 
ROOT_ContainerICMPInternalTest)
   ContainerID containerId;
   containerId.set_value("container1");
 
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir);
+
   Future<Option<CommandInfo> > preparation1 =
-    isolator.get()->prepare(containerId, executorInfo);
+    isolator.get()->prepare(containerId, executorInfo, dir.get());
   AWAIT_READY(preparation1);
   ASSERT_SOME(preparation1.get());
 
@@ -1006,8 +1047,13 @@ TEST_F(PortMappingIsolatorTest, 
ROOT_ContainerARPExternalTest)
   ContainerID containerId;
   containerId.set_value("container1");
 
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir);
+
   Future<Option<CommandInfo> > preparation1 =
-    isolator.get()->prepare(containerId, executorInfo);
+    isolator.get()->prepare(containerId, executorInfo, dir.get());
   AWAIT_READY(preparation1);
   ASSERT_SOME(preparation1.get());
 
@@ -1088,8 +1134,13 @@ TEST_F(PortMappingIsolatorTest, ROOT_DNSTest)
   ContainerID containerId;
   containerId.set_value("container1");
 
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir);
+
   Future<Option<CommandInfo> > preparation1 =
-    isolator.get()->prepare(containerId, executorInfo);
+    isolator.get()->prepare(containerId, executorInfo, dir.get());
   AWAIT_READY(preparation1);
   ASSERT_SOME(preparation1.get());
 
@@ -1166,8 +1217,13 @@ TEST_F(PortMappingIsolatorTest, 
ROOT_TooManyContainersTest)
   ContainerID containerId1;
   containerId1.set_value("container1");
 
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir1 = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir1);
+
   Future<Option<CommandInfo> > preparation1 =
-    isolator.get()->prepare(containerId1, executorInfo);
+    isolator.get()->prepare(containerId1, executorInfo, dir1.get());
   AWAIT_READY(preparation1);
   ASSERT_SOME(preparation1.get());
 
@@ -1205,8 +1261,13 @@ TEST_F(PortMappingIsolatorTest, 
ROOT_TooManyContainersTest)
   executorInfo.mutable_resources()->CopyFrom(
       Resources::parse(container2Ports).get());
 
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir2 = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir2);
+
   Future<Option<CommandInfo> > preparation2 =
-    isolator.get()->prepare(containerId2, executorInfo);
+    isolator.get()->prepare(containerId2, executorInfo, dir2.get());
   AWAIT_FAILED(preparation2);
 
   // Ensure all processes are killed.
@@ -1258,8 +1319,13 @@ TEST_F(PortMappingIsolatorTest, 
ROOT_SmallEgressLimitTest)
   ContainerID containerId;
   containerId.set_value("container1");
 
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir);
+
   Future<Option<CommandInfo> > preparation1 =
-    isolator.get()->prepare(containerId, executorInfo);
+    isolator.get()->prepare(containerId, executorInfo, dir.get());
   AWAIT_READY(preparation1);
   ASSERT_SOME(preparation1.get());
 
@@ -1374,8 +1440,13 @@ TEST_F(PortMappingIsolatorTest, ROOT_ExportRTTTest)
   ContainerID containerId;
   containerId.set_value("container1");
 
+  // Use a relative temporary directory so it gets cleaned up
+  // automatically with the test.
+  Try<string> dir1 = os::mkdtemp(path::join(os::getcwd(), "XXXXXX"));
+  ASSERT_SOME(dir1);
+
   Future<Option<CommandInfo> > preparation1 =
-    isolator.get()->prepare(containerId, executorInfo);
+    isolator.get()->prepare(containerId, executorInfo, dir1.get());
   AWAIT_READY(preparation1);
   ASSERT_SOME(preparation1.get());
 

Reply via email to