Title: [40673] trunk/hudson/plugins/silktestsuite/src/main/java/org/jenkins/plugins/silktestsuite: enable moltiple projetcs and testscripts for stwcli builder

Diff

Modified: trunk/hudson/plugins/silktestsuite/src/main/java/org/jenkins/plugins/silktestsuite/common/Utils.java (40672 => 40673)


--- trunk/hudson/plugins/silktestsuite/src/main/java/org/jenkins/plugins/silktestsuite/common/Utils.java	2012-07-18 13:41:35 UTC (rev 40672)
+++ trunk/hudson/plugins/silktestsuite/src/main/java/org/jenkins/plugins/silktestsuite/common/Utils.java	2012-07-19 13:14:47 UTC (rev 40673)
@@ -24,11 +24,13 @@
         }
 
         private void deleteRecursive(File file) {
-          if (file.isFile() && (file.lastModified() < startTime.getTimeInMillis()))
-            file.delete();
-          else {
-            for (File f : file.listFiles()) {
-              deleteRecursive(f);
+          if (file != null) {
+            if (file.isFile() && (file.lastModified() < startTime.getTimeInMillis()))
+              file.delete();
+            else {
+              for (File f : file.listFiles()) {
+                deleteRecursive(f);
+              }
             }
           }
         }

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");

Modified: trunk/hudson/plugins/silktestsuite/src/main/java/org/jenkins/plugins/silktestsuite/workbench/SilkTestWorkbenchCOMBuilder.java (40672 => 40673)


--- trunk/hudson/plugins/silktestsuite/src/main/java/org/jenkins/plugins/silktestsuite/workbench/SilkTestWorkbenchCOMBuilder.java	2012-07-18 13:41:35 UTC (rev 40672)
+++ trunk/hudson/plugins/silktestsuite/src/main/java/org/jenkins/plugins/silktestsuite/workbench/SilkTestWorkbenchCOMBuilder.java	2012-07-19 13:14:47 UTC (rev 40673)
@@ -1,11 +1,9 @@
 package org.jenkins.plugins.silktestsuite.workbench;
 
-import hudson.Functions;
 import hudson.Launcher;
 import hudson.model.BuildListener;
 import hudson.model.Result;
 import hudson.model.AbstractBuild;
-import hudson.remoting.Callable;
 import hudson.tasks.Builder;
 
 import java.io.IOException;

Modified: trunk/hudson/plugins/silktestsuite/src/main/java/org/jenkins/plugins/silktestsuite/workbench/SilkTestWorkbenchDescriptor.java (40672 => 40673)


--- trunk/hudson/plugins/silktestsuite/src/main/java/org/jenkins/plugins/silktestsuite/workbench/SilkTestWorkbenchDescriptor.java	2012-07-18 13:41:35 UTC (rev 40672)
+++ trunk/hudson/plugins/silktestsuite/src/main/java/org/jenkins/plugins/silktestsuite/workbench/SilkTestWorkbenchDescriptor.java	2012-07-19 13:14:47 UTC (rev 40673)
@@ -23,7 +23,7 @@
   private static final Logger LOGGER = Logger.getLogger("org.jenkins.plugins.silktestsuite.visualtest");
 
   public SilkTestWorkbenchDescriptor() {
-    super(SilkTestWorkbenchCOMBuilder.class);
+    super(SilkTestWorkbenchCLIBuilder.class);
     load();
   }
 

Reply via email to