commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sgoes...@apache.org
Subject svn commit: r793939 - in /commons/proper/exec/trunk/src/test: java/org/apache/commons/exec/DefaultExecutorTest.java scripts/exec41.bat scripts/exec41.sh
Date Tue, 14 Jul 2009 15:23:56 GMT
Author: sgoeschl
Date: Tue Jul 14 15:23:55 2009
New Revision: 793939

URL: http://svn.apache.org/viewvc?rev=793939&view=rev
Log:
[EXEC-41] Added regression test for EXEC-41 but did not apply the patch since it does not
pass the test

Added:
    commons/proper/exec/trunk/src/test/scripts/exec41.bat
    commons/proper/exec/trunk/src/test/scripts/exec41.sh   (with props)
Modified:
    commons/proper/exec/trunk/src/test/java/org/apache/commons/exec/DefaultExecutorTest.java

Modified: commons/proper/exec/trunk/src/test/java/org/apache/commons/exec/DefaultExecutorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/exec/trunk/src/test/java/org/apache/commons/exec/DefaultExecutorTest.java?rev=793939&r1=793938&r2=793939&view=diff
==============================================================================
--- commons/proper/exec/trunk/src/test/java/org/apache/commons/exec/DefaultExecutorTest.java
(original)
+++ commons/proper/exec/trunk/src/test/java/org/apache/commons/exec/DefaultExecutorTest.java
Tue Jul 14 15:23:55 2009
@@ -38,6 +38,7 @@
     private File foreverTestScript = TestUtil.resolveScriptForOS(testDir + "/forever");
     private File nonExistingTestScript = TestUtil.resolveScriptForOS(testDir + "/grmpffffff");
     private File redirectScript = TestUtil.resolveScriptForOS(testDir + "/redirect");
+    private File exec41Script = TestUtil.resolveScriptForOS(testDir + "/exec41");
 
     // Get suitable exit codes for the OS
     private static final int SUCCESS_STATUS; // test script successful exit code
@@ -425,4 +426,51 @@
          assertFalse(exec.isFailure(exitValue));
          assertTrue(outfile.exists());
      }
+
+    /**
+     * Test the patch for EXEC-41 (https://issues.apache.org/jira/browse/EXEC-41).
+     *
+     * When a process runs longer than allowed by a configured watchdog's
+     * timeout, the watchdog tries to destroy it and then DefaultExecutor
+     * tries to clean up by joining with all installed pump stream threads.
+     * Problem is, that sometimes the native process doesn't die and thus
+     * streams aren't closed and the stream threads do not complete.
+     *
+     * The patch provides setAlwaysWaitForStreamThreads(boolean) method
+     * in PumpStreamHandler. By default, alwaysWaitForStreamThreads is set
+     * to true to preserve the current behavior. If set to false, and
+     * process is killed by watchdog, DefaultExecutor's call into
+     * ErrorStreamHandler.stop will NOT join the stream threads and
+     * DefaultExecutor will NOT attempt to close the streams, so the
+     * executor's thread won't get stuck.
+     */
+    public void testExec41() throws Exception {
+
+		CommandLine cmdLine = new CommandLine(exec41Script);
+		cmdLine.addArgument("10"); // sleep 10 secs
+		DefaultExecutor executor = new DefaultExecutor();
+		ExecuteWatchdog watchdog = new ExecuteWatchdog(2*1000); // allow process no more than 2
secs
+		executor.setWatchdog(watchdog);
+		//ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		//executor.setStreamHandler(new PumpStreamHandler(baos));
+
+		long startTime = System.currentTimeMillis();
+
+		try {
+			executor.execute(cmdLine);
+		} catch (ExecuteException e) {
+			System.out.println(e);
+		}
+
+        long duration = System.currentTimeMillis() - startTime;
+        
+		System.out.println("Process completed in " + duration +" millis; below is its output");
+		// System.out.println(baos);
+		if (watchdog.killedProcess()) {
+			System.out.println("Process timed out and was killed.");
+		}
+
+        assertTrue("The process was not killed by the watchdog", watchdog.killedProcess());
       
+        // assertTrue("The process was not properly killed because it took " + duration +
" ms to execute", duration < 5*1000);
+    }
 }

Added: commons/proper/exec/trunk/src/test/scripts/exec41.bat
URL: http://svn.apache.org/viewvc/commons/proper/exec/trunk/src/test/scripts/exec41.bat?rev=793939&view=auto
==============================================================================
--- commons/proper/exec/trunk/src/test/scripts/exec41.bat (added)
+++ commons/proper/exec/trunk/src/test/scripts/exec41.bat Tue Jul 14 15:23:55 2009
@@ -0,0 +1,21 @@
+@ECHO OFF
+
+REM Little batch file to run nearly foerver
+REM see http://malektips.com/dos0017.html
+REM
+REM Licensed to the Apache Software Foundation (ASF) under one or more
+REM contributor license agreements.  See the NOTICE file distributed with
+REM this work for additional information regarding copyright ownership.
+REM The ASF licenses this file to You under the Apache License, Version 2.0
+REM (the "License"); you may not use this file except in compliance with
+REM the License.  You may obtain a copy of the License at
+REM
+REM      http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+
+ping -n %1 -w 1000 127.0.0.1
\ No newline at end of file

Added: commons/proper/exec/trunk/src/test/scripts/exec41.sh
URL: http://svn.apache.org/viewvc/commons/proper/exec/trunk/src/test/scripts/exec41.sh?rev=793939&view=auto
==============================================================================
--- commons/proper/exec/trunk/src/test/scripts/exec41.sh (added)
+++ commons/proper/exec/trunk/src/test/scripts/exec41.sh Tue Jul 14 15:23:55 2009
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+ping -c $1 127.0.0.1

Propchange: commons/proper/exec/trunk/src/test/scripts/exec41.sh
------------------------------------------------------------------------------
    svn:executable = *



Mime
View raw message