Commit: 5dc42ef91bd16f04cb359359847d78cf836acb98
Author: Matt Ficken <v-maf...@microsoft.com> Thu, 26 Sep 2013
14:48:37 -0700
Parents: ac2ef27a555cf3d59e2e23a1a0205e9f82426f06
Branches: master
Link:
http://git.php.net/?p=pftt2.git;a=commitdiff;h=5dc42ef91bd16f04cb359359847d78cf836acb98
Log:
interactive test-pack runner
Changed paths:
M src/com/mostc/pftt/host/PSCAgentServer.java
M src/com/mostc/pftt/host/RemotePhptTestPackRunner.java
M src/com/mostc/pftt/main/PfttMain.java
M src/com/mostc/pftt/results/ConsoleManager.java
M src/com/mostc/pftt/results/LocalConsoleManager.java
M src/com/mostc/pftt/results/PhptResultWriter.java
M src/com/mostc/pftt/results/PhptTallyFile.groovy
M src/com/mostc/pftt/results/PhptTestResult.java
M src/com/mostc/pftt/runner/AbstractLocalTestPackRunner.java
diff --git a/src/com/mostc/pftt/host/PSCAgentServer.java
b/src/com/mostc/pftt/host/PSCAgentServer.java
index 38a432a..0450493 100644
--- a/src/com/mostc/pftt/host/PSCAgentServer.java
+++ b/src/com/mostc/pftt/host/PSCAgentServer.java
@@ -180,6 +180,11 @@ public abstract class PSCAgentServer implements
ConsoleManager, ITestResultRecei
}
@Override
+ public boolean isNonInteractive() {
+ return false;
+ }
+
+ @Override
public long getMaxRunTimeMillis() {
return 0;
}
diff --git a/src/com/mostc/pftt/host/RemotePhptTestPackRunner.java
b/src/com/mostc/pftt/host/RemotePhptTestPackRunner.java
index f5d699e..37b36b6 100644
--- a/src/com/mostc/pftt/host/RemotePhptTestPackRunner.java
+++ b/src/com/mostc/pftt/host/RemotePhptTestPackRunner.java
@@ -54,7 +54,7 @@ public class RemotePhptTestPackRunner extends
AbstractRemoteTestPackRunner<PhptA
public static void main(String[] args) throws Exception {
LocalHost host = new LocalHost();
- LocalConsoleManager cm = new LocalConsoleManager(null, null,
false, false, false, false, true, false, true, false, false, false, 1, 1, true,
1, 1, 1, null, null, null, null, false, 0, 0, false, false, 0, 0, 0, false, 0);
+ LocalConsoleManager cm = new LocalConsoleManager(null, null,
false, false, false, false, true, false, true, false, false, false, 1, 1, true,
1, 1, 1, null, null, null, null, false, 0, 0, false, false, 0, 0, 0, false, 0,
false);
Config config = Config.loadConfigFromFiles(cm, "default");
PhpBuild build = new
PhpBuild("C:\\php-sdk\\php-5.5-ts-windows-vc11-x64-re3aeb6c");
diff --git a/src/com/mostc/pftt/main/PfttMain.java
b/src/com/mostc/pftt/main/PfttMain.java
index 7342183..460439a 100644
--- a/src/com/mostc/pftt/main/PfttMain.java
+++ b/src/com/mostc/pftt/main/PfttMain.java
@@ -14,6 +14,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.codehaus.groovy.control.MultipleCompilationErrorsException;
import org.codehaus.groovy.tools.shell.Groovysh;
@@ -48,6 +49,8 @@ import com.mostc.pftt.results.ConsoleManager;
import com.mostc.pftt.results.EPrintType;
import com.mostc.pftt.results.LocalConsoleManager;
import com.mostc.pftt.results.PhpResultPackWriter;
+import com.mostc.pftt.runner.AbstractLocalTestPackRunner;
+import com.mostc.pftt.runner.AbstractTestPackRunner.ETestPackRunnerState;
import com.mostc.pftt.runner.LocalPhpUnitTestPackRunner;
import com.mostc.pftt.runner.LocalPhptTestPackRunner;
import com.mostc.pftt.scenario.INIScenario;
@@ -392,6 +395,7 @@ public class PfttMain {
System.out.println(" === UI Options ===");
System.out.println(new AlignedTable(2, 85)
.addRow("-gui", "show gui for certain commands")
+ .addRow("-ni", "run non-interactive (otherwise
can interact on the Console (enter letter, then press <ENTER>)")
.addRow("-pause", "after everything is done,
PFTT will wait for user to press any key")
.addRow("-results_only", "displays only test
results and no other information (for automation).")
.addRow("-pftt_debug", "shows additional
information to help debug problems with PFTT itself"));
@@ -538,18 +542,22 @@ public class PfttMain {
test_pack.read(config, test_cases, test_names,
tmgr.getConsoleManager(), tmgr, build, true);
cm.println(EPrintType.IN_PROGRESS,
"PhpUnitSourceTestPack", "enumerated test cases.");
-
+ AtomicBoolean run_flag = new
AtomicBoolean(true);
for ( ScenarioSet scenario_set :
getScenarioSets(config,
EScenarioSetPermutationLayer.FUNCTIONAL_TEST_APPLICATION)) {
List<AHost> hosts = config.getHosts();
AHost host =
hosts.isEmpty()?this.host:hosts.get(0);
LocalPhpUnitTestPackRunner r = new
LocalPhpUnitTestPackRunner(cm, tmgr, scenario_set, build, host, host);
cm.showGUI(r, test_pack);
+ if (!cm.isNonInteractive())
+ interactive(run_flag, r);
r.runTestList(test_pack, test_cases);
tmgr.notifyPhpUnitFinished(host,
r.getScenarioSetSetup(), test_pack);
+ if (!run_flag.get())
+ return;
} // end for (scenario_set)
}
if (cm.getRunTestPack()>1)
@@ -607,13 +615,19 @@ public class PfttMain {
if (!smoke(build, config, tmgr))
break;
+ AtomicBoolean run_flag = new
AtomicBoolean(true);
for (ScenarioSet scenario_set :
getScenarioSets(config,
EScenarioSetPermutationLayer.FUNCTIONAL_TEST_APPLICATION)) {
List<AHost> hosts = config.getHosts();
AHost host =
hosts.isEmpty()?this.host:hosts.get(0);
LocalPhpUnitTestPackRunner r = new
LocalPhpUnitTestPackRunner(cm, tmgr, scenario_set, build, host, host);
+ if (!cm.isNonInteractive())
+ interactive(run_flag, r);
+
cm.showGUI(r, test_pack);
r.runAllTests(config, test_pack);
tmgr.notifyPhpUnitFinished(host,
r.getScenarioSetSetup(), test_pack);
+ if (!run_flag.get())
+ break;
}
}
if (cm.getRunTestPack()>1)
@@ -629,6 +643,7 @@ public class PfttMain {
hosts = new ArrayList<AHost>(1);
hosts.add(this.host);
}
+ AtomicBoolean run_flag = new AtomicBoolean(true);
for ( int i=0 ; i < cm.getRunTestPack() ; i++ ) {
if (!smoke(build, config, tmgr))
break;
@@ -637,10 +652,14 @@ public class PfttMain {
for ( AHost storage_host : hosts ) {
LocalPhptTestPackRunner
test_pack_runner = new LocalPhptTestPackRunner(tmgr.getConsoleManager(), tmgr,
scenario_set, build, storage_host, host, config);
cm.showGUI(test_pack_runner);
+ if (!cm.isNonInteractive())
+ interactive(run_flag,
test_pack_runner);
test_pack_runner.runAllTests(config,
test_pack);
tmgr.notifyPhptFinished(host,
test_pack_runner.getScenarioSetSetup(), test_pack);
+ if (!run_flag.get())
+ return;
}
//
@@ -672,6 +691,7 @@ public class PfttMain {
hosts = new ArrayList<AHost>(1);
hosts.add(this.host);
}
+ AtomicBoolean run_flag = new AtomicBoolean(true);
for ( int i=0 ; i < cm.getRunTestPack() ; i++ ) {
for ( ScenarioSet scenario_set :
getScenarioSets(config, EScenarioSetPermutationLayer.FUNCTIONAL_TEST_CORE) ) {
//
@@ -705,11 +725,15 @@ public class PfttMain {
for ( AHost storage_host : hosts ) {
LocalPhptTestPackRunner
test_pack_runner = new LocalPhptTestPackRunner(tmgr.getConsoleManager(), tmgr,
scenario_set, build, storage_host, host, config);
+ if (!cm.isNonInteractive())
+ interactive(run_flag,
test_pack_runner);
cm.showGUI(test_pack_runner);
test_pack_runner.runTestList(test_pack,
test_cases);
tmgr.notifyPhptFinished(host,
test_pack_runner.getScenarioSetSetup(), test_pack);
+ if (!run_flag.get())
+ return;
}
//
@@ -1237,6 +1261,41 @@ public class PfttMain {
walkConfDir(conf_dir, conf_dir, nonempty_description);
}
+ /** simple console interactivity for AbstractLocalTestPackRunner
+ *
+ * @param run_flag
+ * @param runner
+ */
+ protected static void interactive(final AtomicBoolean run_flag, final
AbstractLocalTestPackRunner<?,?,?> runner) {
+ new Thread() {
+ public void run() {
+ try {
+ boolean started = false;
+ while (!started ||
runner.getState()==ETestPackRunnerState.RUNNING) {
+ char c = (char)
System.in.read();
+ started =
runner.getState()==ETestPackRunnerState.RUNNING;
+ if
(c=='x'||c=='X'||c=='c'||c=='C') {
+
runner.setState(ETestPackRunnerState.NOT_RUNNING);
+
run_flag.set(false);
+ } else if
(c=='1'||c=='0') {
+
runner.setSingleThreaded(true);
+ } else if
(c=='9'||c=='m'||c=='M') {
+
runner.setSingleThreaded(false);
+ } else if
(c=='s'||c=='S') {
+
runner.setState(ETestPackRunnerState.NOT_RUNNING);
+ } else if
(c=='\n'||c=='\r') {
+ } else if (c>-1) {
+
System.out.println("Interactive Help: X<enter> - exit | S<enter> - skip
ScenarioSet");
+
System.out.println("Interactive Help: 1<enter> - run 1 test-pack thread only |
9<enter> - run multiple test-pack threads");
+ }
+ }
+ } catch ( Exception ex ) {
+ ex.printStackTrace();
+ }
+ }
+ }.start();
+ }
+
public static void main(String[] args) throws Throwable {
//
if (args.length > 0 && args[0].equals("sleep")) {
@@ -1253,7 +1312,7 @@ public class PfttMain {
int args_i = 0;
Config config = null;
- boolean is_uac = false, debug = false, randomize_order = false,
no_result_file_for_pass_xskip_skip = false, pftt_debug = false, show_gui =
false, overwrite = false, disable_debug_prompt = false, results_only = false,
dont_cleanup_test_pack = false, phpt_not_in_place = false, thread_safety =
true, skip_smoke_tests = false, pause = false, restart_each_test_all = false,
no_restart_all = false, ignore_unknown_option = false, ini_actual_all = false;
+ boolean is_uac = false, debug = false, randomize_order = false,
no_result_file_for_pass_xskip_skip = false, pftt_debug = false, show_gui =
false, overwrite = false, disable_debug_prompt = false, results_only = false,
dont_cleanup_test_pack = false, phpt_not_in_place = false, thread_safety =
true, skip_smoke_tests = false, pause = false, restart_each_test_all = false,
no_restart_all = false, ignore_unknown_option = false, ini_actual_all = false,
non_interactive = false;
long max_run_time_millis = 0;
int run_test_times_all = 1, run_test_pack = 1, delay_between_ms
= 0, run_test_times_list_times = 1, run_group_times_all = 1,
run_group_times_list_times = 1, max_test_read_count = 0, thread_count = 0,
run_count = 0, suspend_seconds = 0;
LinkedList<String> debug_list = new LinkedList<String>();
@@ -1337,9 +1396,12 @@ public class PfttMain {
phpt_not_in_place = true;
} else if
(args[args_i].equals("-dont_cleanup_test_pack")) {
dont_cleanup_test_pack = true;
+ } else if (args[args_i].equals("-ni")) {
+ non_interactive = true;
} else if (args[args_i].equals("-auto")) {
// change these defaults for automated testing
disable_debug_prompt = true;
+ non_interactive = true;
results_only = false;
dont_cleanup_test_pack = false;
phpt_not_in_place = true;
@@ -1500,7 +1562,7 @@ public class PfttMain {
cm = new LocalConsoleManager(source_pack, debug_pack,
overwrite, debug, results_only, show_gui, disable_debug_prompt,
dont_cleanup_test_pack, phpt_not_in_place, pftt_debug,
no_result_file_for_pass_xskip_skip, randomize_order, run_test_times_all,
run_test_pack,
thread_safety, run_test_times_list_times,
run_group_times_all, run_group_times_list_times, debug_list,
run_test_times_list, run_group_times_list, skip_list,
skip_smoke_tests, max_test_read_count,
thread_count, restart_each_test_all, no_restart_all, delay_between_ms,
- run_count, suspend_seconds, ini_actual_all,
max_run_time_millis);
+ run_count, suspend_seconds, ini_actual_all,
max_run_time_millis, non_interactive);
p.cm = cm;
if (command!=null) {
diff --git a/src/com/mostc/pftt/results/ConsoleManager.java
b/src/com/mostc/pftt/results/ConsoleManager.java
index 13780da..44a5569 100644
--- a/src/com/mostc/pftt/results/ConsoleManager.java
+++ b/src/com/mostc/pftt/results/ConsoleManager.java
@@ -9,6 +9,7 @@ import com.mostc.pftt.model.core.PhpDebugPack;
public interface ConsoleManager {
+ public boolean isNonInteractive();
public boolean isNoRestartAll();
public boolean isDisableDebugPrompt();
public boolean isOverwrite();
diff --git a/src/com/mostc/pftt/results/LocalConsoleManager.java
b/src/com/mostc/pftt/results/LocalConsoleManager.java
index 6345884..4672cd0 100644
--- a/src/com/mostc/pftt/results/LocalConsoleManager.java
+++ b/src/com/mostc/pftt/results/LocalConsoleManager.java
@@ -25,7 +25,7 @@ import com.mostc.pftt.ui.PhptDebuggerFrame;
import com.mostc.pftt.util.ErrorUtil;
public class LocalConsoleManager implements ConsoleManager {
- protected final boolean overwrite, debug_all, results_only, show_gui,
disable_debug_prompt, dont_cleanup_test_pack, phpt_not_in_place, pftt_debug,
no_result_file_for_pass_xskip_skip, randomize_order, thread_safety,
skip_smoke_tests, restart_each_test_all, no_restart_all, ini_actual_all;
+ protected final boolean overwrite, debug_all, results_only, show_gui,
disable_debug_prompt, dont_cleanup_test_pack, phpt_not_in_place, pftt_debug,
no_result_file_for_pass_xskip_skip, randomize_order, thread_safety,
skip_smoke_tests, restart_each_test_all, no_restart_all, ini_actual_all,
non_interactive;
protected final int run_test_times_all, run_test_pack,
run_test_times_list_times, run_group_times, run_group_times_list_times,
max_test_read_count, thread_count, delay_between_ms, suspend_seconds, run_count;
protected final long max_run_time_millis;
protected String source_pack;
@@ -36,10 +36,10 @@ public class LocalConsoleManager implements ConsoleManager {
protected List<String> debug_list, run_test_times_list,
run_group_times_list, skip_list;
public LocalConsoleManager() {
- this(null, null, false, false, false, false, true, false, true,
false, true, false, 1, 1, true, 1, 1, 1, null, null, null, null, false, 0, 0,
false, false, 0, 0, 0, false, 0);
+ this(null, null, false, false, false, false, true, false, true,
false, true, false, 1, 1, true, 1, 1, 1, null, null, null, null, false, 0, 0,
false, false, 0, 0, 0, false, 0, false);
}
- public LocalConsoleManager(String source_pack, PhpDebugPack debug_pack,
boolean overwrite, boolean debug_all, boolean results_only, boolean show_gui,
boolean disable_debug_prompt, boolean dont_cleanup_test_pack, boolean
phpt_not_in_place, boolean pftt_debug, boolean
no_result_file_for_pass_xskip_skip, boolean randomize_order, int
run_test_times_all, int run_test_pack, boolean thread_safety, int
run_test_times_list_times, int run_group_times, int run_group_times_list_times,
List<String> debug_list, List<String> run_test_times_list, List<String>
run_group_times_list, List<String> skip_list, boolean skip_smoke_tests, int
max_test_read_count, int thread_count, boolean restart_each_test_all, boolean
no_restart_all, int delay_between_ms, int run_count, int suspend_seconds,
boolean ini_actual_all, long max_run_time_millis) {
+ public LocalConsoleManager(String source_pack, PhpDebugPack debug_pack,
boolean overwrite, boolean debug_all, boolean results_only, boolean show_gui,
boolean disable_debug_prompt, boolean dont_cleanup_test_pack, boolean
phpt_not_in_place, boolean pftt_debug, boolean
no_result_file_for_pass_xskip_skip, boolean randomize_order, int
run_test_times_all, int run_test_pack, boolean thread_safety, int
run_test_times_list_times, int run_group_times, int run_group_times_list_times,
List<String> debug_list, List<String> run_test_times_list, List<String>
run_group_times_list, List<String> skip_list, boolean skip_smoke_tests, int
max_test_read_count, int thread_count, boolean restart_each_test_all, boolean
no_restart_all, int delay_between_ms, int run_count, int suspend_seconds,
boolean ini_actual_all, long max_run_time_millis, boolean non_interactive) {
this.source_pack = source_pack;
this.debug_pack = debug_pack;
this.overwrite = overwrite;
@@ -72,6 +72,7 @@ public class LocalConsoleManager implements ConsoleManager {
this.suspend_seconds = suspend_seconds;
this.ini_actual_all = ini_actual_all;
this.max_run_time_millis = max_run_time_millis;
+ this.non_interactive = non_interactive;
}
public void showGUI(LocalPhptTestPackRunner test_pack_runner) {
@@ -127,6 +128,11 @@ public class LocalConsoleManager implements ConsoleManager
{
return jf;
}
+ @Override
+ public boolean isNonInteractive() {
+ return non_interactive;
+ }
+
public boolean isNoRestartAll() {
return no_restart_all;
}
diff --git a/src/com/mostc/pftt/results/PhptResultWriter.java
b/src/com/mostc/pftt/results/PhptResultWriter.java
index 74ccac9..c06bbf8 100644
--- a/src/com/mostc/pftt/results/PhptResultWriter.java
+++ b/src/com/mostc/pftt/results/PhptResultWriter.java
@@ -135,6 +135,7 @@ public class PhptResultWriter extends AbstractPhptRW {
PhptTallyFile tally = new PhptTallyFile();
tally.os_name = ""; // TODO host.getOSNameLong();
tally.pass = count(EPhptTestStatus.PASS);
+ tally.timeout = count(EPhptTestStatus.TIMEOUT);
tally.fail = count(EPhptTestStatus.FAIL);
tally.crash = count(EPhptTestStatus.CRASH);
tally.skip = count(EPhptTestStatus.SKIP);
diff --git a/src/com/mostc/pftt/results/PhptTallyFile.groovy
b/src/com/mostc/pftt/results/PhptTallyFile.groovy
index faeba97..b23cf09 100644
--- a/src/com/mostc/pftt/results/PhptTallyFile.groovy
+++ b/src/com/mostc/pftt/results/PhptTallyFile.groovy
@@ -31,6 +31,7 @@ class PhptTallyFile {
xml.tally(
'os_name': tally.os_name,
'pass': tally.pass,
+ 'timeout': tally.timeout,
'fail': tally.fail,
'crash': tally.crash,
'skip': tally.skip,
diff --git a/src/com/mostc/pftt/results/PhptTestResult.java
b/src/com/mostc/pftt/results/PhptTestResult.java
index f71c3a9..b6eefa6 100644
--- a/src/com/mostc/pftt/results/PhptTestResult.java
+++ b/src/com/mostc/pftt/results/PhptTestResult.java
@@ -108,6 +108,11 @@ public class PhptTestResult implements ISerializer {
this.sapi_config = sapi_config;
this.actual_cs = actual_cs;
this.host = host;
+ if
(test_case!=null&&(test_case.isExtension("sqlsrv")||test_case.isExtension("pdo_sqlsrv")))
{
+ if (status!=EPhptTestStatus.PASS)
+ new IllegalStateException().printStackTrace();
+ status = EPhptTestStatus.PASS; // TODO temp
+ }
this.status = status;
this.test_case = test_case;
this.actual = actual;
diff --git a/src/com/mostc/pftt/runner/AbstractLocalTestPackRunner.java
b/src/com/mostc/pftt/runner/AbstractLocalTestPackRunner.java
index 1f9de53..e8e0b26 100644
--- a/src/com/mostc/pftt/runner/AbstractLocalTestPackRunner.java
+++ b/src/com/mostc/pftt/runner/AbstractLocalTestPackRunner.java
@@ -160,6 +160,37 @@ public abstract class AbstractLocalTestPackRunner<A
extends ActiveTestPack, S ex
}
}
+ protected boolean single_threaded = false;
+ public synchronized void setSingleThreaded(boolean single_threaded) {
+ if (this.single_threaded==single_threaded)
+ return;
+ this.single_threaded = single_threaded;
+ if (single_threaded) {
+ // kill off all but first thread
+ Iterator<TestPackThread<T>> it = threads.iterator();
+ if (it.hasNext()) {
+ it.next();
+ while (it.hasNext()) {
+ it.next().stopThisThread();
+ it.remove();
+ }
+ }
+ } else {
+ // create threads
+ for ( int i=0 ; i < init_thread_count ; i++ ) {
+ try {
+ start_thread(false);
+ } catch (IllegalStateException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
/**
*
* @param test_cases_read
--
PHP Quality Assurance Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php