Commit: f3797cad42701eddd3a7232ed21dd8f864d10cb9 Author: Matt Ficken <v-maf...@microsoft.com> Tue, 17 Sep 2013 12:46:21 -0700 Parents: 13dd9d65b5577542bb84ec7304d0fa7ca3af9eb6 Branches: master
Link: http://git.php.net/?p=pftt2.git;a=commitdiff;h=f3797cad42701eddd3a7232ed21dd8f864d10cb9 Log: max char limit option when reading from process Former-commit-id: ff0d9ac940eeab1925297ff2eb9a81355604b3ca Changed paths: M src/com/mostc/pftt/host/AHost.java M src/com/mostc/pftt/host/LocalHost.java M src/com/mostc/pftt/host/SSHHost.java M src/com/mostc/pftt/runner/CliPhpUnitTestCaseRunner.java M src/com/mostc/pftt/runner/CliPhptTestCaseRunner.java
diff --git a/src/com/mostc/pftt/host/AHost.java b/src/com/mostc/pftt/host/AHost.java index f84b37f..d7d2c0a 100644 --- a/src/com/mostc/pftt/host/AHost.java +++ b/src/com/mostc/pftt/host/AHost.java @@ -432,7 +432,7 @@ public abstract class AHost extends Host implements IProgramRunner { // TODO - public abstract void run(ConsoleManager cm, StringBuilder output_sb, Charset charset, int timeout_sec, TestPackRunnerThread thread, int slow_sec, int suspend_seconds) throws IOException, InterruptedException; + public abstract void run(ConsoleManager cm, StringBuilder output_sb, Charset charset, int timeout_sec, TestPackRunnerThread thread, int slow_sec, int suspend_seconds, int max_chars) throws IOException, InterruptedException; } // end public abstract class ExecHandle /** checks exit code to see if it means process crashed diff --git a/src/com/mostc/pftt/host/LocalHost.java b/src/com/mostc/pftt/host/LocalHost.java index 4140526..d96a5df 100644 --- a/src/com/mostc/pftt/host/LocalHost.java +++ b/src/com/mostc/pftt/host/LocalHost.java @@ -252,7 +252,7 @@ public class LocalHost extends AHost { StringBuilder output_sb = new StringBuilder(1024); - eh.run(null, output_sb, charset, timeout, thread, thread_slow_sec, 0); + eh.run(null, output_sb, charset, timeout, thread, thread_slow_sec, 0, IOUtil.HALF_MEGABYTE); @@ -417,7 +417,7 @@ public class LocalHost extends AHost { } } - final Thread close_thread = new Thread() { + final Thread close_thread = TimerUtil.runThread("Close", new Runnable() { @Override public void run() { // may take multiple tries to make it exit (lots of processes, certain OSes, etc...) @@ -545,12 +545,10 @@ public class LocalHost extends AHost { process.set(null); System.gc(); } // end public void run - }; - close_thread.setName("Close"+close_thread.getName()); // label this thread so it stands out in profiler - close_thread.start(); + }); } // end public void close - protected void run(StringBuilder output_sb, Charset charset, int suspend_seconds) throws IOException, InterruptedException { + protected void run(StringBuilder output_sb, int max_chars, Charset charset, int suspend_seconds) throws IOException, InterruptedException { final Process p = process.get(); if (p==null) return; @@ -578,7 +576,7 @@ public class LocalHost extends AHost { // // read process' output (block until #close or exit) - exec_copy_lines(output_sb, stdout, charset); + exec_copy_lines(output_sb, max_chars, stdout, charset); // ignores STDERR // wait for process exit (shouldn't get here until exit or #close though) @@ -657,53 +655,49 @@ public class LocalHost extends AHost { } // end protected void run @SuppressWarnings("deprecation") - protected void exec_copy_lines(final StringBuilder sb, final InputStream in, final Charset charset) throws IOException { + protected void exec_copy_lines(final StringBuilder sb, final int max_chars, final InputStream in, final Charset charset) throws IOException { if (isWindows()) { final AtomicBoolean copy_thread_lock = new AtomicBoolean(true); - Thread copy_thread = new Thread() { + Thread copy_thread = TimerUtil.runThread("ExecCopyLines", new Runnable() { public void run() { try { - do_exec_copy_lines(sb, in, charset); + do_exec_copy_lines(sb, max_chars, in, charset); copy_thread_lock.set(false); synchronized(run) { run.notifyAll(); } } catch (IOException e) { - // TODO Auto-generated catch block e.printStackTrace(); } } - }; - copy_thread.setName("Copy"+copy_thread.getName()); - copy_thread.setDaemon(true); + }); copy_thread.setUncaughtExceptionHandler(IGNORE_EXCEPTION_HANDLER); - copy_thread.start(); while (true) { synchronized(run) { try { - run.wait(); + run.wait(30000); } catch ( InterruptedException ex ) {} } - if (!copy_thread_lock.get()) { - // stopped normally - break; - } else if (!run.get()) { + if (!run.get()) { // try killing copy thread since its still running after it was supposed to stop copy_thread.stop(new RuntimeException()); break; + } else if (!copy_thread_lock.get()) { + // stopped normally + break; } } } else { - do_exec_copy_lines(sb, in, charset); + do_exec_copy_lines(sb, max_chars, in, charset); } } - protected void do_exec_copy_lines(StringBuilder sb, InputStream in, Charset charset) throws IOException { + protected void do_exec_copy_lines(StringBuilder sb, int max_chars, InputStream in, Charset charset) throws IOException { DefaultCharsetDeciderDecoder d = charset == null ? null : PhptTestCase.newCharsetDeciderDecoder(); ByLineReader reader = charset == null ? new NoCharsetByLineReader(new java.io.BufferedInputStream(in)) : new MultiCharsetByLineReader(in, d); String line; try { - while (reader.hasMoreLines()&&run.get()) { + while (reader.hasMoreLines()&&run.get()&&(max_chars<1||sb.length()<max_chars)) { line = reader.readLine(); if (line==null) break; @@ -748,7 +742,7 @@ public class LocalHost extends AHost { } @Override - public void run(ConsoleManager cm, StringBuilder output_sb, Charset charset, int timeout_sec, TestPackRunnerThread thread, int thread_slow_sec, int suspend_seconds) throws IOException, InterruptedException { + public void run(ConsoleManager cm, StringBuilder output_sb, Charset charset, int timeout_sec, TestPackRunnerThread thread, int thread_slow_sec, int suspend_seconds, int max_chars) throws IOException, InterruptedException { TimerThread a = null, b = null; if (thread!=null && thread_slow_sec>NO_TIMEOUT) { b = TimerUtil.waitSeconds(thread_slow_sec, new ThreadSlowTask(thread)); @@ -758,7 +752,7 @@ public class LocalHost extends AHost { a = TimerUtil.waitSeconds(timeout_sec, new ExitMonitorTask(cm, this)); } - this.run(output_sb, charset, suspend_seconds); + this.run(output_sb, max_chars, charset, suspend_seconds); if (a!=null) a.close(); diff --git a/src/com/mostc/pftt/host/SSHHost.java b/src/com/mostc/pftt/host/SSHHost.java index 5fe1288..44a578e 100644 --- a/src/com/mostc/pftt/host/SSHHost.java +++ b/src/com/mostc/pftt/host/SSHHost.java @@ -465,7 +465,7 @@ public class SSHHost extends RemoteHost { } @Override - public void run(ConsoleManager cm, StringBuilder output_sb, Charset charset, int timeout_sec, final TestPackRunnerThread thread, int slow_sec, int suspend_seconds) throws IOException, InterruptedException { + public void run(ConsoleManager cm, StringBuilder output_sb, Charset charset, int timeout_sec, final TestPackRunnerThread thread, int slow_sec, int suspend_seconds, int max_chars) throws IOException, InterruptedException { do_run(this, session, charset, timeout_sec, thread, slow_sec); output_sb.append(out.toString()); } diff --git a/src/com/mostc/pftt/runner/CliPhpUnitTestCaseRunner.java b/src/com/mostc/pftt/runner/CliPhpUnitTestCaseRunner.java index 58621b5..b7b63a7 100644 --- a/src/com/mostc/pftt/runner/CliPhpUnitTestCaseRunner.java +++ b/src/com/mostc/pftt/runner/CliPhpUnitTestCaseRunner.java @@ -3,6 +3,7 @@ package com.mostc.pftt.runner; import java.io.IOException; import java.util.Map; +import com.github.mattficken.io.IOUtil; import com.mostc.pftt.host.AHost; import com.mostc.pftt.host.AHost.ExecHandle; import com.mostc.pftt.model.app.PhpUnitTestCase; @@ -45,7 +46,8 @@ public class CliPhpUnitTestCaseRunner extends AbstractPhpUnitTestCaseRunner { null, getMaxTestRuntimeSeconds(), null, - 0, cm.getSuspendSeconds() + 0, cm.getSuspendSeconds(), + IOUtil.HALF_MEGABYTE ); output_str = output_sb.toString(); diff --git a/src/com/mostc/pftt/runner/CliPhptTestCaseRunner.java b/src/com/mostc/pftt/runner/CliPhptTestCaseRunner.java index 579df29..2f0785d 100644 --- a/src/com/mostc/pftt/runner/CliPhptTestCaseRunner.java +++ b/src/com/mostc/pftt/runner/CliPhptTestCaseRunner.java @@ -8,6 +8,7 @@ import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; +import com.github.mattficken.io.IOUtil; import com.github.mattficken.io.StringUtil; import com.mostc.pftt.host.AHost.ExecHandle; import com.mostc.pftt.host.ExecOutput; @@ -224,7 +225,8 @@ public class CliPhptTestCaseRunner extends AbstractPhptTestCaseRunner2 { test_case.isNon8BitCharset()?test_case.getCommonCharset():null, PhptTestCase.MAX_TEST_TIME_SECONDS, thread, - sapi_scenario.getSlowTestTimeSeconds(), cm.getSuspendSeconds() + sapi_scenario.getSlowTestTimeSeconds(), cm.getSuspendSeconds(), + IOUtil.HALF_MEGABYTE ); return output_sb.toString();