From 8393df2516bceb49f95de42f34bcbb4ec49bb5b7 Mon Sep 17 00:00:00 2001 From: Wang Qing Date: Sat, 22 Dec 2018 08:29:16 +0800 Subject: [PATCH] Use BaseTest to instead of TestListener. (#3577) --- .../org/ray/runtime/runner/RunManager.java | 20 +++++++++++- .../org/ray/api/benchmark/ActorPressTest.java | 3 -- .../ray/api/benchmark/MaxPressureTest.java | 3 -- .../benchmark/RateLimiterPressureTest.java | 3 -- .../ray/api/benchmark/RayBenchmarkTest.java | 4 ++- .../ray/api/benchmark/SingleLatencyTest.java | 3 -- .../ray/api/test/ActorReconstructionTest.java | 4 +-- .../main/java/org/ray/api/test/ActorTest.java | 4 +-- .../main/java/org/ray/api/test/BaseTest.java | 32 +++++++++++++++++++ .../java/org/ray/api/test/HelloWorldTest.java | 4 +-- .../main/java/org/ray/api/test/MyRunner.java | 19 ----------- .../org/ray/api/test/ObjectStoreTest.java | 3 +- .../java/org/ray/api/test/PlasmaFreeTest.java | 3 +- .../java/org/ray/api/test/RayCallTest.java | 3 +- .../java/org/ray/api/test/RayConfigTest.java | 30 ++++++++++------- .../java/org/ray/api/test/RayMethodsTest.java | 4 +-- .../ray/api/test/ResourcesManagementTest.java | 5 +-- .../java/org/ray/api/test/StressTest.java | 4 +-- .../java/org/ray/api/test/TestListener.java | 21 ------------ .../main/java/org/ray/api/test/WaitTest.java | 4 +-- 20 files changed, 82 insertions(+), 94 deletions(-) create mode 100644 java/test/src/main/java/org/ray/api/test/BaseTest.java delete mode 100644 java/test/src/main/java/org/ray/api/test/MyRunner.java delete mode 100644 java/test/src/main/java/org/ray/api/test/TestListener.java diff --git a/java/runtime/src/main/java/org/ray/runtime/runner/RunManager.java b/java/runtime/src/main/java/org/ray/runtime/runner/RunManager.java index 56940e33c..7b25882dd 100644 --- a/java/runtime/src/main/java/org/ray/runtime/runner/RunManager.java +++ b/java/runtime/src/main/java/org/ray/runtime/runner/RunManager.java @@ -38,6 +38,8 @@ public class RunManager { private List processes; + private static final int KILL_PROCESS_WAIT_TIMEOUT_SECONDS = 1; + public RunManager(RayConfig rayConfig) { this.rayConfig = rayConfig; processes = new ArrayList<>(); @@ -45,8 +47,24 @@ public class RunManager { } public void cleanup() { - for (Process p : processes) { + // Terminate the processes in the reversed order of creating them. + // Because raylet needs to exit before object store, otherwise it + // cannot exit gracefully. + + for (int i = processes.size() - 1; i >= 0; --i) { + Process p = processes.get(i); p.destroy(); + + try { + p.waitFor(KILL_PROCESS_WAIT_TIMEOUT_SECONDS, TimeUnit.SECONDS); + } catch (InterruptedException e) { + LOGGER.warn("Got InterruptedException while waiting for process {}" + + " to be terminated.", processes.get(i)); + } + + if (p.isAlive()) { + p.destroyForcibly(); + } } } diff --git a/java/test/src/main/java/org/ray/api/benchmark/ActorPressTest.java b/java/test/src/main/java/org/ray/api/benchmark/ActorPressTest.java index 1918daa43..9945e1777 100644 --- a/java/test/src/main/java/org/ray/api/benchmark/ActorPressTest.java +++ b/java/test/src/main/java/org/ray/api/benchmark/ActorPressTest.java @@ -1,14 +1,11 @@ package org.ray.api.benchmark; import org.junit.Test; -import org.junit.runner.RunWith; import org.ray.api.Ray; import org.ray.api.RayActor; import org.ray.api.RayObject; import org.ray.api.annotation.RayRemote; -import org.ray.api.test.MyRunner; -@RunWith(MyRunner.class) public class ActorPressTest extends RayBenchmarkTest { @Test diff --git a/java/test/src/main/java/org/ray/api/benchmark/MaxPressureTest.java b/java/test/src/main/java/org/ray/api/benchmark/MaxPressureTest.java index 923ed4dd3..bf5d9c5ac 100644 --- a/java/test/src/main/java/org/ray/api/benchmark/MaxPressureTest.java +++ b/java/test/src/main/java/org/ray/api/benchmark/MaxPressureTest.java @@ -1,14 +1,11 @@ package org.ray.api.benchmark; import org.junit.Test; -import org.junit.runner.RunWith; import org.ray.api.Ray; import org.ray.api.RayActor; import org.ray.api.RayObject; import org.ray.api.annotation.RayRemote; -import org.ray.api.test.MyRunner; -@RunWith(MyRunner.class) public class MaxPressureTest extends RayBenchmarkTest { public static final int clientNum = 2; diff --git a/java/test/src/main/java/org/ray/api/benchmark/RateLimiterPressureTest.java b/java/test/src/main/java/org/ray/api/benchmark/RateLimiterPressureTest.java index 0594dfae7..4c44a0332 100644 --- a/java/test/src/main/java/org/ray/api/benchmark/RateLimiterPressureTest.java +++ b/java/test/src/main/java/org/ray/api/benchmark/RateLimiterPressureTest.java @@ -1,14 +1,11 @@ package org.ray.api.benchmark; import org.junit.Test; -import org.junit.runner.RunWith; import org.ray.api.Ray; import org.ray.api.RayActor; import org.ray.api.RayObject; import org.ray.api.annotation.RayRemote; -import org.ray.api.test.MyRunner; -@RunWith(MyRunner.class) public class RateLimiterPressureTest extends RayBenchmarkTest { public static final int clientNum = 2; diff --git a/java/test/src/main/java/org/ray/api/benchmark/RayBenchmarkTest.java b/java/test/src/main/java/org/ray/api/benchmark/RayBenchmarkTest.java index ca15c0f83..ab73dd214 100644 --- a/java/test/src/main/java/org/ray/api/benchmark/RayBenchmarkTest.java +++ b/java/test/src/main/java/org/ray/api/benchmark/RayBenchmarkTest.java @@ -11,10 +11,12 @@ import org.ray.api.Ray; import org.ray.api.RayActor; import org.ray.api.RayObject; import org.ray.api.annotation.RayRemote; +import org.ray.api.test.BaseTest; +import org.ray.runtime.util.logger.RayLog; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public abstract class RayBenchmarkTest implements Serializable { +public abstract class RayBenchmarkTest extends BaseTest implements Serializable { private static final Logger LOGGER = LoggerFactory.getLogger(RayBenchmarkTest.class); //not thread safe ,but we only have one thread here diff --git a/java/test/src/main/java/org/ray/api/benchmark/SingleLatencyTest.java b/java/test/src/main/java/org/ray/api/benchmark/SingleLatencyTest.java index de9c1e838..5e82163bc 100644 --- a/java/test/src/main/java/org/ray/api/benchmark/SingleLatencyTest.java +++ b/java/test/src/main/java/org/ray/api/benchmark/SingleLatencyTest.java @@ -1,14 +1,11 @@ package org.ray.api.benchmark; import org.junit.Test; -import org.junit.runner.RunWith; import org.ray.api.Ray; import org.ray.api.RayActor; import org.ray.api.RayObject; import org.ray.api.annotation.RayRemote; -import org.ray.api.test.MyRunner; -@RunWith(MyRunner.class) public class SingleLatencyTest extends RayBenchmarkTest { public static final int totalNum = 10; diff --git a/java/test/src/main/java/org/ray/api/test/ActorReconstructionTest.java b/java/test/src/main/java/org/ray/api/test/ActorReconstructionTest.java index d78518162..59bba919f 100644 --- a/java/test/src/main/java/org/ray/api/test/ActorReconstructionTest.java +++ b/java/test/src/main/java/org/ray/api/test/ActorReconstructionTest.java @@ -7,14 +7,12 @@ import java.util.HashMap; import java.util.concurrent.TimeUnit; import org.junit.Assert; import org.junit.Test; -import org.junit.runner.RunWith; import org.ray.api.Ray; import org.ray.api.RayActor; import org.ray.api.annotation.RayRemote; import org.ray.api.options.ActorCreationOptions; -@RunWith(MyRunner.class) -public class ActorReconstructionTest { +public class ActorReconstructionTest extends BaseTest { @RayRemote() public static class Counter { diff --git a/java/test/src/main/java/org/ray/api/test/ActorTest.java b/java/test/src/main/java/org/ray/api/test/ActorTest.java index 1dffb16b8..c8fb6ce6e 100644 --- a/java/test/src/main/java/org/ray/api/test/ActorTest.java +++ b/java/test/src/main/java/org/ray/api/test/ActorTest.java @@ -2,7 +2,6 @@ package org.ray.api.test; import org.junit.Assert; import org.junit.Test; -import org.junit.runner.RunWith; import org.ray.api.Ray; import org.ray.api.RayActor; import org.ray.api.RayObject; @@ -10,8 +9,7 @@ import org.ray.api.annotation.RayRemote; import org.ray.api.function.RayFunc2; import org.ray.api.id.UniqueId; -@RunWith(MyRunner.class) -public class ActorTest { +public class ActorTest extends BaseTest { @RayRemote public static class Counter { diff --git a/java/test/src/main/java/org/ray/api/test/BaseTest.java b/java/test/src/main/java/org/ray/api/test/BaseTest.java new file mode 100644 index 000000000..f7bcf01b4 --- /dev/null +++ b/java/test/src/main/java/org/ray/api/test/BaseTest.java @@ -0,0 +1,32 @@ +package org.ray.api.test; + +import java.io.File; +import org.junit.After; +import org.junit.Before; +import org.ray.api.Ray; + +public class BaseTest { + + @Before + public void setUp() { + System.setProperty("ray.home", "../.."); + System.setProperty("ray.resources", "CPU:4,RES-A:4"); + Ray.init(); + } + + @After + public void tearDown() { + // TODO(qwang): This is double check to check that the socket file is removed actually. + // We could not enable this until `systemInfo` enabled. + //File rayletSocketFIle = new File(Ray.systemInfo().rayletSocketName()); + Ray.shutdown(); + + //remove raylet socket file + //rayletSocketFIle.delete(); + + // unset system properties + System.clearProperty("ray.home"); + System.clearProperty("ray.resources"); + } + +} diff --git a/java/test/src/main/java/org/ray/api/test/HelloWorldTest.java b/java/test/src/main/java/org/ray/api/test/HelloWorldTest.java index 3dddce1f5..9f31363e8 100644 --- a/java/test/src/main/java/org/ray/api/test/HelloWorldTest.java +++ b/java/test/src/main/java/org/ray/api/test/HelloWorldTest.java @@ -2,7 +2,6 @@ package org.ray.api.test; import org.junit.Assert; import org.junit.Test; -import org.junit.runner.RunWith; import org.ray.api.Ray; import org.ray.api.RayObject; import org.ray.api.annotation.RayRemote; @@ -10,8 +9,7 @@ import org.ray.api.annotation.RayRemote; /** * Hello world. */ -@RunWith(MyRunner.class) -public class HelloWorldTest { +public class HelloWorldTest extends BaseTest { @RayRemote private static String hello() { diff --git a/java/test/src/main/java/org/ray/api/test/MyRunner.java b/java/test/src/main/java/org/ray/api/test/MyRunner.java deleted file mode 100644 index 3c7b755f5..000000000 --- a/java/test/src/main/java/org/ray/api/test/MyRunner.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.ray.api.test; - -import org.junit.runner.notification.RunNotifier; -import org.junit.runners.BlockJUnit4ClassRunner; -import org.junit.runners.model.InitializationError; - -public class MyRunner extends BlockJUnit4ClassRunner { - - public MyRunner(Class klass) throws InitializationError { - super(klass); - } - - @Override - public void run(RunNotifier notifier) { - notifier.addListener(new TestListener()); - notifier.fireTestRunStarted(getDescription()); - super.run(notifier); - } -} diff --git a/java/test/src/main/java/org/ray/api/test/ObjectStoreTest.java b/java/test/src/main/java/org/ray/api/test/ObjectStoreTest.java index 961c02bd2..d38c46992 100644 --- a/java/test/src/main/java/org/ray/api/test/ObjectStoreTest.java +++ b/java/test/src/main/java/org/ray/api/test/ObjectStoreTest.java @@ -13,8 +13,7 @@ import org.ray.api.id.UniqueId; /** * Test putting and getting objects. */ -@RunWith(MyRunner.class) -public class ObjectStoreTest { +public class ObjectStoreTest extends BaseTest { @Test public void testPutAndGet() { diff --git a/java/test/src/main/java/org/ray/api/test/PlasmaFreeTest.java b/java/test/src/main/java/org/ray/api/test/PlasmaFreeTest.java index be24f0299..795e0efdb 100644 --- a/java/test/src/main/java/org/ray/api/test/PlasmaFreeTest.java +++ b/java/test/src/main/java/org/ray/api/test/PlasmaFreeTest.java @@ -13,8 +13,7 @@ import org.ray.api.annotation.RayRemote; import org.ray.api.id.UniqueId; -@RunWith(MyRunner.class) -public class PlasmaFreeTest { +public class PlasmaFreeTest extends BaseTest { @RayRemote private static String hello() { diff --git a/java/test/src/main/java/org/ray/api/test/RayCallTest.java b/java/test/src/main/java/org/ray/api/test/RayCallTest.java index 99be04c1b..08e90e589 100644 --- a/java/test/src/main/java/org/ray/api/test/RayCallTest.java +++ b/java/test/src/main/java/org/ray/api/test/RayCallTest.java @@ -15,8 +15,7 @@ import org.ray.api.annotation.RayRemote; /** * Test Ray.call API */ -@RunWith(MyRunner.class) -public class RayCallTest { +public class RayCallTest extends BaseTest { @RayRemote private static int testInt(int val) { diff --git a/java/test/src/main/java/org/ray/api/test/RayConfigTest.java b/java/test/src/main/java/org/ray/api/test/RayConfigTest.java index 71e3d0dff..8260b39d4 100644 --- a/java/test/src/main/java/org/ray/api/test/RayConfigTest.java +++ b/java/test/src/main/java/org/ray/api/test/RayConfigTest.java @@ -10,22 +10,28 @@ public class RayConfigTest { @Test public void testCreateRayConfig() { - System.setProperty("ray.home", "/path/to/ray"); - System.setProperty("ray.driver.resource-path", "path/to/ray/driver/resource/path"); - RayConfig rayConfig = RayConfig.create(); + try { + System.setProperty("ray.home", "/path/to/ray"); + System.setProperty("ray.driver.resource-path", "path/to/ray/driver/resource/path"); + RayConfig rayConfig = RayConfig.create(); - Assert.assertEquals("/path/to/ray", rayConfig.rayHome); - Assert.assertEquals(WorkerMode.DRIVER, rayConfig.workerMode); - Assert.assertEquals(RunMode.CLUSTER, rayConfig.runMode); + Assert.assertEquals("/path/to/ray", rayConfig.rayHome); + Assert.assertEquals(WorkerMode.DRIVER, rayConfig.workerMode); + Assert.assertEquals(RunMode.CLUSTER, rayConfig.runMode); - System.setProperty("ray.home", ""); - rayConfig = RayConfig.create(); + System.setProperty("ray.home", ""); + rayConfig = RayConfig.create(); - Assert.assertEquals(System.getProperty("user.dir"), rayConfig.rayHome); - Assert.assertEquals(System.getProperty("user.dir") + - "/build/src/ray/thirdparty/redis/src/redis-server", rayConfig.redisServerExecutablePath); + Assert.assertEquals(System.getProperty("user.dir"), rayConfig.rayHome); + Assert.assertEquals(System.getProperty("user.dir") + + "/build/src/ray/thirdparty/redis/src/redis-server", rayConfig.redisServerExecutablePath); - Assert.assertEquals("path/to/ray/driver/resource/path", rayConfig.driverResourcePath); + Assert.assertEquals("path/to/ray/driver/resource/path", rayConfig.driverResourcePath); + } finally { + //unset the system property + System.clearProperty("ray.home"); + System.clearProperty("ray.driver.resource-path"); + } } } diff --git a/java/test/src/main/java/org/ray/api/test/RayMethodsTest.java b/java/test/src/main/java/org/ray/api/test/RayMethodsTest.java index b49f78e17..a612ef7c2 100644 --- a/java/test/src/main/java/org/ray/api/test/RayMethodsTest.java +++ b/java/test/src/main/java/org/ray/api/test/RayMethodsTest.java @@ -5,7 +5,6 @@ import java.util.List; import java.util.stream.Collectors; import org.junit.Assert; import org.junit.Test; -import org.junit.runner.RunWith; import org.ray.api.Ray; import org.ray.api.RayObject; import org.ray.api.WaitResult; @@ -14,8 +13,7 @@ import org.ray.runtime.util.logger.RayLog; /** * Integration test for Ray.* */ -@RunWith(MyRunner.class) -public class RayMethodsTest { +public class RayMethodsTest extends BaseTest { @Test public void test() { diff --git a/java/test/src/main/java/org/ray/api/test/ResourcesManagementTest.java b/java/test/src/main/java/org/ray/api/test/ResourcesManagementTest.java index e185a5f19..36abda2f3 100644 --- a/java/test/src/main/java/org/ray/api/test/ResourcesManagementTest.java +++ b/java/test/src/main/java/org/ray/api/test/ResourcesManagementTest.java @@ -2,10 +2,8 @@ package org.ray.api.test; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import jdk.nashorn.internal.ir.annotations.Immutable; import org.junit.Assert; import org.junit.Test; -import org.junit.runner.RunWith; import org.ray.api.Ray; import org.ray.api.RayActor; import org.ray.api.RayObject; @@ -17,8 +15,7 @@ import org.ray.api.options.CallOptions; /** * Resources Management Test. */ -@RunWith(MyRunner.class) -public class ResourcesManagementTest { +public class ResourcesManagementTest extends BaseTest { @RayRemote public static Integer echo(Integer number) { diff --git a/java/test/src/main/java/org/ray/api/test/StressTest.java b/java/test/src/main/java/org/ray/api/test/StressTest.java index 4fab74aed..a85a8ca2b 100644 --- a/java/test/src/main/java/org/ray/api/test/StressTest.java +++ b/java/test/src/main/java/org/ray/api/test/StressTest.java @@ -5,14 +5,12 @@ import java.util.ArrayList; import java.util.List; import org.junit.Assert; import org.junit.Test; -import org.junit.runner.RunWith; import org.ray.api.Ray; import org.ray.api.RayActor; import org.ray.api.RayObject; import org.ray.api.id.UniqueId; -@RunWith(MyRunner.class) -public class StressTest { +public class StressTest extends BaseTest { public static int echo(int x) { return x; diff --git a/java/test/src/main/java/org/ray/api/test/TestListener.java b/java/test/src/main/java/org/ray/api/test/TestListener.java deleted file mode 100644 index efc419b34..000000000 --- a/java/test/src/main/java/org/ray/api/test/TestListener.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.ray.api.test; - -import org.junit.runner.Description; -import org.junit.runner.Result; -import org.junit.runner.notification.RunListener; -import org.ray.api.Ray; - -public class TestListener extends RunListener { - - @Override - public void testRunStarted(Description description) { - System.setProperty("ray.home", "../.."); - System.setProperty("ray.resources", "CPU:4,RES-A:4"); - Ray.init(); - } - - @Override - public void testRunFinished(Result result) { - Ray.shutdown(); - } -} diff --git a/java/test/src/main/java/org/ray/api/test/WaitTest.java b/java/test/src/main/java/org/ray/api/test/WaitTest.java index ac18276bf..e3ab0e476 100644 --- a/java/test/src/main/java/org/ray/api/test/WaitTest.java +++ b/java/test/src/main/java/org/ray/api/test/WaitTest.java @@ -4,14 +4,12 @@ import com.google.common.collect.ImmutableList; import java.util.List; import org.junit.Assert; import org.junit.Test; -import org.junit.runner.RunWith; import org.ray.api.Ray; import org.ray.api.RayObject; import org.ray.api.WaitResult; import org.ray.api.annotation.RayRemote; -@RunWith(MyRunner.class) -public class WaitTest { +public class WaitTest extends BaseTest { @RayRemote private static String hi() {