Modified: trunk/hudson/plugins/silktestsuite/src/main/java/org/jenkins/plugins/silktestsuite/workbench/STWTestResultConverter.java (40672 => 40673)
--- trunk/hudson/plugins/silktestsuite/src/main/java/org/jenkins/plugins/silktestsuite/workbench/STWTestResultConverter.java 2012-07-18 13:41:35 UTC (rev 40672)
+++ trunk/hudson/plugins/silktestsuite/src/main/java/org/jenkins/plugins/silktestsuite/workbench/STWTestResultConverter.java 2012-07-19 13:14:47 UTC (rev 40673)
@@ -51,7 +51,7 @@
private Element addTestSuite(Element parent, String name) {
Element newElement = new Element("testsuite");
- newElement.setAttribute("name", name);
+ newElement.setAttribute("name", name.replace(".xml", ""));
newElement.setAttribute("tests", "0");
newElement.setAttribute("failures", "0");
newElement.setAttribute("errors", "0");
@@ -119,16 +119,24 @@
private void convertLine(Element suite, String[] line) {
- String projectName = line[1];
- Element projectSuite = this.suites.get(projectName);
- if (projectSuite == null)
- projectSuite = addTestSuite(suite, projectName);
- addTestCase(projectSuite, line);
+ if (line.length == 7) {
+ String projectName = line[1];
+ Element projectSuite = this.suites.get(projectName);
+ if (projectSuite == null)
+ projectSuite = addTestSuite(suite, projectName);
+ addTestCase(projectSuite, line);
+ } else {
+ // TODO: handle error, at leased report it to the user
+ }
}
private static void increaseCount(Element suite, String attribute) {
if (suite != null) {
- int value = Integer.parseInt(suite.getAttributeValue(attribute));
+ String attributeValue = suite.getAttributeValue(attribute);
+ int value = 0;
+ if (Strings.isNullOrEmpty(attributeValue))
+ value = Integer.parseInt(attributeValue);
+
suite.setAttribute(attribute, String.valueOf(value+1));
increaseCount(suite.getParentElement(), attribute);
}
Modified: trunk/hudson/plugins/silktestsuite/src/main/java/org/jenkins/plugins/silktestsuite/workbench/SilkTestWorkbenchCLIBuilder.java (40672 => 40673)
--- trunk/hudson/plugins/silktestsuite/src/main/java/org/jenkins/plugins/silktestsuite/workbench/SilkTestWorkbenchCLIBuilder.java 2012-07-18 13:41:35 UTC (rev 40672)
+++ trunk/hudson/plugins/silktestsuite/src/main/java/org/jenkins/plugins/silktestsuite/workbench/SilkTestWorkbenchCLIBuilder.java 2012-07-19 13:14:47 UTC (rev 40673)
@@ -10,7 +10,11 @@
import hudson.model.AbstractBuild;
import hudson.tasks.Builder;
+import java.io.File;
+import java.io.FileFilter;
import java.io.IOException;
+import java.io.PrintStream;
+import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -67,13 +71,6 @@
@Override
public boolean perform(final AbstractBuild<?, ?> build, final Launcher launcher, final BuildListener listener)
throws InterruptedException, IOException {
- if (!Functions.isWindows()) {
- listener.error("Only available on Windows systems.");
- LOGGER.severe("This operation system is not supported with SilkTest.");
- build.setResult(Result.ABORTED);
- return true;
- }
-
if (!Utils.cleanupWorkspace(launcher, build.getWorkspace().getRemote(), build.getTimestamp())) {
listener.error("[SilkTest Workbench] Deleting the result folder failed.");
build.setResult(Result.FAILURE);
@@ -81,28 +78,62 @@
}
FilePath resultPath = createResultFolders(build.getWorkspace());
- String resultFileName = calculateResultName(dsn, projectsCsv, namesCsv);
- FilePath resultFile = new FilePath(resultPath, resultFileName+".txt");
Map<String,String> environment = launcher.getChannel().call(new RemoteEnvironmentVariables());
- List<String> cmd = createCommandLine(environment, resultFile.getRemote());
- ProcStarter silktestworkbench = launcher.launch().cmds(cmd).stdout(listener.getLogger());
- Proc launch = launcher.launch(silktestworkbench);
- int exitCode = launch.join();
- Result result = exitCode == 0 ? Result.SUCCESS : Result.UNSTABLE;
- FilePath junitResultFile = new FilePath(resultPath, resultFileName+".xml");
- new STWTestResultConverter().convert(resultFile, junitResultFile);
+ Result result = Result.SUCCESS;
+ String[] projects = projectsCsv.split(",");
+ if (projects.length > 1) {
+ for (String project : projects) {
+ FilePath resultFile = new FilePath(resultPath, generateResultName(resultPath)+".txt");
+ listener.getLogger().println("[SilkTest Workbench] Launch test execution for project: "+project);
+ result = result.combine(launchSilkTestWB(launcher, listener.getLogger(), environment, resultFile, project.trim(), null));
+ }
+ } else {
+ assert(!projectsCsv.contains(","));
+ for (String testscript : namesCsv.split(",")) {
+ FilePath resultFile = new FilePath(resultPath, generateResultName(resultPath)+".txt");
+ listener.getLogger().println(MessageFormat.format("[SilkTest Workbench] Launch test execution for test script [{0}] in project [{1}]", testscript, projectsCsv));
+ result = result.combine(launchSilkTestWB(launcher, listener.getLogger(), environment, resultFile, projectsCsv, testscript.trim()));
+ }
+ }
+
+ FileFilter filter = new FileFilter() {
+ @Override
+ public boolean accept(File file) {
+ return file.getName().endsWith(".txt");
+ }
+ };
+
+ for (FilePath resultFile : resultPath.list(filter)) {
+ String resultFileName = resultFile.getName().replace(".txt", ".xml");
+ FilePath junitResultFile = new FilePath(resultPath, resultFileName);
+ new STWTestResultConverter().convert(resultFile, junitResultFile);
+ }
build.setResult(result);
return result.isBetterThan(Result.FAILURE);
}
- private String calculateResultName(String dsn2, String projectsCsv2, String namesCsv2) {
- return "xy";
+ private String generateResultName(FilePath resultPath) throws IOException, InterruptedException {
+ String fileName = "SilkTestWB_Result";
+ int i=1;
+ while (new FilePath(resultPath, fileName+".xml").exists()) {
+ fileName = fileName + "_" + i;
+ i++;
+ }
+ return fileName;
}
- private List<String> createCommandLine(Map<String, String> environment, String resultPath) {
+ private Result launchSilkTestWB(Launcher launcher, PrintStream stdOut, Map<String, String> environment, FilePath resultFile, String project, String testscript) throws IOException, InterruptedException {
+ List<String> cmd = createCommandLine(environment, resultFile.getRemote(), project, testscript);
+ ProcStarter silktestworkbench = launcher.launch().cmds(cmd).stdout(stdOut);
+ Proc launch = launcher.launch(silktestworkbench);
+ int exitCode = launch.join();
+ return exitCode == 0 ? Result.SUCCESS : Result.UNSTABLE;
+ }
+
+ private List<String> createCommandLine(Map<String, String> environment, String resultPath, String project, String testscript) {
String oaHome = environment.get("OPEN_AGENT_HOME");
List<String> cli = new ArrayList<String>();
cli.add(oaHome+"/gui/stw.exe");
@@ -116,11 +147,11 @@
cli.add(resultPath);
if (!Strings.isNullOrEmpty(projectsCsv)) {
cli.add("-r");
- cli.add(projectsCsv); // FIXME: allows only one project
+ cli.add(project);
}
if (!Strings.isNullOrEmpty(namesCsv)) {
cli.add("-s");
- cli.add(namesCsv); // FIXME: allows only one script name
+ cli.add(testscript);
}
if (!Strings.isNullOrEmpty(playbackenv)) {
cli.add("-e");