Commit: e11c28677ead6d19e81211ea353c38337bb733ba Author: Matt Ficken <v-maf...@microsoft.com> Mon, 12 Aug 2013 14:21:34 -0700 Parents: 62d42d325dcb196d9a7171f35281c7cb3b58fd4f Branches: master
Link: http://git.php.net/?p=pftt2.git;a=commitdiff;h=e11c28677ead6d19e81211ea353c38337bb733ba Log: fix required-extensions smoke test Former-commit-id: e1ee4627704131b7a93d1893468a182bd9b9f9a7 Changed paths: M src/com/mostc/pftt/main/PfttMain.java M src/com/mostc/pftt/model/core/PhpBuild.java M src/com/mostc/pftt/model/core/PhpIni.java M src/com/mostc/pftt/model/core/ReadOnlyPhpIni.java M src/com/mostc/pftt/model/smoke/RequiredExtensionsSmokeTest.java M src/com/mostc/pftt/model/smoke/RequiredFeaturesSmokeTest.java M src/com/mostc/pftt/results/LocalConsoleManager.java M src/com/mostc/pftt/results/PhpResultPackWriter.java
diff --git a/src/com/mostc/pftt/main/PfttMain.java b/src/com/mostc/pftt/main/PfttMain.java index 584b5f4..64ea5c0 100644 --- a/src/com/mostc/pftt/main/PfttMain.java +++ b/src/com/mostc/pftt/main/PfttMain.java @@ -454,6 +454,7 @@ public class PfttMain { System.out.println(); System.out.println(" === Test Times ==="); System.out.println(new AlignedTable(2, 85) + .addRow("-max_run_time_millis <N>", "milliseconds to run each ScenarioSet for") .addRow("-run_test_pack <N>", "runs entire test-pack N times") .addRow("-run_group_times_all <N>", "runs all groups of tests N times (in same order every time, unless -randomize used)") .addRow("-run_group_times_list <N> <list file>", "just like run_group_times_all and run_test_times_list (but for groups of tests)") @@ -624,16 +625,18 @@ public class PfttMain { // on Windows, missing .DLLs from a php build will cause a blocking winpop dialog msg to appear // in such a case, the test will timeout after 1 minute and then fail (stopping at that point is important) // @see PhpBuild#getExtensionList - if (test.test(build, cm, host, SAPIScenario.getSAPIScenario(scenario_set).getSAPIType())==ESmokeTestStatus.FAIL) { + if (test.test(build, cm, host, SAPIScenario.getSAPIScenario(scenario_set).getSAPIType(), tmgr)==ESmokeTestStatus.FAIL) { // if this test fails, RequiredFeaturesSmokeTest will fail for sure cm.println(EPrintType.CANT_CONTINUE, "Main", "Failed smoke test: "+test.getName()); + break; } } { RequiredFeaturesSmokeTest test = new RequiredFeaturesSmokeTest(); - if (test.test(build, cm, host)==ESmokeTestStatus.FAIL) { + if (test.test(build, cm, host, tmgr)==ESmokeTestStatus.FAIL) { cm.println(EPrintType.CANT_CONTINUE, "Main", "Failed smoke test: "+test.getName()); + break; } } @@ -654,6 +657,8 @@ public class PfttMain { PhptTestCountsMatchSmokeTest test = new PhptTestCountsMatchSmokeTest(); if (test.test(tmgr)==ESmokeTestStatus.FAIL) { cm.println(EPrintType.CANT_CONTINUE, "Main", "Failed smoke test: "+test.getName()); + + tmgr.notifyFailedSmokeTest(test.getName(), ""); } } // @@ -682,15 +687,17 @@ public class PfttMain { if (!cm.isSkipSmokeTests()) { { RequiredExtensionsSmokeTest test = new RequiredExtensionsSmokeTest(); - if (test.test(build, cm, host, SAPIScenario.getSAPIScenario(scenario_set).getSAPIType())==ESmokeTestStatus.FAIL) { + if (test.test(build, cm, host, SAPIScenario.getSAPIScenario(scenario_set).getSAPIType(), tmgr)==ESmokeTestStatus.FAIL) { cm.println(EPrintType.CANT_CONTINUE, "Main", "Failed smoke test: "+test.getName()); + break; } } { RequiredFeaturesSmokeTest test = new RequiredFeaturesSmokeTest(); - if (test.test(build, cm, host)==ESmokeTestStatus.FAIL) { + if (test.test(build, cm, host, tmgr)==ESmokeTestStatus.FAIL) { cm.println(EPrintType.CANT_CONTINUE, "Main", "Failed smoke test: "+test.getName()); + break; } } @@ -719,6 +726,8 @@ public class PfttMain { PhptTestCountsMatchSmokeTest test = new PhptTestCountsMatchSmokeTest(); if (test.test(tmgr)==ESmokeTestStatus.FAIL) { cm.println(EPrintType.CANT_CONTINUE, "Main", "Failed smoke test: "+test.getName()); + + tmgr.notifyFailedSmokeTest(test.getName(), ""); } } // @@ -1114,6 +1123,9 @@ public class PfttMain { } else { cm.println(EPrintType.CLUE, PfttMain.class, "Build: "+build); build = new PhpBuild(host.getPhpSdkDir() + "/" + path); + // open all builds now to ensure they exist (rather than finding out + // later when build is used (because that could be hours away if running + // several scenario sets and several builds)) if (build.open(cm, host)) { builds.add(build); } else { @@ -1251,6 +1263,7 @@ public class PfttMain { 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; + 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>(); LinkedList<String> run_test_times_list = new LinkedList<String>(); @@ -1359,6 +1372,9 @@ public class PfttMain { no_restart_all = true; } else if (args[args_i].equals("-ini_actual_all")) { ini_actual_all = true; + } else if (args[args_i].equals("-max_run_time_millis")) { + args_i++; + max_run_time_millis = Long.parseLong(args[args_i]); } else if (args[args_i].equals("-delay_between_ms")) { args_i++; delay_between_ms = Integer.parseInt(args[args_i]); @@ -1429,7 +1445,7 @@ public class PfttMain { } else if (args[args_i].equals("-uac")) { // ignore: intercepted and handled by bin/pftt.cmd batch script is_uac = true; - } else if (args[args_i].equals("-pftt-profile")) { + } else if (args[args_i].equals("-pftt_profile")) { // ignore: intercepted and handled by bin/pftt.cmd batch script } else if (args[args_i].equals("-pftt_debug")) { pftt_debug = true; @@ -1491,7 +1507,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); + run_count, suspend_seconds, ini_actual_all, max_run_time_millis); p.cm = cm; if (command!=null) { diff --git a/src/com/mostc/pftt/model/core/PhpBuild.java b/src/com/mostc/pftt/model/core/PhpBuild.java index f5f37aa..0f47cd5 100644 --- a/src/com/mostc/pftt/model/core/PhpBuild.java +++ b/src/com/mostc/pftt/model/core/PhpBuild.java @@ -37,16 +37,17 @@ import com.mostc.pftt.util.StringUtil2; public class PhpBuild extends SAPIManager { private String build_path, php_exe, php_cgi_exe; private WeakHashMap<PhpIni,WeakHashMap<String,Boolean>> ext_enable_map; + private WeakHashMap<PhpIni,String[]> ext_available_map; private SoftReference<String> php_info; private SoftReference<PhpIni> php_ini; private String version_str, revision; private EBuildBranch branch; - private SoftReference<String[]> module_list; private int major, minor, release; public PhpBuild(String build_path) { this.build_path = new File(build_path).getAbsolutePath(); - ext_enable_map = new WeakHashMap<PhpIni,WeakHashMap<String,Boolean>>(); + ext_enable_map = new WeakHashMap<PhpIni,WeakHashMap<String,Boolean>>(3); + ext_available_map = new WeakHashMap<PhpIni,String[]>(3); } /** checks if given OpenSSL version is compatible with this PHP Build @@ -567,33 +568,24 @@ public class PhpBuild extends SAPIManager { WeakHashMap<String,Boolean> map = ext_enable_map.get(ini); if (map!=null) { Boolean b = map.get(ext_name); - //return b == null ? false : b.booleanValue(); - return true; + return b == null ? false : b.booleanValue(); } map = new WeakHashMap<String,Boolean>(); ext_enable_map.put(ini, map); - - if (ini!=null) { - String[] extensions = ini.getExtensions(); - if (extensions!=null) { - for (String module:extensions) { - if (module.toLowerCase().contains(ext_name)) { - map.put(ext_name, true); - return true; - } - } - } - } - for (String module:getExtensionList(cm, host, ini)) { - if (module.toLowerCase().contains(ext_name)) { - map.put(ext_name, true); + String[] available_extensions = getLoadableExtensionList(cm, host, ini); + for (String available_ext_name:available_extensions) + // cache as FOUND for next time + map.put(available_ext_name, Boolean.TRUE); + + for (String available_ext_name:available_extensions) { + if (ext_name.equals(available_ext_name)) return true; - } } - map.put(ext_name, false); + // cache as NOT FOUND + map.put(ext_name, Boolean.FALSE); return false; } // end public boolean isExtensionEnabled @@ -782,8 +774,8 @@ public class PhpBuild extends SAPIManager { } } // end public static class PHPOutput - public String[] getExtensionList(ConsoleManager cm, AHost host, ESAPIType type) throws Exception { - return getExtensionList(cm, host, getDefaultPhpIni(cm, host, type)); + public String[] getLoadableExtensionList(ConsoleManager cm, AHost host, ESAPIType type) throws Exception { + return getLoadableExtensionList(cm, host, getDefaultPhpIni(cm, host, type)); } /** gets the static builtin extensions for this build build and the dynamic extensions the @@ -798,29 +790,28 @@ public class PhpBuild extends SAPIManager { * @param ini * @return * @throws Exception + * @see PhpIni#getEnabledExtensions */ - public String[] getExtensionList(ConsoleManager cm, AHost host, PhpIni ini) throws Exception { - String[] module_list; - if (this.module_list!=null) { - module_list = this.module_list.get(); - if (module_list!=null) - return module_list; - } + public String[] getLoadableExtensionList(ConsoleManager cm, AHost host, PhpIni ini) throws Exception { + String[] module_list = ext_available_map.get(ini); + if (module_list!=null) + return module_list; String ini_settings = ini==null?null:ini.toCliArgString(host); - ExecOutput output = host.execOut(php_exe+(ini_settings==null?"":" "+ini_settings)+" -m", Host.ONE_MINUTE); + String php_cmd = php_exe+(ini_settings==null?"":" "+ini_settings)+" -m"; + ExecOutput output = host.execOut(php_cmd, Host.ONE_MINUTE); output.printOutputIfCrash(Host.toContext(getClass(), "getExtensionList"), cm); ArrayList<String> list = new ArrayList<String>(); for (String module : output.getLines()) { - if (!module.startsWith("[") && module.length() > 0) + if (!module.startsWith("[") && !module.contains("Unknown") && !module.contains("Warning") && module.length() > 0) list.add(module.toLowerCase()); } module_list = (String[]) list.toArray(new String[list.size()]); - this.module_list = new SoftReference<String[]>(module_list); + ext_available_map.put(ini, module_list); return module_list; } diff --git a/src/com/mostc/pftt/model/core/PhpIni.java b/src/com/mostc/pftt/model/core/PhpIni.java index 9210a5d..fb0803b 100644 --- a/src/com/mostc/pftt/model/core/PhpIni.java +++ b/src/com/mostc/pftt/model/core/PhpIni.java @@ -281,6 +281,12 @@ public class PhpIni { * @see #setExtensionDir */ public void putSingle(String directive, String value) { + doPutSingle(directive, value); + } + + protected void doPutSingle(String directive, String value) { + if (value==null) + value = ""; ArrayList<String> values = new ArrayList<String>(1); values.add(value); ini_map.put(directive, values); @@ -304,9 +310,14 @@ public class PhpIni { public void putMulti(String directive, String value) { ArrayList<String> values = ini_map.get(directive); if (values==null) { + if (value==null) + value = ""; values = new ArrayList<String>(1); values.add(value); ini_map.put(directive, values); + } else if (value==null) { + // allow at most 1 blank value + return; } else if (!values.contains(value)) { values.add(value); } @@ -368,7 +379,7 @@ public class PhpIni { * @return */ @Nullable - public String[] getExtensions() { + public String[] getEnabledExtensions() { return getMulti(EXTENSION); } @@ -531,7 +542,7 @@ public class PhpIni { this.ext_ini = ext_ini.ext_ini = new SoftReference<PhpIni>(ext_ini); String ext_dir = get(EXTENSION_DIR); if (ext_dir!=null) - ext_ini.putSingle(EXTENSION_DIR, ext_dir); + ext_ini.doPutSingle(EXTENSION_DIR, ext_dir); ArrayList<String> values = ini_map.get(EXTENSION); if (values!=null) ext_ini.ini_map.put(EXTENSION, (ArrayList<String>)values.clone()); @@ -555,23 +566,24 @@ public class PhpIni { // StringBuilder sb = new StringBuilder(256); for ( String directive : getDirectives()) { - String value = get(directive); - if (value==null) - continue; // allow "" empty values though - - // CRITICAL: escape these characters in the INI - value = StringUtil.replaceAll(PAT_bs, "\\\\\"", StringUtil.replaceAll(PAT_amp, "\\\\&", StringUtil.replaceAll(PAT_pipe, "\\\\|", value))); - - // CRITICAL: in a windows batch script % is replaced with the command to execute. - // need to escape this value. - if (host.isWindows()) - value = StringUtil.replaceAll(PAT_per, "\\%\\%", value); - - sb.append(" -d \""); - sb.append(directive); - sb.append("="); - sb.append(value); - sb.append("\""); + for ( String value : getMulti(directive) ) { + if (value==null) + continue; // allow "" empty values though + + // CRITICAL: escape these characters in the INI + value = StringUtil.replaceAll(PAT_bs, "\\\\\"", StringUtil.replaceAll(PAT_amp, "\\\\&", StringUtil.replaceAll(PAT_pipe, "\\\\|", value))); + + // CRITICAL: in a windows batch script % is replaced with the command to execute. + // need to escape this value. + if (host.isWindows()) + value = StringUtil.replaceAll(PAT_per, "\\%\\%", value); + + sb.append(" -d \""); + sb.append(directive); + sb.append("="); + sb.append(value); + sb.append("\""); + } } String cli_arg_str = sb.toString(); cli_arg = new SoftReference<String>(cli_arg_str); diff --git a/src/com/mostc/pftt/model/core/ReadOnlyPhpIni.java b/src/com/mostc/pftt/model/core/ReadOnlyPhpIni.java index b056707..5a00101 100644 --- a/src/com/mostc/pftt/model/core/ReadOnlyPhpIni.java +++ b/src/com/mostc/pftt/model/core/ReadOnlyPhpIni.java @@ -9,15 +9,19 @@ package com.mostc.pftt.model.core; */ public class ReadOnlyPhpIni extends PhpIni { + @Override public void putSingle(String directive, String value) { } + @Override public void putMulti(String directive, String value) { } + @Override public void replaceAll(PhpIni ini) { } + @Override public void remove(String directive) { } diff --git a/src/com/mostc/pftt/model/smoke/RequiredExtensionsSmokeTest.java b/src/com/mostc/pftt/model/smoke/RequiredExtensionsSmokeTest.java index b9aee73..2321200 100644 --- a/src/com/mostc/pftt/model/smoke/RequiredExtensionsSmokeTest.java +++ b/src/com/mostc/pftt/model/smoke/RequiredExtensionsSmokeTest.java @@ -3,12 +3,12 @@ package com.mostc.pftt.model.smoke; import com.github.mattficken.io.StringUtil; import com.mostc.pftt.host.AHost; import com.mostc.pftt.host.Host; -import com.mostc.pftt.model.core.EBuildBranch; import com.mostc.pftt.model.core.ESAPIType; import com.mostc.pftt.model.core.PhpBuild; import com.mostc.pftt.model.core.PhpIni; import com.mostc.pftt.results.ConsoleManager; import com.mostc.pftt.results.EPrintType; +import com.mostc.pftt.results.PhpResultPackWriter; /** Smoke test that verifies a PHP Build has all the required extensions. * @@ -83,20 +83,28 @@ public class RequiredExtensionsSmokeTest extends SmokeTest { "zlib" }; - public ESmokeTestStatus test(PhpBuild build, ConsoleManager cm, AHost host, ESAPIType type) { + public ESmokeTestStatus test(PhpBuild build, ConsoleManager cm, AHost host, ESAPIType type, PhpResultPackWriter tmgr) { if (!host.isWindows()) // non-Windows PHP builds can have whatever extensions they want return ESmokeTestStatus.XSKIP; try { // Windows PHP builds must have these extensions to pass this test + ESmokeTestStatus status = ESmokeTestStatus.PASS; + StringBuilder out = new StringBuilder(); for ( String ext_name : windows_required_extensions ) { // this will timeout in .DLL is missing on Windows - must fail test in that case if (!build.isExtensionEnabled(cm, host, type, ext_name)) { + out.append("Missing Required Extension: "+ext_name); + out.append('\n'); cm.println(EPrintType.COMPLETED_OPERATION, getName(), "Missing Required Extension: "+ext_name); - return ESmokeTestStatus.FAIL; + status = ESmokeTestStatus.FAIL; + // continue checking all extensions } } - return ESmokeTestStatus.PASS; + if (status==ESmokeTestStatus.FAIL) + tmgr.notifyFailedSmokeTest(getName(), out.toString()); + + return status; } catch ( Exception ex ) { cm.addGlobalException(EPrintType.CANT_CONTINUE, getClass(), "test", ex, ""); return ESmokeTestStatus.INTERNAL_EXCEPTION; diff --git a/src/com/mostc/pftt/model/smoke/RequiredFeaturesSmokeTest.java b/src/com/mostc/pftt/model/smoke/RequiredFeaturesSmokeTest.java index 9c122c0..6d21719 100644 --- a/src/com/mostc/pftt/model/smoke/RequiredFeaturesSmokeTest.java +++ b/src/com/mostc/pftt/model/smoke/RequiredFeaturesSmokeTest.java @@ -4,6 +4,7 @@ import com.mostc.pftt.host.AHost; import com.mostc.pftt.model.core.PhpBuild; import com.mostc.pftt.results.ConsoleManager; import com.mostc.pftt.results.EPrintType; +import com.mostc.pftt.results.PhpResultPackWriter; /** tests that a build has all required features * @@ -1196,7 +1197,7 @@ public class RequiredFeaturesSmokeTest extends SmokeTest { nts_parts = required_nts_features_str.split("%s"); } // end static - public ESmokeTestStatus test(PhpBuild build, ConsoleManager cm, AHost host) { + public ESmokeTestStatus test(PhpBuild build, ConsoleManager cm, AHost host, PhpResultPackWriter tmgr) { if (!host.isWindows()) return ESmokeTestStatus.XSKIP; @@ -1210,15 +1211,20 @@ public class RequiredFeaturesSmokeTest extends SmokeTest { String info = build.getPhpInfo(cm, host); int i = 0, j; ESmokeTestStatus status = ESmokeTestStatus.PASS; + StringBuilder out = new StringBuilder(); for ( String part : parts ) { j = info.indexOf(part, i); if (j==-1) { cm.println(EPrintType.COMPLETED_OPERATION, getName(), "Missing required info: `"+part+"`"); + out.append("Missing required info: `"+part+"`"); + out.append('\n'); status = ESmokeTestStatus.FAIL; } else { i = j+1; } } + if (status==ESmokeTestStatus.FAIL) + tmgr.notifyFailedSmokeTest(getName(), out.toString()); return status; } catch ( Exception ex ) { cm.addGlobalException(EPrintType.CANT_CONTINUE, getClass(), "test", ex, ""); diff --git a/src/com/mostc/pftt/results/LocalConsoleManager.java b/src/com/mostc/pftt/results/LocalConsoleManager.java index 686e0f6..6345884 100644 --- a/src/com/mostc/pftt/results/LocalConsoleManager.java +++ b/src/com/mostc/pftt/results/LocalConsoleManager.java @@ -27,6 +27,7 @@ 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 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; protected PhpDebugPack debug_pack; protected PhptDebuggerFrame phpt_gui; @@ -35,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, true, 0, 0, false, false, 0, 0, 0, false); + 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); } - 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) { + 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) { this.source_pack = source_pack; this.debug_pack = debug_pack; this.overwrite = overwrite; @@ -70,6 +71,7 @@ public class LocalConsoleManager implements ConsoleManager { this.run_count = run_count; this.suspend_seconds = suspend_seconds; this.ini_actual_all = ini_actual_all; + this.max_run_time_millis = max_run_time_millis; } public void showGUI(LocalPhptTestPackRunner test_pack_runner) { @@ -396,5 +398,10 @@ public class LocalConsoleManager implements ConsoleManager { public boolean isGetActualIniAll() { return ini_actual_all; } + + @Override + public long getMaxRunTimeMillis() { + return max_run_time_millis; + } } // end public class ConsoleManager diff --git a/src/com/mostc/pftt/results/PhpResultPackWriter.java b/src/com/mostc/pftt/results/PhpResultPackWriter.java index 2aedc7a..7075bc9 100644 --- a/src/com/mostc/pftt/results/PhpResultPackWriter.java +++ b/src/com/mostc/pftt/results/PhpResultPackWriter.java @@ -1024,5 +1024,20 @@ public class PhpResultPackWriter extends PhpResultPack implements ITestResultRec out.add(s.getScenarioSet()); return out; } + + public void notifyFailedSmokeTest(String name, String output) { + try { + FileWriter fw = new FileWriter(new File(telem_dir, "SMOKE"), true); // append + PrintWriter pw = new PrintWriter(fw); + pw.println(name); + fw.close(); + + fw = new FileWriter(new File(telem_dir, "SMOKE_"+name)); + fw.write(output); + fw.close(); + } catch ( Exception ex ) { + ex.printStackTrace(); + } + } } // end public class PhpResultPackWriter