From 4f7581e3df051ca5b15a7876c19815cf0e04c271 Mon Sep 17 00:00:00 2001 From: Steve Loughran Date: Sat, 2 Mar 2002 00:21:17 +0000 Subject: [PATCH] attack of the tab police git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271645 13f79535-47bb-0310-9956-ffa450edef68 --- build.xml | 21 +- .../ant/taskdefs/ExecuteWatchdogTest.java | 252 +++++++++--------- 2 files changed, 144 insertions(+), 129 deletions(-) diff --git a/build.xml b/build.xml index 46b60596f..593503c94 100644 --- a/build.xml +++ b/build.xml @@ -433,6 +433,7 @@ + + + + + + + + + + + offline=${offline} + + - + - - + + 0){ - System.err.println("ERROR:"); - System.err.println(err); - } - } - return retcode; - } - - public void testNoTimeOut() throws Exception { - Process process = getProcess(TIME_OUT/2); - watchdog.start(process); - int retCode = waitForEnd(process); - assertTrue("process should not have been killed", !watchdog.killedProcess()); - assertEquals(0, retCode); - } - - // test that the watchdog ends the process - public void testTimeOut() throws Exception { - Process process = getProcess(TIME_OUT*2); - long now = System.currentTimeMillis(); - watchdog.start(process); - int retCode = process.waitFor(); - long elapsed = System.currentTimeMillis() - now; - assertTrue("process should have been killed", watchdog.killedProcess()); - // assertTrue("return code is invalid: " + retCode, retCode!=0); - assertTrue("elapse time of "+elapsed+" ms is less than timeout value of "+TIME_OUT_TEST+" ms", elapsed >= TIME_OUT_TEST); - assertTrue("elapse time of "+elapsed+" ms is greater than run value of "+(TIME_OUT*2)+" ms", elapsed < TIME_OUT*2); - } - - // test a process that runs and failed - public void testFailed() throws Exception { - Process process = getProcess(-1); // process should abort - watchdog.start(process); - int retCode = process.waitFor(); - assertTrue("process should not have been killed", !watchdog.killedProcess()); - assertTrue("return code is invalid: " + retCode, retCode!=0); - } - - public void testManualStop() throws Exception { - final Process process = getProcess(TIME_OUT*2); - watchdog.start(process); - - // I assume that starting this takes less than TIME_OUT/2 ms... - Thread thread = new Thread(){ - public void run(){ - try { - process.waitFor(); - } catch(InterruptedException e){ - // not very nice but will do the job - fail("process interrupted in thread"); - } - } - }; - thread.start(); - - // wait for TIME_OUT/2, there should be about TIME_OUT/2 ms remaining before timeout - thread.join(TIME_OUT/2); - - // now stop the watchdog. - watchdog.stop(); - - // wait for the thread to die, should be the end of the process - thread.join(); - - // process should be dead and well finished - assertEquals(0, process.exitValue()); - assertTrue("process should not have been killed", !watchdog.killedProcess()); - } - - public static class TimeProcess { - public static void main(String[] args) throws Exception { - int time = Integer.parseInt(args[0]); - if (time < 1) { - throw new IllegalArgumentException("Invalid time: " + time); - } - Thread.sleep(time); - } - } + return classpath; + } + + private Process getProcess(int timetorun) throws Exception { + String[] cmdArray = { + "java", "-classpath", TEST_CLASSPATH, + TimeProcess.class.getName(), String.valueOf(timetorun) + }; + //System.out.println("Testing with classpath: " + System.getProperty("java.class.path")); + return Runtime.getRuntime().exec(cmdArray); + } + + private String getErrorOutput(Process p) throws Exception { + BufferedReader err = new BufferedReader( new InputStreamReader(p.getErrorStream()) ); + StringBuffer buf = new StringBuffer(); + String line; + while ( (line = err.readLine()) != null){ + buf.append(line); + } + return buf.toString(); + } + + private int waitForEnd(Process p) throws Exception { + int retcode = p.waitFor(); + if (retcode != 0){ + String err = getErrorOutput(p); + if (err.length() > 0){ + System.err.println("ERROR:"); + System.err.println(err); + } + } + return retcode; + } + + public void testNoTimeOut() throws Exception { + Process process = getProcess(TIME_OUT/2); + watchdog.start(process); + int retCode = waitForEnd(process); + assertTrue("process should not have been killed", !watchdog.killedProcess()); + assertEquals(0, retCode); + } + + // test that the watchdog ends the process + public void testTimeOut() throws Exception { + Process process = getProcess(TIME_OUT*2); + long now = System.currentTimeMillis(); + watchdog.start(process); + int retCode = process.waitFor(); + long elapsed = System.currentTimeMillis() - now; + assertTrue("process should have been killed", watchdog.killedProcess()); + // assertTrue("return code is invalid: " + retCode, retCode!=0); + assertTrue("elapse time of "+elapsed+" ms is less than timeout value of "+TIME_OUT_TEST+" ms", elapsed >= TIME_OUT_TEST); + assertTrue("elapse time of "+elapsed+" ms is greater than run value of "+(TIME_OUT*2)+" ms", elapsed < TIME_OUT*2); + } + + // test a process that runs and failed + public void testFailed() throws Exception { + Process process = getProcess(-1); // process should abort + watchdog.start(process); + int retCode = process.waitFor(); + assertTrue("process should not have been killed", !watchdog.killedProcess()); + assertTrue("return code is invalid: " + retCode, retCode!=0); + } + + public void testManualStop() throws Exception { + final Process process = getProcess(TIME_OUT*2); + watchdog.start(process); + + // I assume that starting this takes less than TIME_OUT/2 ms... + Thread thread = new Thread(){ + public void run(){ + try { + process.waitFor(); + } catch(InterruptedException e){ + // not very nice but will do the job + fail("process interrupted in thread"); + } + } + }; + thread.start(); + + // wait for TIME_OUT/2, there should be about TIME_OUT/2 ms remaining before timeout + thread.join(TIME_OUT/2); + + // now stop the watchdog. + watchdog.stop(); + + // wait for the thread to die, should be the end of the process + thread.join(); + + // process should be dead and well finished + assertEquals(0, process.exitValue()); + assertTrue("process should not have been killed", !watchdog.killedProcess()); + } + + public static class TimeProcess { + public static void main(String[] args) throws Exception { + int time = Integer.parseInt(args[0]); + if (time < 1) { + throw new IllegalArgumentException("Invalid time: " + time); + } + Thread.sleep(time); + } + } }