From 3144ea37831f1cebfdd01a007eb147b98fbdf7f9 Mon Sep 17 00:00:00 2001 From: baunsgaard Date: Wed, 9 Aug 2023 10:16:35 +0200 Subject: [PATCH] [MINOR] Timeout test This commit adds a timeout on all tests of 1000 seconds. this means in practice that the github actions does not stall for 1.5 hours, if something is wrong. --- .../apache/sysds/test/AutomatedTestBase.java | 48 ++++++++++++++----- .../multitenant/MultiTenantTestBase.java | 2 +- 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/test/java/org/apache/sysds/test/AutomatedTestBase.java b/src/test/java/org/apache/sysds/test/AutomatedTestBase.java index 08d7478f07a..aee80e5f1c6 100644 --- a/src/test/java/org/apache/sysds/test/AutomatedTestBase.java +++ b/src/test/java/org/apache/sysds/test/AutomatedTestBase.java @@ -38,6 +38,10 @@ import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; @@ -1435,7 +1439,25 @@ protected ByteArrayOutputStream runTest(Class expectedException, String errMe */ protected ByteArrayOutputStream runTest(boolean newWay, boolean exceptionExpected, Class expectedException, String errMessage, int maxSparkInst) { - + ExecutorService executor = Executors.newSingleThreadExecutor(); + try{ + return executor.submit(() -> + runTestWithTimeout(newWay,exceptionExpected,expectedException,errMessage, maxSparkInst))// + .get(1000, TimeUnit.SECONDS); + } + catch(TimeoutException e){ + throw new RuntimeException("Our tests should run faster than 1000 sec each",e); + } + catch(Exception e){ + throw new RuntimeException(e); + } + finally{ + executor.shutdown(); + } + } + + private ByteArrayOutputStream runTestWithTimeout(boolean newWay, boolean exceptionExpected, Class expectedException, + String errMessage, int maxSparkInst){ String name = ""; final StackTraceElement[] ste = Thread.currentThread().getStackTrace(); for(int i = 0; i < ste.length; i++) { @@ -1443,23 +1465,23 @@ protected ByteArrayOutputStream runTest(boolean newWay, boolean exceptionExpecte name = ste[i - 1].getClassName() + "." + ste[i - 1].getMethodName(); } LOG.info("Test method name: " + name); - + String executionFile = sourceDirectory + selectedTest + ".dml"; - + if(!newWay) { executionFile = executionFile + "t"; ParameterBuilder.setVariablesInScript(sourceDirectory, selectedTest + ".dml", testVariables); } - + // cleanup scratch folder (prevent side effect between tests) cleanupScratchSpace(); - + ArrayList args = new ArrayList<>(); // setup arguments to SystemDS if(DEBUG) { args.add("-Dsystemds.logging=trace"); } - + if(newWay) { // Need a null pointer check because some tests read DML from a string. if(null != fullDMLScriptName) { @@ -1471,15 +1493,15 @@ protected ByteArrayOutputStream runTest(boolean newWay, boolean exceptionExpecte args.add("-f"); args.add(executionFile); } - + addProgramIndependentArguments(args, programArgs); - + // program-specific parameters if(newWay) { for(int i = 0; i < programArgs.length; i++) args.add(programArgs[i]); } - + if(DEBUG) { if(!newWay) TestUtils.printDMLScript(executionFile); @@ -1487,22 +1509,22 @@ protected ByteArrayOutputStream runTest(boolean newWay, boolean exceptionExpecte TestUtils.printDMLScript(fullDMLScriptName); } } - + ByteArrayOutputStream buff = outputBuffering ? new ByteArrayOutputStream() : null; PrintStream old = System.out; if(outputBuffering) System.setOut(new PrintStream(buff)); - + try { String[] dmlScriptArgs = args.toArray(new String[args.size()]); if(LOG.isTraceEnabled()) LOG.trace("arguments to DMLScript: " + Arrays.toString(dmlScriptArgs)); main(dmlScriptArgs); - + if(maxSparkInst > -1 && maxSparkInst < Statistics.getNoOfCompiledSPInst()) fail("Limit of Spark jobs is exceeded: expected: " + maxSparkInst + ", occurred: " + Statistics.getNoOfCompiledSPInst()); - + if(exceptionExpected) fail("expected exception which has not been raised: " + expectedException); } diff --git a/src/test/java/org/apache/sysds/test/functions/federated/multitenant/MultiTenantTestBase.java b/src/test/java/org/apache/sysds/test/functions/federated/multitenant/MultiTenantTestBase.java index 0b4e193ac4d..685acf1ab97 100644 --- a/src/test/java/org/apache/sysds/test/functions/federated/multitenant/MultiTenantTestBase.java +++ b/src/test/java/org/apache/sysds/test/functions/federated/multitenant/MultiTenantTestBase.java @@ -138,7 +138,7 @@ protected String waitForCoordinators() { } protected String waitForCoordinators(int timeout){ - ExecutorService executor = Executors.newCachedThreadPool(); + ExecutorService executor = Executors.newSingleThreadExecutor(); try{ return executor.submit(() -> waitForCoordinatorsActual()).get(timeout, TimeUnit.SECONDS); }