git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277571 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -1,5 +1,5 @@ | |||||
| /* | /* | ||||
| * Copyright 2000-2004 The Apache Software Foundation | |||||
| * Copyright 2000-2005 The Apache Software Foundation | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -15,9 +15,10 @@ | |||||
| * | * | ||||
| */ | */ | ||||
| package org.apache.tools.ant.taskdefs; | package org.apache.tools.ant.taskdefs; | ||||
| import java.io.File; | |||||
| import java.io.IOException; | |||||
| import java.io.PrintStream; | import java.io.PrintStream; | ||||
| import java.lang.reflect.InvocationTargetException; | import java.lang.reflect.InvocationTargetException; | ||||
| import java.lang.reflect.Method; | import java.lang.reflect.Method; | ||||
| @@ -25,11 +26,14 @@ import java.lang.reflect.Modifier; | |||||
| import org.apache.tools.ant.AntClassLoader; | import org.apache.tools.ant.AntClassLoader; | ||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.ProjectComponent; | |||||
| import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
| import org.apache.tools.ant.taskdefs.condition.Os; | |||||
| import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
| import org.apache.tools.ant.types.CommandlineJava; | import org.apache.tools.ant.types.CommandlineJava; | ||||
| import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
| import org.apache.tools.ant.types.Permissions; | import org.apache.tools.ant.types.Permissions; | ||||
| import org.apache.tools.ant.util.JavaEnvUtils; | |||||
| import org.apache.tools.ant.util.TimeoutObserver; | import org.apache.tools.ant.util.TimeoutObserver; | ||||
| import org.apache.tools.ant.util.Watchdog; | import org.apache.tools.ant.util.Watchdog; | ||||
| @@ -226,4 +230,76 @@ public class ExecuteJava implements Runnable, TimeoutObserver { | |||||
| public synchronized boolean killedProcess() { | public synchronized boolean killedProcess() { | ||||
| return timedOut; | return timedOut; | ||||
| } | } | ||||
| /** | |||||
| * Runs the Java command in a separate VM, this does not give you | |||||
| * the full flexibility of the Java task, but may be enough for | |||||
| * simple needs. | |||||
| * | |||||
| * @since Ant 1.6.3 | |||||
| */ | |||||
| public int fork(ProjectComponent pc) throws BuildException { | |||||
| CommandlineJava cmdl = new CommandlineJava(); | |||||
| cmdl.setClassname(javaCommand.getExecutable()); | |||||
| String[] args = javaCommand.getArguments(); | |||||
| for (int i = 0; i < args.length; i++) { | |||||
| cmdl.createArgument().setValue(args[i]); | |||||
| } | |||||
| if (classpath != null) { | |||||
| cmdl.createClasspath(pc.getProject()).append(classpath); | |||||
| } | |||||
| if (sysProperties != null) { | |||||
| cmdl.addSysproperties(sysProperties); | |||||
| } | |||||
| Redirector redirector = new Redirector(pc); | |||||
| Execute exe | |||||
| = new Execute(redirector.createHandler(), | |||||
| timeout == null | |||||
| ? null | |||||
| : new ExecuteWatchdog(timeout.longValue())); | |||||
| exe.setAntRun(pc.getProject()); | |||||
| if (Os.isFamily("openvms")) { | |||||
| setupCommandLineForVMS(exe, cmdl.getCommandline()); | |||||
| } else { | |||||
| exe.setCommandline(cmdl.getCommandline()); | |||||
| } | |||||
| try { | |||||
| int rc = exe.execute(); | |||||
| redirector.complete(); | |||||
| timedOut = exe.killedProcess(); | |||||
| return rc; | |||||
| } catch (IOException e) { | |||||
| throw new BuildException(e); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * On VMS platform, we need to create a special java options file | |||||
| * containing the arguments and classpath for the java command. | |||||
| * The special file is supported by the "-V" switch on the VMS JVM. | |||||
| * | |||||
| * @param exe | |||||
| * @param command | |||||
| */ | |||||
| public static void setupCommandLineForVMS(Execute exe, String[] command) { | |||||
| //Use the VM launcher instead of shell launcher on VMS | |||||
| exe.setVMLauncher(true); | |||||
| File vmsJavaOptionFile = null; | |||||
| try { | |||||
| String [] args = new String[command.length - 1]; | |||||
| System.arraycopy(command, 1, args, 0, command.length - 1); | |||||
| vmsJavaOptionFile = JavaEnvUtils.createVmsJavaOptionFile(args); | |||||
| //we mark the file to be deleted on exit. | |||||
| //the alternative would be to cache the filename and delete | |||||
| //after execution finished, which is much better for long-lived runtimes | |||||
| //though spawning complicates things... | |||||
| vmsJavaOptionFile.deleteOnExit(); | |||||
| String [] vmsCmd = {command[0], "-V", vmsJavaOptionFile.getPath()}; | |||||
| exe.setCommandline(vmsCmd); | |||||
| } catch (IOException e) { | |||||
| throw new BuildException("Failed to create a temporary file for \"-V\" switch"); | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -840,23 +840,7 @@ public class Java extends Task { | |||||
| * @param command | * @param command | ||||
| */ | */ | ||||
| private void setupCommandLineForVMS(Execute exe, String[] command) { | private void setupCommandLineForVMS(Execute exe, String[] command) { | ||||
| //Use the VM launcher instead of shell launcher on VMS | |||||
| exe.setVMLauncher(true); | |||||
| File vmsJavaOptionFile = null; | |||||
| try { | |||||
| String [] args = new String[command.length - 1]; | |||||
| System.arraycopy(command, 1, args, 0, command.length - 1); | |||||
| vmsJavaOptionFile = JavaEnvUtils.createVmsJavaOptionFile(args); | |||||
| //we mark the file to be deleted on exit. | |||||
| //the alternative would be to cache the filename and delete | |||||
| //after execution finished, which is much better for long-lived runtimes | |||||
| //though spawning complicates things... | |||||
| vmsJavaOptionFile.deleteOnExit(); | |||||
| String [] vmsCmd = {command[0], "-V", vmsJavaOptionFile.getPath()}; | |||||
| exe.setCommandline(vmsCmd); | |||||
| } catch (IOException e) { | |||||
| throw new BuildException("Failed to create a temporary file for \"-V\" switch"); | |||||
| } | |||||
| ExecuteJava.setupCommandLineForVMS(exe, command); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -1,5 +1,5 @@ | |||||
| /* | /* | ||||
| * Copyright 2000-2004 The Apache Software Foundation | |||||
| * Copyright 2000-2005 The Apache Software Foundation | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -21,6 +21,7 @@ import java.io.ByteArrayOutputStream; | |||||
| import java.io.IOException; | import java.io.IOException; | ||||
| import java.io.OutputStream; | import java.io.OutputStream; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.ProjectComponent; | |||||
| import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
| @@ -48,7 +49,7 @@ public class LogOutputStream extends OutputStream { | |||||
| = new ByteArrayOutputStream(INTIAL_SIZE); | = new ByteArrayOutputStream(INTIAL_SIZE); | ||||
| private boolean skip = false; | private boolean skip = false; | ||||
| private Task task; | |||||
| private ProjectComponent pc; | |||||
| private int level = Project.MSG_INFO; | private int level = Project.MSG_INFO; | ||||
| /** | /** | ||||
| @@ -58,7 +59,18 @@ public class LogOutputStream extends OutputStream { | |||||
| * @param level loglevel used to log data written to this stream. | * @param level loglevel used to log data written to this stream. | ||||
| */ | */ | ||||
| public LogOutputStream(Task task, int level) { | public LogOutputStream(Task task, int level) { | ||||
| this.task = task; | |||||
| this((ProjectComponent) task, level); | |||||
| } | |||||
| /** | |||||
| * Creates a new instance of this class. | |||||
| * | |||||
| * @param task the task for whom to log | |||||
| * @param level loglevel used to log data written to this stream. | |||||
| * @since Ant 1.6.3 | |||||
| */ | |||||
| public LogOutputStream(ProjectComponent pc, int level) { | |||||
| this.pc = pc; | |||||
| this.level = level; | this.level = level; | ||||
| } | } | ||||
| @@ -114,7 +126,7 @@ public class LogOutputStream extends OutputStream { | |||||
| * @param line the line to log. | * @param line the line to log. | ||||
| */ | */ | ||||
| protected void processLine(String line, int level) { | protected void processLine(String line, int level) { | ||||
| task.log(line, level); | |||||
| pc.log(line, level); | |||||
| } | } | ||||
| @@ -1,5 +1,5 @@ | |||||
| /* | /* | ||||
| * Copyright 2000,2002,2004 The Apache Software Foundation | |||||
| * Copyright 2000,2002,2004-2005 The Apache Software Foundation | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -19,6 +19,7 @@ package org.apache.tools.ant.taskdefs; | |||||
| import java.io.IOException; | import java.io.IOException; | ||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.ProjectComponent; | |||||
| import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
| /** | /** | ||||
| @@ -36,8 +37,19 @@ public class LogStreamHandler extends PumpStreamHandler { | |||||
| * @param errlevel the loglevel used to log standard error | * @param errlevel the loglevel used to log standard error | ||||
| */ | */ | ||||
| public LogStreamHandler(Task task, int outlevel, int errlevel) { | public LogStreamHandler(Task task, int outlevel, int errlevel) { | ||||
| super(new LogOutputStream(task, outlevel), | |||||
| new LogOutputStream(task, errlevel)); | |||||
| this((ProjectComponent) task, outlevel, errlevel); | |||||
| } | |||||
| /** | |||||
| * Creates log stream handler | |||||
| * | |||||
| * @param pc the project component for whom to log | |||||
| * @param outlevel the loglevel used to log standard output | |||||
| * @param errlevel the loglevel used to log standard error | |||||
| */ | |||||
| public LogStreamHandler(ProjectComponent pc, int outlevel, int errlevel) { | |||||
| super(new LogOutputStream(pc, outlevel), | |||||
| new LogOutputStream(pc, errlevel)); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -31,8 +31,9 @@ import java.io.ByteArrayOutputStream; | |||||
| import java.util.Arrays; | import java.util.Arrays; | ||||
| import java.util.Vector; | import java.util.Vector; | ||||
| import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.ProjectComponent; | |||||
| import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.filters.util.ChainReaderHelper; | import org.apache.tools.ant.filters.util.ChainReaderHelper; | ||||
| import org.apache.tools.ant.util.StringUtils; | import org.apache.tools.ant.util.StringUtils; | ||||
| @@ -46,7 +47,7 @@ import org.apache.tools.ant.util.KeepAliveOutputStream; | |||||
| /** | /** | ||||
| * The Redirector class manages the setup and connection of | * The Redirector class manages the setup and connection of | ||||
| * input and output redirection for an Ant task. | |||||
| * input and output redirection for an Ant project component. | |||||
| * | * | ||||
| * @since Ant 1.6 | * @since Ant 1.6 | ||||
| */ | */ | ||||
| @@ -125,7 +126,7 @@ public class Redirector { | |||||
| private boolean createEmptyFiles = true; | private boolean createEmptyFiles = true; | ||||
| /** The task for which this redirector is working */ | /** The task for which this redirector is working */ | ||||
| private Task managingTask; | |||||
| private ProjectComponent managingTask; | |||||
| /** The stream for output data */ | /** The stream for output data */ | ||||
| private OutputStream outputStream = null; | private OutputStream outputStream = null; | ||||
| @@ -172,6 +173,17 @@ public class Redirector { | |||||
| * @param managingTask the task for which the redirector is to work | * @param managingTask the task for which the redirector is to work | ||||
| */ | */ | ||||
| public Redirector(Task managingTask) { | public Redirector(Task managingTask) { | ||||
| this((ProjectComponent) managingTask); | |||||
| } | |||||
| /** | |||||
| * Create a redirector instance for the given task | |||||
| * | |||||
| * @param managingTask the project component for which the | |||||
| * redirector is to work | |||||
| * @since Ant 1.6.3 | |||||
| */ | |||||
| public Redirector(ProjectComponent managingTask) { | |||||
| this.managingTask = managingTask; | this.managingTask = managingTask; | ||||
| } | } | ||||
| @@ -498,7 +510,7 @@ public class Redirector { | |||||
| || !(outputEncoding.equalsIgnoreCase(inputEncoding))) { | || !(outputEncoding.equalsIgnoreCase(inputEncoding))) { | ||||
| try { | try { | ||||
| LeadPipeInputStream snk = new LeadPipeInputStream(); | LeadPipeInputStream snk = new LeadPipeInputStream(); | ||||
| snk.setManagingTask(managingTask); | |||||
| snk.setManagingComponent(managingTask); | |||||
| InputStream outPumpIn = snk; | InputStream outPumpIn = snk; | ||||
| @@ -527,7 +539,7 @@ public class Redirector { | |||||
| || !(errorEncoding.equalsIgnoreCase(inputEncoding))) { | || !(errorEncoding.equalsIgnoreCase(inputEncoding))) { | ||||
| try { | try { | ||||
| LeadPipeInputStream snk = new LeadPipeInputStream(); | LeadPipeInputStream snk = new LeadPipeInputStream(); | ||||
| snk.setManagingTask(managingTask); | |||||
| snk.setManagingComponent(managingTask); | |||||
| InputStream errPumpIn = snk; | InputStream errPumpIn = snk; | ||||
| @@ -563,7 +575,7 @@ public class Redirector { | |||||
| } catch (IOException eyeOhEx) { | } catch (IOException eyeOhEx) { | ||||
| throw new BuildException(eyeOhEx); | throw new BuildException(eyeOhEx); | ||||
| } | } | ||||
| ((ConcatFileInputStream) inputStream).setManagingTask(managingTask); | |||||
| ((ConcatFileInputStream) inputStream).setManagingComponent(managingTask); | |||||
| } else if (inputString != null) { | } else if (inputString != null) { | ||||
| managingTask.log("Using input \"" + inputString + "\"", | managingTask.log("Using input \"" + inputString + "\"", | ||||
| Project.MSG_VERBOSE); | Project.MSG_VERBOSE); | ||||
| @@ -191,6 +191,16 @@ public class CommandlineJava implements Cloneable { | |||||
| propertySets.addElement(ps); | propertySets.addElement(ps); | ||||
| } | } | ||||
| /** | |||||
| * add a propertyset to the total set | |||||
| * @param ps the new property set | |||||
| * @since Ant 1.6.3 | |||||
| */ | |||||
| public void addSysproperties(SysProperties ps) { | |||||
| variables.addAll(ps.variables); | |||||
| propertySets.addAll(ps.propertySets); | |||||
| } | |||||
| /** | /** | ||||
| * merge all property sets into a single Properties object | * merge all property sets into a single Properties object | ||||
| * @return the merged object | * @return the merged object | ||||
| @@ -204,6 +214,7 @@ public class CommandlineJava implements Cloneable { | |||||
| } | } | ||||
| return p; | return p; | ||||
| } | } | ||||
| } | } | ||||
| /** | /** | ||||
| @@ -246,6 +257,15 @@ public class CommandlineJava implements Cloneable { | |||||
| sysProperties.addSyspropertyset(sysp); | sysProperties.addSyspropertyset(sysp); | ||||
| } | } | ||||
| /** | |||||
| * add a set of system properties | |||||
| * @param sysp a set of properties | |||||
| * @since Ant 1.6.3 | |||||
| */ | |||||
| public void addSysproperties(SysProperties sysp) { | |||||
| sysProperties.addSysproperties(sysp); | |||||
| } | |||||
| /** | /** | ||||
| * Set the executable used to start the new JVM. | * Set the executable used to start the new JVM. | ||||
| * @param vm the executable to use | * @param vm the executable to use | ||||
| @@ -23,8 +23,9 @@ import java.io.BufferedInputStream; | |||||
| import java.io.IOException; | import java.io.IOException; | ||||
| import java.io.FileInputStream; | import java.io.FileInputStream; | ||||
| import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.ProjectComponent; | |||||
| import org.apache.tools.ant.Task; | |||||
| /** | /** | ||||
| * Special <CODE>InputStream</CODE> that will | * Special <CODE>InputStream</CODE> that will | ||||
| @@ -37,7 +38,7 @@ public class ConcatFileInputStream extends InputStream { | |||||
| private boolean eof = false; | private boolean eof = false; | ||||
| private File[] file; | private File[] file; | ||||
| private InputStream currentStream; | private InputStream currentStream; | ||||
| private Task managingTask; | |||||
| private ProjectComponent managingPc; | |||||
| /** | /** | ||||
| * Construct a new <CODE>ConcatFileInputStream</CODE> | * Construct a new <CODE>ConcatFileInputStream</CODE> | ||||
| @@ -71,7 +72,16 @@ public class ConcatFileInputStream extends InputStream { | |||||
| * @param task the managing <CODE>Task</CODE>. | * @param task the managing <CODE>Task</CODE>. | ||||
| */ | */ | ||||
| public void setManagingTask(Task task) { | public void setManagingTask(Task task) { | ||||
| this.managingTask = task; | |||||
| setManagingComponent(task); | |||||
| } | |||||
| /** | |||||
| * Set a managing <CODE>Task</CODE> for | |||||
| * this <CODE>ConcatFileInputStream</CODE>. | |||||
| * @param task the managing <CODE>Task</CODE>. | |||||
| */ | |||||
| public void setManagingComponent(ProjectComponent pc) { | |||||
| this.managingPc = pc; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -80,8 +90,8 @@ public class ConcatFileInputStream extends InputStream { | |||||
| * @param loglevel the <CODE>int</CODE> logging level. | * @param loglevel the <CODE>int</CODE> logging level. | ||||
| */ | */ | ||||
| public void log(String message, int loglevel) { | public void log(String message, int loglevel) { | ||||
| if (managingTask != null) { | |||||
| managingTask.log(message, loglevel); | |||||
| if (managingPc != null) { | |||||
| managingPc.log(message, loglevel); | |||||
| } else { | } else { | ||||
| if (loglevel > Project.MSG_WARN) { | if (loglevel > Project.MSG_WARN) { | ||||
| System.out.println(message); | System.out.println(message); | ||||
| @@ -21,6 +21,7 @@ import java.io.IOException; | |||||
| import java.io.PipedInputStream; | import java.io.PipedInputStream; | ||||
| import java.io.PipedOutputStream; | import java.io.PipedOutputStream; | ||||
| import org.apache.tools.ant.ProjectComponent; | |||||
| import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| @@ -29,7 +30,7 @@ import org.apache.tools.ant.Project; | |||||
| * when the writing <CODE>Thread</CODE> is no longer alive. | * when the writing <CODE>Thread</CODE> is no longer alive. | ||||
| */ | */ | ||||
| public class LeadPipeInputStream extends PipedInputStream { | public class LeadPipeInputStream extends PipedInputStream { | ||||
| private Task managingTask; | |||||
| private ProjectComponent managingPc; | |||||
| /** | /** | ||||
| * Construct a new <CODE>LeadPipeInputStream</CODE>. | * Construct a new <CODE>LeadPipeInputStream</CODE>. | ||||
| @@ -73,7 +74,16 @@ public class LeadPipeInputStream extends PipedInputStream { | |||||
| * @param task the managing <CODE>Task</CODE>. | * @param task the managing <CODE>Task</CODE>. | ||||
| */ | */ | ||||
| public void setManagingTask(Task task) { | public void setManagingTask(Task task) { | ||||
| this.managingTask = task; | |||||
| setManagingComponent(task); | |||||
| } | |||||
| /** | |||||
| * Set a managing <CODE>ProjectComponent</CODE> for | |||||
| * this <CODE>LeadPipeInputStream</CODE>. | |||||
| * @param pc the managing <CODE>ProjectComponent</CODE>. | |||||
| */ | |||||
| public void setManagingComponent(ProjectComponent pc) { | |||||
| this.managingPc = pc; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -82,8 +92,8 @@ public class LeadPipeInputStream extends PipedInputStream { | |||||
| * @param loglevel the <CODE>int</CODE> logging level. | * @param loglevel the <CODE>int</CODE> logging level. | ||||
| */ | */ | ||||
| public void log(String message, int loglevel) { | public void log(String message, int loglevel) { | ||||
| if (managingTask != null) { | |||||
| managingTask.log(message, loglevel); | |||||
| if (managingPc != null) { | |||||
| managingPc.log(message, loglevel); | |||||
| } else { | } else { | ||||
| if (loglevel > Project.MSG_WARN) { | if (loglevel > Project.MSG_WARN) { | ||||
| System.out.println(message); | System.out.println(message); | ||||
| @@ -1,5 +1,5 @@ | |||||
| /* | /* | ||||
| * Copyright 2002,2004 The Apache Software Foundation | |||||
| * Copyright 2002,2004-2005 The Apache Software Foundation | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -40,6 +40,7 @@ public class ExecuteJavaTest extends TestCase { | |||||
| private ExecuteJava ej; | private ExecuteJava ej; | ||||
| private Project project; | private Project project; | ||||
| private Path cp; | |||||
| public ExecuteJavaTest(String name) { | public ExecuteJavaTest(String name) { | ||||
| super(name); | super(name); | ||||
| @@ -50,7 +51,8 @@ public class ExecuteJavaTest extends TestCase { | |||||
| ej.setTimeout(new Long(TIME_OUT)); | ej.setTimeout(new Long(TIME_OUT)); | ||||
| project = new Project(); | project = new Project(); | ||||
| project.setBasedir("."); | project.setBasedir("."); | ||||
| ej.setClasspath(new Path(project, getTestClassPath())); | |||||
| cp = new Path(project, getTestClassPath()); | |||||
| ej.setClasspath(cp); | |||||
| } | } | ||||
| private Commandline getCommandline(int timetorun) throws Exception { | private Commandline getCommandline(int timetorun) throws Exception { | ||||
| @@ -85,6 +87,30 @@ public class ExecuteJavaTest extends TestCase { | |||||
| } | } | ||||
| public void testNoTimeOutForked() throws Exception { | |||||
| Commandline cmd = getCommandline(TIME_OUT/2); | |||||
| ej.setJavaCommand(cmd); | |||||
| ej.fork(cp); | |||||
| assertTrue("process should not have been killed", !ej.killedProcess()); | |||||
| } | |||||
| // test that the watchdog ends the process | |||||
| public void testTimeOutForked() throws Exception { | |||||
| Commandline cmd = getCommandline(TIME_OUT*2); | |||||
| ej.setJavaCommand(cmd); | |||||
| long now = System.currentTimeMillis(); | |||||
| ej.fork(cp); | |||||
| long elapsed = System.currentTimeMillis() - now; | |||||
| assertTrue("process should have been killed", ej.killedProcess()); | |||||
| 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); | |||||
| } | |||||
| /** | /** | ||||
| * Dangerous method to obtain the classpath for the test. This is | * Dangerous method to obtain the classpath for the test. This is | ||||
| * severely tighted to the build.xml properties. | * severely tighted to the build.xml properties. | ||||