Commit: 18f65178e23b232d797b39b8e6656ad37b38ac07
Author: Matt Ficken <v-maf...@microsoft.com> Fri, 2 Nov 2012
15:53:57 -0700
Parents: 92565d723da8b9e71b596ab3798b64e7652b5d56
Branches: master
Link:
http://git.php.net/?p=pftt2.git;a=commitdiff;h=18f65178e23b232d797b39b8e6656ad37b38ac07
Log:
new console option for better cooperation with Visual Studio
Changed paths:
M src/com/mostc/pftt/host/Host.java
M src/com/mostc/pftt/main/PfttMain.java
M src/com/mostc/pftt/model/phpt/PhpBuild.java
M src/com/mostc/pftt/model/phpt/PhptTestPack.java
M src/com/mostc/pftt/model/sapi/WebServerInstance.java
M src/com/mostc/pftt/model/sapi/WebServerManager.java
M src/com/mostc/pftt/runner/HttpTestCaseRunner.java
M src/com/mostc/pftt/runner/PhptTestPackRunner.java
M src/com/mostc/pftt/telemetry/ConsoleManager.java
M src/com/mostc/pftt/telemetry/PhptTelemetryWriter.java
M src/com/mostc/pftt/ui/PhptDebuggerFrame.java
M src/com/mostc/pftt/util/HostEnvUtil.java
M src/com/mostc/pftt/util/StringUtil.java
diff --git a/src/com/mostc/pftt/host/Host.java
b/src/com/mostc/pftt/host/Host.java
index 8c3cae9..c76635c 100644
--- a/src/com/mostc/pftt/host/Host.java
+++ b/src/com/mostc/pftt/host/Host.java
@@ -151,6 +151,13 @@ public abstract class Host {
public abstract void saveText(String filename, String text) throws
IllegalStateException, IOException;
public abstract void saveText(String filename, String text, Charset
charset) throws IllegalStateException, IOException;
public abstract void delete(String path) throws IllegalStateException,
IOException;
+ public void deleteIfExists(String path) {
+ try {
+ delete(path);
+ } catch ( Exception ex ) {
+
+ }
+ }
public abstract boolean exists(String string);
public abstract void mkdirs(String path) throws IllegalStateException,
IOException;
/** copies file/directory from source to destination on host
@@ -524,7 +531,7 @@ public abstract class Host {
* @return
*/
public String fixPath(String path) {
- return isWindows() ? StringUtil.replaceAll(PAT_fs, "\\", path)
: toUnixPath(path);
+ return isWindows() ? StringUtil.replaceAll(PAT_fs, "\\\\",
path) : toUnixPath(path);
}
public String join(String... path_parts) {
diff --git a/src/com/mostc/pftt/main/PfttMain.java
b/src/com/mostc/pftt/main/PfttMain.java
index 2958c68..556d766 100644
--- a/src/com/mostc/pftt/main/PfttMain.java
+++ b/src/com/mostc/pftt/main/PfttMain.java
@@ -4,7 +4,6 @@ import groovy.lang.Binding;
import groovy.lang.GroovyObject;
import groovy.ui.Console;
-import java.awt.Container;
import java.awt.Desktop;
import java.io.BufferedReader;
import java.io.File;
@@ -20,8 +19,6 @@ import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
-import javax.swing.JFrame;
-
import org.apache.commons.io.IOUtils;
import org.apache.http.ConnectionReuseStrategy;
import org.apache.http.HttpHost;
@@ -66,9 +63,10 @@ import com.mostc.pftt.report.FBCReportGen;
import com.mostc.pftt.runner.PhpUnitTestPackRunner;
import com.mostc.pftt.runner.PhptTestPackRunner;
import com.mostc.pftt.scenario.ScenarioSet;
+import com.mostc.pftt.telemetry.ConsoleManager;
import com.mostc.pftt.telemetry.PhptTelemetryReader;
import com.mostc.pftt.telemetry.PhptTelemetryWriter;
-import com.mostc.pftt.ui.PhptDebuggerFrame;
+import com.mostc.pftt.util.HostEnvUtil;
import com.mostc.pftt.util.StringUtil;
import com.mostc.pftt.util.WindowsSnapshotDownloadUtil;
import com.mostc.pftt.util.WindowsSnapshotDownloadUtil.FindBuildTestPackPair;
@@ -115,20 +113,16 @@ public class PfttMain {
return last_file == null ? null :
PhptTelemetryReader.open(host, last_file);
}
- public void run_all(boolean show_gui, PhpBuild build, PhptTestPack
test_pack, ScenarioSet scenario_set) throws Exception {
+ public void run_all(ConsoleManager cm, PhpBuild build, PhptTestPack
test_pack, ScenarioSet scenario_set) throws Exception {
LinkedList<PhptTestCase> test_cases = new
LinkedList<PhptTestCase>();
-
- PhptTelemetryWriter tmgr = new PhptTelemetryWriter(host, null,
telem_dir(), build, test_pack, scenario_set);
+
+ PhptTelemetryWriter tmgr = new PhptTelemetryWriter(host, cm,
telem_dir(), build, test_pack, scenario_set);
+ test_pack.cleanup();
test_pack.add_test_files(test_cases, tmgr, build);
PhptTestPackRunner test_pack_runner = new
PhptTestPackRunner(tmgr, test_pack, scenario_set, build, host);
+ cm.showGUI(test_pack_runner);
- if (show_gui) {
- PhptDebuggerFrame gui = new
PhptDebuggerFrame(test_pack_runner);
- tmgr.gui = gui;
- show_gui("phpt_all", gui);
- }
-
test_pack_runner.runTestList(test_cases);
tmgr.close();
@@ -161,20 +155,16 @@ public class PfttMain {
}
}
- public void run_named_tests(boolean show_gui, PhpBuild build,
PhptTestPack test_pack, ScenarioSet scenario_set, List<String> names) throws
Exception {
+ public void run_named_tests(ConsoleManager cm, PhpBuild build,
PhptTestPack test_pack, ScenarioSet scenario_set, List<String> names) throws
Exception {
LinkedList<PhptTestCase> test_cases = new
LinkedList<PhptTestCase>();
- PhptTelemetryWriter tmgr = new PhptTelemetryWriter(host, null,
telem_dir(), build, test_pack, scenario_set);
+ PhptTelemetryWriter tmgr = new PhptTelemetryWriter(host, cm,
telem_dir(), build, test_pack, scenario_set);
+ test_pack.cleanup();
test_pack.add_named_tests(test_cases, names, tmgr, build);
PhptTestPackRunner test_pack_runner = new
PhptTestPackRunner(tmgr, test_pack, scenario_set, build, host);
+ cm.showGUI(test_pack_runner);
- if (show_gui) {
- PhptDebuggerFrame gui = new
PhptDebuggerFrame(test_pack_runner);
- tmgr.gui = gui;
- show_gui("phpt_named", gui);
- }
-
test_pack_runner.runTestList(test_cases);
tmgr.close();
@@ -215,6 +205,8 @@ public class PfttMain {
System.out.println("-force - disables confirmation dialogs and
forces proceeding anyway");
System.out.println("-stress_each <0+> - runs each test-case N
times consecutively");
System.out.println("-stress_all <0+> - runs all tests N times
in loop");
+ System.out.println("-results_only - displays only test results
and no other information (for automation).");
+ System.out.println("-disable_debug_prompt - disables asking you
if you want to debug PHP crashes (for automation. default=enabled)");
System.out.println("(note: stress options not useful against
CLI without code caching)");
System.out.println();
} // end protected static void cmd_help
@@ -267,11 +259,11 @@ public class PfttMain {
console.run();
}
- protected static void cmd_phpt_all(PfttMain rt, boolean show_gui,
GroovyObject config_obj, PhpBuild build, PhptTestPack test_pack) throws
Exception {
- rt.run_all(show_gui, build, test_pack,
ScenarioSet.getScenarioSets().iterator().next());
+ protected static void cmd_phpt_all(PfttMain rt, ConsoleManager cm,
GroovyObject config_obj, PhpBuild build, PhptTestPack test_pack) throws
Exception {
+ rt.run_all(cm, build, test_pack,
ScenarioSet.getScenarioSets().iterator().next());
}
- protected static void cmd_phpt_list(PfttMain rt, boolean show_gui,
GroovyObject config_obj, PhpBuild build, PhptTestPack test_pack, File
list_file) throws Exception {
+ protected static void cmd_phpt_list(PfttMain rt, ConsoleManager cm,
GroovyObject config_obj, PhpBuild build, PhptTestPack test_pack, File
list_file) throws Exception {
BufferedReader fr = new BufferedReader(new
FileReader(list_file));
LinkedList<String> tests = new LinkedList<String>();
String line;
@@ -283,11 +275,11 @@ public class PfttMain {
tests.add(line);
}
- rt.run_named_tests(show_gui, build, test_pack,
ScenarioSet.getScenarioSets().iterator().next(), tests);
+ rt.run_named_tests(cm, build, test_pack,
ScenarioSet.getScenarioSets().iterator().next(), tests);
}
- protected static void cmd_phpt_named(PfttMain rt, boolean show_gui,
GroovyObject config_obj, PhpBuild build, PhptTestPack test_pack, List<String>
names) throws Exception {
- rt.run_named_tests(show_gui, build, test_pack,
ScenarioSet.getScenarioSets().iterator().next(), names);
+ protected static void cmd_phpt_named(PfttMain rt, ConsoleManager cm,
GroovyObject config_obj, PhpBuild build, PhptTestPack test_pack, List<String>
names) throws Exception {
+ rt.run_named_tests(cm, build, test_pack,
ScenarioSet.getScenarioSets().iterator().next(), names);
}
protected static void cmd_ui() {
@@ -437,6 +429,7 @@ public class PfttMain {
System.out.println("PFTT: release_get: decompressing
"+local_file_zip+"...");
+ // TODO c:\program files
host.exec("\"C:\\Program Files\\7-Zip\\7z\" x
"+local_file_zip, Host.NO_TIMEOUT,
local_folder.toString()).printOutputIfCrash();
if (is_build)
@@ -559,15 +552,6 @@ public class PfttMain {
return null; // test-pack not found/readable error
}
- protected static void show_gui(String title, Container c) {
- JFrame jf = new JFrame("PFTT - "+title);
- jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- jf.setContentPane(c);
- jf.pack();
- jf.setExtendedState(JFrame.MAXIMIZED_BOTH);
- jf.setVisible(true);
- }
-
protected static void no_show_gui(boolean show_gui, String command) {
if (show_gui) {
System.out.println("PFTT: Note: -gui not supported for
"+command+" (ignored)");
@@ -581,7 +565,7 @@ public class PfttMain {
int args_i = 0;
GroovyObject config_obj = null;
- boolean show_gui = false, force = false;
+ boolean show_gui = false, force = false, disable_debug_prompt =
false, results_only = false;
int stress_all = 0, stress_each = 0;
//
@@ -604,6 +588,10 @@ public class PfttMain {
stress_each = Integer.parseInt(args[args_i++]);
} else if (args[args_i].equals("-stress_all")) {
stress_all = Integer.parseInt(args[args_i++]);
+ } else if
(args[args_i].equals("-disable_debug_prompt")) {
+ disable_debug_prompt = true;
+ } else if (args[args_i].equals("-results_only")) {
+ results_only = true;
} else if (args[args_i].startsWith("-")) {
System.err.println("User Error: unknown option
"+args[args_i]);
System.exit(-255);
@@ -627,6 +615,10 @@ public class PfttMain {
System.err.println("PFTT: not implemented:
stress_each="+stress_each+" stress_all="+stress_all+" ignored");
}
+ ConsoleManager cm = new ConsoleManager(results_only, show_gui,
disable_debug_prompt);
+
+ HostEnvUtil.prepareHostEnv(rt.host, cm, !disable_debug_prompt);
+
if (command!=null) {
if
(command.equals("phpt_named")||command.equals("phptnamed")||command.equals("phptn")||command.equals("pn"))
{
if (!(args.length > args_i+3)) {
@@ -656,9 +648,12 @@ public class PfttMain {
for ( ; args_i < args.length ; args_i++)
names.add(args[args_i]);
- System.out.println("PFTT: build: "+build);
- System.out.println("PFTT: test-pack:
"+test_pack);
- cmd_phpt_named(rt, show_gui, config_obj, build,
test_pack, names);
+ if (!results_only) {
+ System.out.println("PFTT: build:
"+build);
+ System.out.println("PFTT: test-pack:
"+test_pack);
+ }
+
+ cmd_phpt_named(rt, cm, config_obj, build,
test_pack, names);
System.out.println("PFTT: finished");
} else if
(command.equals("phpt_list")||command.equals("phptlist")||command.equals("phptl")||command.equals("pl"))
{
@@ -691,9 +686,11 @@ public class PfttMain {
return;
}
- System.out.println("PFTT: build: "+build);
- System.out.println("PFTT: test-pack:
"+test_pack);
- cmd_phpt_list(rt, show_gui, config_obj, build,
test_pack, list_file);
+ if (!results_only) {
+ System.out.println("PFTT: build:
"+build);
+ System.out.println("PFTT: test-pack:
"+test_pack);
+ }
+ cmd_phpt_list(rt, cm, config_obj, build,
test_pack, list_file);
System.out.println("PFTT: finished");
} else if
(command.equals("phpt_all")||command.equals("phptall")||command.equals("phpta")||command.equals("pa"))
{
@@ -718,12 +715,14 @@ public class PfttMain {
return;
}
- System.out.println("PFTT: build: "+build);
- System.out.println("PFTT: test-pack:
"+test_pack);
- System.out.println("PFTT: Testing all PHPTs in
test pack...");
+ if (!results_only) {
+ System.out.println("PFTT: build:
"+build);
+ System.out.println("PFTT: test-pack:
"+test_pack);
+ System.out.println("PFTT: Testing all
PHPTs in test pack...");
+ }
// run all tests
- cmd_phpt_all(rt, show_gui, config_obj, build,
test_pack);
+ cmd_phpt_all(rt, cm, config_obj, build,
test_pack);
System.out.println("PFTT: finished");
} else if (command.equals("aut")) {
diff --git a/src/com/mostc/pftt/model/phpt/PhpBuild.java
b/src/com/mostc/pftt/model/phpt/PhpBuild.java
index d5a2b93..076ebac 100644
--- a/src/com/mostc/pftt/model/phpt/PhpBuild.java
+++ b/src/com/mostc/pftt/model/phpt/PhpBuild.java
@@ -297,7 +297,8 @@ public class PhpBuild extends Build {
host.saveText(php_filename, code);
PHPOutput output = new PHPOutput(php_filename,
host.exec(php_exe+" "+php_filename, timeout_seconds, new
HashMap<String,String>(), null, Host.dirname(php_filename)));
- if (auto_cleanup)
+ if (auto_cleanup && !output.hasFatalError())
+ // if fatal error, don't clean up so user can check it
output.cleanup(host);
return output;
}
diff --git a/src/com/mostc/pftt/model/phpt/PhptTestPack.java
b/src/com/mostc/pftt/model/phpt/PhptTestPack.java
index 994522f..09b234e 100644
--- a/src/com/mostc/pftt/model/phpt/PhptTestPack.java
+++ b/src/com/mostc/pftt/model/phpt/PhptTestPack.java
@@ -46,6 +46,18 @@ public class PhptTestPack extends TestPack {
return test_pack;
}
+ /** cleans up this test-pack from previous runs of PFTT or run-test.php
that were interrupted
+ *
+ */
+ public void cleanup() {
+ // these are symlinks(junctions) which may cause an infinite
loop
+ //
+ // normally, they are deleted, but if certain tests were
interrupted, they may still be there
+
host.deleteIfExists("ext/standard/tests/file/windows_links/mklink_junction");
+
host.deleteIfExists("ext/standard/tests/file/windows_links/directory");
+
host.deleteIfExists("ext/standard/tests/file/windows_links/mounted_volume");
+ }
+
public void add_named_tests(List<PhptTestCase> test_files, List<String>
names, PhptTelemetryWriter twriter, PhpBuild build) throws
FileNotFoundException, IOException, Exception {
add_named_tests(test_files, names, twriter, build, false);
}
@@ -114,10 +126,6 @@ public class PhptTestPack extends TestPack {
main_loop:
for ( File f : files ) {
if
(f.getName().toLowerCase().endsWith(PhptTestCase.PHPT_FILE_EXTENSION)) {
- // TODO test tests cause a blocking winpopup
msg (syntax error line 31 in unknown) - skip them for now
-// if
(f.getPath().contains("session")&&f.getName().contains("0"))
-// continue;
-
if (names!=null) {
for(String name: names) {
if
(f.getName().toLowerCase().contains(name))
@@ -134,7 +142,7 @@ public class PhptTestPack extends TestPack {
if (test_name.contains("a_dir"))
continue; // TODO
- PhptTestCase test_case =
PhptTestCase.load(host, this, test_name, twriter);
+ PhptTestCase test_case =
PhptTestCase.load(host, this, false, test_name, twriter, redirect_parent);
add_test_case(test_case, test_files, names,
twriter, build, redirect_parent, redirect_targets);
}
@@ -157,8 +165,12 @@ public class PhptTestPack extends TestPack {
add_test_files(dir.listFiles(),
test_files, names, twriter, build, redirect_parent, redirect_targets);
} else {
- // test refers to a specific
test, try to load it
- test_case =
PhptTestCase.load(host, this, false, target_test_name, twriter,
redirect_parent);
+ // test refers to a specific
test, try to load it
+ try {
+ test_case =
PhptTestCase.load(host, this, false, target_test_name, twriter,
redirect_parent);
+ } catch ( Exception ex ) {
+ ex.printStackTrace();
// TODO temp
+ }
if
(redirect_targets.contains(test_case))
// can only have 1
level of redirection
diff --git a/src/com/mostc/pftt/model/sapi/WebServerInstance.java
b/src/com/mostc/pftt/model/sapi/WebServerInstance.java
index 0d821a7..bdc6b10 100644
--- a/src/com/mostc/pftt/model/sapi/WebServerInstance.java
+++ b/src/com/mostc/pftt/model/sapi/WebServerInstance.java
@@ -66,7 +66,6 @@ public abstract class WebServerInstance extends SAPIInstance {
*/
public void notifyCrash(String output, int exit_code) {
// make sure it gets closed!!
- // TODO temp vs close();
synchronized(sync_lock) {
//
if (crashed) {
@@ -77,6 +76,7 @@ public abstract class WebServerInstance extends SAPIInstance {
sb.append(sapi_output);
sb.append("\nPFTT: later web server
returned exit code("+exit_code+") and output:\n");
sb.append(output);
+ sb.append("\nPFTT: end output.\n");
sapi_output = sb.toString();
}
return;
@@ -96,6 +96,7 @@ public abstract class WebServerInstance extends SAPIInstance {
} else {
sb.append("PFTT: before crashing/exiting web
server returned("+output.length()+"):\n");
sb.append(output);
+ sb.append("\nPFTT: end output.\n");
}
sapi_output = sb.toString();
diff --git a/src/com/mostc/pftt/model/sapi/WebServerManager.java
b/src/com/mostc/pftt/model/sapi/WebServerManager.java
index 1b060a9..4b93cd8 100644
--- a/src/com/mostc/pftt/model/sapi/WebServerManager.java
+++ b/src/com/mostc/pftt/model/sapi/WebServerManager.java
@@ -67,6 +67,7 @@ public abstract class WebServerManager extends SAPIManager {
}
}
}
+
assigned.replacement = sapi =
createWebServerInstance(host, build, ini, docroot);
synchronized(assigned.active_test_cases) {
sapi.active_test_cases.addAll(assigned.active_test_cases);
diff --git a/src/com/mostc/pftt/runner/HttpTestCaseRunner.java
b/src/com/mostc/pftt/runner/HttpTestCaseRunner.java
index 311f071..a3c68b5 100644
--- a/src/com/mostc/pftt/runner/HttpTestCaseRunner.java
+++ b/src/com/mostc/pftt/runner/HttpTestCaseRunner.java
@@ -82,9 +82,11 @@ public class HttpTestCaseRunner extends
AbstractPhptTestCaseRunner2 {
} catch ( IOException ex1 ) { // SocketTimeoutException
or ConnectException
// notify of crash so it gets reported
everywhere
web.notifyCrash("PFTT: timeout during
test("+section+" SECTION): "+test_case.getName()+"\n"+ErrorUtil.toString(ex1),
0);
- // TODO temp VS
+ // ok to close this here, since its not an
Access Violation(AV) and so won't prompt
+ // the user to enter Visual Studio, WinDbg or
GDB
web.close();
+ // TODO
System.out.println("RESTART_AND_RETRY
"+test_case.getName());
// get #do_http_execute to make a new server
@@ -132,6 +134,13 @@ public class HttpTestCaseRunner extends
AbstractPhptTestCaseRunner2 {
_web.notifyTestPreRequest(test_case);
}
}
+
+ path = Host.toUnixPath(path);
+ if (path.startsWith(Host.toUnixPath(test_pack.getTestPack())))
+ path = path.substring(test_pack.getTestPack().length());
+ if (!path.startsWith("/"))
+ path = "/" + path;
+
try {
if (web.isCrashed())
// test will fail (because this(`PFTT:
server...`) is the actual output which won't match the expected output)
@@ -146,53 +155,31 @@ public class HttpTestCaseRunner extends
AbstractPhptTestCaseRunner2 {
// only do POST for TEST sections where
stdin_post!=null
return do_http_post(path);
} finally {
- if (is_replacement)
+ if (is_replacement &&
(twriter.getConsoleManager().isDisableDebugPrompt()||!web.isCrashed()||!host.isWindows()))
{
// CRITICAL: if this WebServerInstance is a
replacement, then it exists only within this specific HttpTestCaseRunner
// instance. if it is not terminated here, it
will keep running forever!
+ //
+ // don't close crashed servers on windows
unless WER popup is disabled because user may want to
+ // debug them. if user doesn't, they'll click
close in WER popup
web.close();
+ }
}
}
protected String do_http_get(String path) throws Exception {
- /*HttpParams params = new SyncBasicHttpParams();
- HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
- HttpProtocolParams.setContentCharset(params, "UTF-8");
- HttpProtocolParams.setUserAgent(params, "Mozilla/5.0 (Windows
NT 6.1; rv:12.0) Gecko/ 20120405 Firefox/14.0.1");
- HttpProtocolParams.setUseExpectContinue(params, true);
-
- HttpProcessor httpproc = new ImmutableHttpProcessor(new
HttpRequestInterceptor[] {// XXX reuse
- // Required protocol interceptors
- new RequestContent(),
- new RequestTargetHost(),
- // Recommended protocol interceptors
- new RequestConnControl(),
- new RequestUserAgent(),
- new RequestExpectContinue()});
-
- HttpRequestExecutor httpexecutor = new HttpRequestExecutor();*/
-
HttpContext context = new BasicHttpContext(null);
HttpHost http_host = new HttpHost(web.hostname(), web.port());
DefaultHttpClientConnection conn = new
DefaultHttpClientConnection();
- //ConnectionReuseStrategy connStrategy = new
DefaultConnectionReuseStrategy();
+ // TODO ConnectionReuseStrategy connStrategy = new
DefaultConnectionReuseStrategy();
context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
context.setAttribute(ExecutionContext.HTTP_TARGET_HOST,
http_host);
Socket socket = new Socket(http_host.getHostName(),
http_host.getPort());
- //socket.setSoTimeout(6*1000);
conn.bind(socket, params);
conn.setSocketTimeout(60*1000);
- //
- path = Host.toUnixPath(path);
- if (path.startsWith(Host.toUnixPath(test_pack.getTestPack())))
- path = path.substring(test_pack.getTestPack().length());
- if (!path.startsWith("/"))
- path = "/" + path;
- //
-
BasicHttpRequest request = new BasicHttpRequest("GET", path);
request.setParams(params);
@@ -207,47 +194,22 @@ public class HttpTestCaseRunner extends
AbstractPhptTestCaseRunner2 {
} // end protected String do_http_get
protected String do_http_post(String path) throws Exception {
- /*HttpParams params = new SyncBasicHttpParams();
- HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
- HttpProtocolParams.setContentCharset(params, "UTF-8");
- HttpProtocolParams.setUserAgent(params, "Mozilla/5.0 (Windows
NT 6.1; rv:12.0) Gecko/ 20120405 Firefox/14.0.1");
- HttpProtocolParams.setUseExpectContinue(params, true);
// TODO if (content_type!=null)
// params.setParameter("Content-Type", content_type);
-
- HttpProcessor httpproc = new ImmutableHttpProcessor(new
HttpRequestInterceptor[] {// XXX reuse
- // Required protocol interceptors
- new RequestContent(),
- new RequestTargetHost(),
- // Recommended protocol interceptors
- new RequestConnControl(),
- new RequestUserAgent(),
- new RequestExpectContinue()});
-
- HttpRequestExecutor httpexecutor = new HttpRequestExecutor();*/
HttpContext context = new BasicHttpContext(null);
HttpHost http_host = new HttpHost(web.hostname(), web.port());
DefaultHttpClientConnection conn = new
DefaultHttpClientConnection();
- //ConnectionReuseStrategy connStrategy = new
DefaultConnectionReuseStrategy();
+ // TODO ConnectionReuseStrategy connStrategy = new
DefaultConnectionReuseStrategy();
context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
context.setAttribute(ExecutionContext.HTTP_TARGET_HOST,
http_host);
Socket socket = new Socket(http_host.getHostName(),
http_host.getPort());
- //socket.setSoTimeout(6*1000);
conn.bind(socket, params);
conn.setSocketTimeout(60*1000);
- //
- path = Host.toUnixPath(path);
- if (path.startsWith(Host.toUnixPath(test_pack.getTestPack())))
- path = path.substring(test_pack.getTestPack().length());
- if (!path.startsWith("/"))
- path = "/" + path;
- //
-
BasicHttpEntityEnclosingRequest request = new
BasicHttpEntityEnclosingRequest("POST", path);
request.setParams(params);
httpexecutor.preProcess(request, httpproc, context);
diff --git a/src/com/mostc/pftt/runner/PhptTestPackRunner.java
b/src/com/mostc/pftt/runner/PhptTestPackRunner.java
index 44db4be..a8c6f20 100644
--- a/src/com/mostc/pftt/runner/PhptTestPackRunner.java
+++ b/src/com/mostc/pftt/runner/PhptTestPackRunner.java
@@ -12,14 +12,12 @@ import com.mostc.pftt.model.phpt.PhpBuild;
import com.mostc.pftt.model.phpt.PhpIni;
import com.mostc.pftt.model.phpt.PhptTestCase;
import com.mostc.pftt.model.phpt.PhptTestPack;
-import com.mostc.pftt.model.sapi.SAPIInstance;
import com.mostc.pftt.model.sapi.TestCaseGroupKey;
import com.mostc.pftt.model.sapi.WebServerInstance;
import com.mostc.pftt.scenario.AbstractSAPIScenario;
import com.mostc.pftt.scenario.AbstractWebServerScenario;
import com.mostc.pftt.scenario.ScenarioSet;
import com.mostc.pftt.telemetry.PhptTelemetryWriter;
-import com.mostc.pftt.util.HostEnvUtil;
/** Runs PHPTs from a given PhptTestPack.
*
@@ -51,8 +49,6 @@ public class PhptTestPackRunner extends
AbstractTestPackRunner {
runner_state = ETestPackRunnerState.RUNNING;
sapi_scenario = ScenarioSet.getSAPIScenario(scenario_set);
- HostEnvUtil.prepareHostEnv(host);
-
System.out.println("PFTT: loaded tests: "+test_cases.size());
try {
@@ -239,7 +235,13 @@ public class PhptTestPackRunner extends
AbstractTestPackRunner {
exec_jobs(group_key, jobs, test_count);
// TODO temp
- ((WebServerInstance)group_key).close();
+ if (
twriter.getConsoleManager().isDisableDebugPrompt() ||
!((WebServerInstance)group_key).isCrashed() || !host.isWindows() ) {
+ // don't close this server if
it crashed because user will get prompted
+ // to debug it on Windows and
may still be debugging it (Visual Studio or WinDbg)
+ //
+ // it will get closed when user
clicks close in WER popup dialog so its not like it would be running forever
+
((WebServerInstance)group_key).close();
+ }
}
}
} // end protected void runThreadSafe
diff --git a/src/com/mostc/pftt/telemetry/ConsoleManager.java
b/src/com/mostc/pftt/telemetry/ConsoleManager.java
index 75ce99d..c8d7512 100644
--- a/src/com/mostc/pftt/telemetry/ConsoleManager.java
+++ b/src/com/mostc/pftt/telemetry/ConsoleManager.java
@@ -1,23 +1,66 @@
package com.mostc.pftt.telemetry;
+import java.awt.Container;
+
+import javax.swing.JFrame;
+
+import com.mostc.pftt.host.Host;
import com.mostc.pftt.model.phpt.PhptTestCase;
import com.mostc.pftt.model.phpt.EPhptTestStatus;
+import com.mostc.pftt.runner.PhptTestPackRunner;
+import com.mostc.pftt.ui.PhptDebuggerFrame;
public class ConsoleManager {
-
- public ConsoleManager(boolean result_only) {
+ protected final boolean results_only, show_gui, disable_debug_prompt;
+ protected PhptDebuggerFrame gui;
+
+ public ConsoleManager(boolean results_only, boolean show_gui, boolean
disable_debug_prompt) {
+ this.results_only = results_only;
+ this.show_gui = show_gui;
+ this.disable_debug_prompt = disable_debug_prompt;
}
+
+ public void showGUI(PhptTestPackRunner test_pack_runner) {
+ if (show_gui) {
+ gui = new PhptDebuggerFrame(test_pack_runner);
+ show_gui("", gui);
+ }
+ }
+
+ protected static void show_gui(String title, Container c) {
+ JFrame jf = new JFrame("PFTT - "+title);
+ jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ jf.setContentPane(c);
+ jf.pack();
+ jf.setExtendedState(JFrame.MAXIMIZED_BOTH);
+ jf.setVisible(true);
+ }
+
+ public boolean isDisableDebugPrompt() {
+ return disable_debug_prompt;
+ }
public void finishedTest(PhptTestCase test_case, EPhptTestStatus
status) {
-
+ System.out.println(status+" "+test_case.getName());
}
- public void retryingTest(PhptTestCase test_case) {
+ public void restartingAndRetryingTest(PhptTestCase test_case) {
+ if (results_only)
+ return;
+ System.out.println("RESTARTING_AND_RETRYING
"+test_case.getName());
}
- public void restartingSAPI() {
+ public void showResult(Host host, int totalCount, int completed,
PhptTestResult result) {
+ if (gui!=null)
+ gui.showResult(host, totalCount, completed, result);
+ }
+
+ public void println(String ctx_str, String string) {
+ if (results_only)
+ return;
+ System.out.println("PFTT: "+ctx_str+": "+string);
}
}
diff --git a/src/com/mostc/pftt/telemetry/PhptTelemetryWriter.java
b/src/com/mostc/pftt/telemetry/PhptTelemetryWriter.java
index 517fb5a..b5f40a3 100644
--- a/src/com/mostc/pftt/telemetry/PhptTelemetryWriter.java
+++ b/src/com/mostc/pftt/telemetry/PhptTelemetryWriter.java
@@ -15,7 +15,6 @@ import com.mostc.pftt.model.phpt.PhpBuild;
import com.mostc.pftt.model.phpt.PhptTestCase;
import com.mostc.pftt.model.phpt.PhptTestPack;
import com.mostc.pftt.scenario.ScenarioSet;
-import com.mostc.pftt.ui.PhptDebuggerFrame;
import com.mostc.pftt.util.ErrorUtil;
/** Writes the telemetry during a test run.
@@ -31,16 +30,16 @@ public class PhptTelemetryWriter extends PhptTelemetry {
protected Host host;
protected PrintWriter exception_writer;
protected int total_count = 0;
- public PhptDebuggerFrame gui; // XXX
+ protected ConsoleManager cm;
protected HashMap<EPhptTestStatus,AtomicInteger> counts;
protected PhpBuild build;
protected PhptTestPack test_pack;
protected ScenarioSet scenario_set;
- public PhptTelemetryWriter(Host host, PhptDebuggerFrame gui, File
telem_base_dir, PhpBuild build, PhptTestPack test_pack, ScenarioSet
scenario_set) throws IOException {
+ public PhptTelemetryWriter(Host host, ConsoleManager cm, File
telem_base_dir, PhpBuild build, PhptTestPack test_pack, ScenarioSet
scenario_set) throws IOException {
super(host);
this.host = host;
- this.gui = gui;
+ this.cm = cm;
this.scenario_set = scenario_set;
this.build = build;
this.test_pack = test_pack;
@@ -68,6 +67,10 @@ public class PhptTelemetryWriter extends PhptTelemetry {
}
}
+ public ConsoleManager getConsoleManager() {
+ return cm;
+ }
+
@Override
public void close() {
for(EPhptTestStatus status:EPhptTestStatus.values()) {
@@ -163,7 +166,7 @@ public class PhptTelemetryWriter extends PhptTelemetry {
addResult(new PhptTestResult(host, EPhptTestStatus.EXCEPTION,
test_case, ex_str, null, null, null, null, null, null, null, null, null, null));
// TODO show count of exceptions in gui
}
- int completed = 0; // XXX
+ int completed = 0; // XXX
public void addResult(PhptTestResult result) {
// FUTURE enqueue in writer thread to avoid slowing down
PhptThreads
// also, on Windows, enqueue printing to console here
@@ -172,9 +175,9 @@ public class PhptTelemetryWriter extends PhptTelemetry {
counts.get(result.status).incrementAndGet();
- if (gui!=null) {
+ if (cm!=null) {
// show in gui (if open)
- gui.showResult(host, getTotalCount(), completed,
result);
+ cm.showResult(host, getTotalCount(), completed,
result);
}
// record in list files
diff --git a/src/com/mostc/pftt/ui/PhptDebuggerFrame.java
b/src/com/mostc/pftt/ui/PhptDebuggerFrame.java
index f706858..a1d7e9b 100644
--- a/src/com/mostc/pftt/ui/PhptDebuggerFrame.java
+++ b/src/com/mostc/pftt/ui/PhptDebuggerFrame.java
@@ -5,8 +5,6 @@ import groovy.ui.ConsoleTextEditor;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.nio.charset.Charset;
-import java.util.Map;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
@@ -25,12 +23,11 @@ import javax.swing.border.LineBorder;
import se.datadosen.component.RiverLayout;
import com.mostc.pftt.host.Host;
import com.mostc.pftt.host.LocalHost;
-import com.mostc.pftt.model.phpt.EPhptTestStatus;
-import com.mostc.pftt.model.phpt.PhptTestCase;
import com.mostc.pftt.runner.PhptTestPackRunner;
import com.mostc.pftt.scenario.ScenarioSet;
import com.mostc.pftt.telemetry.PhptTestResult;
+@SuppressWarnings("serial")
public class PhptDebuggerFrame extends JPanel {
protected JTabbedPane tabs;
protected PhptHostTab localhost_tab;
diff --git a/src/com/mostc/pftt/util/HostEnvUtil.java
b/src/com/mostc/pftt/util/HostEnvUtil.java
index a4876fa..9dcf9f2 100644
--- a/src/com/mostc/pftt/util/HostEnvUtil.java
+++ b/src/com/mostc/pftt/util/HostEnvUtil.java
@@ -2,6 +2,7 @@ package com.mostc.pftt.util;
import com.mostc.pftt.host.ExecOutput;
import com.mostc.pftt.host.Host;
+import com.mostc.pftt.telemetry.ConsoleManager;
/** Utilities for setting up the test environment and convenience settings on
Hosts
*
@@ -11,9 +12,9 @@ import com.mostc.pftt.host.Host;
public final class HostEnvUtil {
- public static void prepareHostEnv(Host host) throws Exception {
+ public static void prepareHostEnv(Host host, ConsoleManager cm, boolean
enable_debug_prompt) throws Exception {
if (host.isWindows()) {
- prepareWindows(host);
+ prepareWindows(host, cm, enable_debug_prompt);
} else {
// emerge dev-vcs/subversion
}
@@ -26,37 +27,44 @@ public final class HostEnvUtil {
* -installs VC9 runtime if its not Windows 7/2008r2 or Windows 8/2012
(which don't need it to run PHP)
*
* @param host
+ * @param cm
+ * @param enable_debug_prompt
* @throws Exception
*/
- public static void prepareWindows(Host host) throws Exception {
+ public static void prepareWindows(Host host, ConsoleManager cm, boolean
enable_debug_prompt) throws Exception {
System.out.println("PFTT: preparing Windows host to run
PHP...");
// have to fix Windows Error Reporting from popping up and
blocking execution:
- // silence reporting
- System.out.println("PFTT: HostEnvUtil: disabling Windows Error
Reporting...");
- // TODO temp boolean a = regQueryAdd(host,
"HKCU\\Software\\Microsoft\\Windows\\Windows Error Reporting", "DontShowUI",
"0x1", REG_DWORD);
- boolean a = regQueryAdd(host,
"HKCU\\Software\\Microsoft\\Windows\\Windows Error Reporting", "DontShowUI",
"0x0", REG_DWORD);
- // TODO temp boolean b = regQueryAdd(host,
"HKCU\\Software\\Microsoft\\Windows\\Windows Error Reporting", "Disable",
"0x1", REG_DWORD);
- boolean b = regQueryAdd(host,
"HKCU\\Software\\Microsoft\\Windows\\Windows Error Reporting", "Disable",
"0x0", REG_DWORD);
- // then, disable reporting
+
+ String value;
+ if (enable_debug_prompt) {
+ cm.println("HostEnvUtil", "enabling Windows Error
Reporting...");
+ value = "0x0";
+ } else {
+ cm.println("HostEnvUtil", "disabling Windows Error
Reporting...");
+ value = "0x1";
+ }
+
+ boolean a = regQueryAdd(host,
"HKCU\\Software\\Microsoft\\Windows\\Windows Error Reporting", "DontShowUI",
value, REG_DWORD);
+ boolean b = regQueryAdd(host,
"HKCU\\Software\\Microsoft\\Windows\\Windows Error Reporting", "Disable",
value, REG_DWORD);
if ( a || b ) {
// assume if registry had to be edited, that firewall
has to be disabled (avoid doing this if possible because it requires user to
approve elevation)
- System.out.println("PFTT: HostEnvUtil: disabling
Windows Firewall...");
+ cm.println("HostEnvUtil", "disabling Windows
Firewall...");
// LATER edit firewall rules instead (what if on public
network, ex: Azure)
host.execElevated("netsh firewall set opmode disable",
Host.ONE_MINUTE);
- System.out.println("PFTT: HostEnvUtil: creating File Share for
"+host.getPhpSdkDir()+"...");
+ cm.println("HostEnvUtil", "creating File Share for
"+host.getPhpSdkDir()+"...");
// share PHP-SDK over network. this also will share C$, G$,
etc...
host.execElevated("NET SHARE PHP_SDK="+host.getPhpSdkDir()+"
/Grant:"+host.getUsername()+",Full", Host.ONE_MINUTE);
}
if (host.isLonghornExact()) {
- // install VC9 runtime
+ // install VC9 runtime (win7+ don't need this)
// TODO
}
- System.out.println("PFTT: Windows host prepared to run PHP.");
+ cm.println("HostEnvUtil", "Windows host prepared to run PHP.");
} // end public static void prepareWindows
public static final String REG_DWORD = "REG_DWORD";
diff --git a/src/com/mostc/pftt/util/StringUtil.java
b/src/com/mostc/pftt/util/StringUtil.java
index 4b0c6e6..90fc13f 100644
--- a/src/com/mostc/pftt/util/StringUtil.java
+++ b/src/com/mostc/pftt/util/StringUtil.java
@@ -228,4 +228,4 @@ public final class StringUtil {
private StringUtil() {}
-}
+} // end public class StringUtil
--
PHP Quality Assurance Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php