Example #1
0
 @Override
 public AbstractBuild<?, ?> getOwner() {
   SuiteResult sr = getSuiteResult();
   if (sr == null) {
     LOGGER.warning("In getOwner(), getSuiteResult is null");
     return null;
   }
   hudson.tasks.junit.TestResult tr = sr.getParent();
   if (tr == null) {
     LOGGER.warning("In getOwner(), suiteResult.getParent() is null.");
     return null;
   }
   return tr.getOwner();
 }
  @Override
  public Data getTestData(AbstractBuild<?, ?> ab, Launcher lnchr, BuildListener bl, TestResult tr)
      throws IOException, InterruptedException {
    bl.getLogger().println("Scanning for test data...");
    boolean foundSession = false;
    List<String> sessionIDs = null;

    for (SuiteResult sr : tr.getSuites()) {
      for (CaseResult cr : sr.getCases()) {
        sessionIDs = TestingBotReportFactory.findSessionIDs(cr);
        if (!sessionIDs.isEmpty()) {
          String errorDetails = cr.getErrorDetails();
          if (errorDetails == null) {
            errorDetails = "";
          }
          TestingBotAPI api = new TestingBotAPI();
          Map<String, String> data = new HashMap<String, String>();
          data.put("success", cr.isPassed() ? "1" : "0");
          data.put("status_message", errorDetails);
          data.put("name", cr.getFullName());
          api.updateTest(sessionIDs.get(0), data);

          foundSession = true;
        }
      }
    }

    if (!foundSession) {
      bl.getLogger().println("No TestingBot sessionIDs found in test output.");
      return null;
    } else {
      return TestingBotReportFactory.INSTANCE;
    }
  }
  /**
   * Record the test results into the current build.
   *
   * @param junitFilePattern
   * @param build
   * @param listener
   * @return
   * @throws InterruptedException
   * @throws IOException
   */
  private boolean recordTestResult(
      String junitFilePattern, AbstractBuild<?, ?> build, BuildListener listener)
      throws InterruptedException, IOException {
    TestResultAction existingAction = build.getAction(TestResultAction.class);
    TestResultAction action;

    try {
      final long buildTime = build.getTimestamp().getTimeInMillis();

      TestResult existingTestResults = null;
      if (existingAction != null) {
        existingTestResults = existingAction.getResult();
      }
      TestResult result = getTestResult(junitFilePattern, build, existingTestResults, buildTime);

      if (existingAction == null) {
        action = new TestResultAction(build, result, listener);
      } else {
        action = existingAction;
        action.setResult(result, listener);
      }
      if (result.getPassCount() == 0 && result.getFailCount() == 0)
        new AbortException("None of the test reports contained any result");
    } catch (AbortException e) {
      if (build.getResult() == Result.FAILURE)
        // most likely a build failed before it gets to the test phase.
        // don't report confusing error message.
        return true;

      listener.getLogger().println(e.getMessage());
      build.setResult(Result.FAILURE);
      return true;
    }

    if (existingAction == null) {
      build.getActions().add(action);
    }

    if (action.getResult().getFailCount() > 0) build.setResult(Result.UNSTABLE);

    return true;
  }
  /* (non-Javadoc)
   * @see hudson.plugins.testlink.result.ResultSeeker#seekAndUpdate(hudson.plugins.testlink.result.TestCaseWrapper<?>[], hudson.model.AbstractBuild, hudson.Launcher, hudson.model.BuildListener, hudson.plugins.testlink.TestLinkSite, hudson.plugins.testlink.result.Report)
   */
  @Override
  public void seek(
      TestCaseWrapper[] automatedTestCases,
      AbstractBuild<?, ?> build,
      Launcher launcher,
      BuildListener listener,
      TestLinkSite testlink)
      throws ResultSeekerException {
    listener.getLogger().println(Messages.Results_JUnit_LookingForTestCases()); // i18n
    try {
      final JUnitParser parser = new JUnitParser(false);
      final TestResult testResult = parser.parse(this.includePattern, build, launcher, listener);

      for (SuiteResult suiteResult : testResult.getSuites()) {
        for (CaseResult caseResult : suiteResult.getCases()) {
          for (TestCaseWrapper automatedTestCase : automatedTestCases) {
            final String[] commaSeparatedValues =
                automatedTestCase.getKeyCustomFieldValues(this.keyCustomField);
            for (String value : commaSeparatedValues) {
              if (!caseResult.isSkipped() && caseResult.getName().equals(value)) {
                ExecutionStatus status = this.getExecutionStatus(caseResult);
                automatedTestCase.addCustomFieldAndStatus(value, status);

                if (this.isIncludeNotes()) {
                  final String notes = this.getJUnitNotes(caseResult, build.number);
                  automatedTestCase.appendNotes(notes);
                }
                super.handleResult(automatedTestCase, build, listener, testlink, suiteResult);
              }
            }
          }
        }
      }
    } catch (IOException e) {
      throw new ResultSeekerException(e);
    } catch (InterruptedException e) {
      throw new ResultSeekerException(e);
    }
  }
  @Override
  public Data getTestData(
      AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener, TestResult testResult) {

    Data data = new Data(build);

    for (CaseResult result : testResult.getFailedTests()) {
      CaseResult previous = result.getPreviousResult();
      if (previous != null) {
        ClaimTestAction previousAction = previous.getTestAction(ClaimTestAction.class);
        if (previousAction != null && previousAction.isClaimed() && previousAction.isSticky()) {
          ClaimTestAction action = new ClaimTestAction(data, result.getId());
          previousAction.copyTo(action);
          data.addClaim(result.getId(), action);
        }
      }
    }

    return data;
  }