This is an automated email from the ASF dual-hosted git repository.

aw pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/yetus.git


The following commit(s) were added to refs/heads/master by this push:
     new 1a55acd  YETUS-685. add junit xml as a reporting format (#48)
1a55acd is described below

commit 1a55acdcfc7de2853ee5aea4ef68b4180ff61417
Author: Allen Wittenauer <a...@effectivemachines.com>
AuthorDate: Thu May 2 09:03:19 2019 -0700

    YETUS-685. add junit xml as a reporting format (#48)
---
 .circleci/config.yml                           |  12 ++-
 .gitlab-ci.yml                                 |   5 +-
 Jenkinsfile                                    |   9 +-
 precommit/src/main/shell/test-patch.d/junit.sh | 116 +++++++++++++++++++++++++
 4 files changed, 139 insertions(+), 3 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index dfdff7c..76ffc36 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -42,8 +42,18 @@ jobs:
              --html-report-file=/tmp/yetus-out/report.html
              --console-report-file=/tmp/yetus-out/console.txt
              --brief-report-file=/tmp/yetus-out/brief.txt
-             --bugcomments=briefreport,htmlout
+             --bugcomments=briefreport,htmlout,junit
              --tests-filter=checkstyle,javadoc,rubocop,test4tests
+             --junit-results-xml=/tmp/yetus-out/results.xml
+
+      - store_test_results:
+          path: /tmp/yetus-out
 
       - store_artifacts:
           path: /tmp/yetus-out
+
+workflows:
+  version: 2
+  build:
+    jobs:
+      - build
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1c8ee4c..c2b65b8 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -27,11 +27,14 @@ buretoolbox-job:
       --html-report-file=/tmp/yetus-out/report.html
       --console-report-file=/tmp/yetus-out/console.txt
       --brief-report-file=/tmp/yetus-out/brief.txt
-      --bugcomments=briefreport,htmlout,gitlab
+      --bugcomments=briefreport,htmlout,gitlab,junit
       --tests-filter=checkstyle,javadoc,rubocop,test4tests
+      --junit-results-xml=/tmp/yetus-out/results.xml
 
   artifacts:
     expire_in: 1 week
     when: always
     paths:
       - yetus-out/
+    reports:
+      junit: yetus-out/results.xml
diff --git a/Jenkinsfile b/Jenkinsfile
index 2392586..4addf22 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -128,6 +128,7 @@ pipeline {
                 
YETUS_ARGS+=("--brief-report-file=${WORKSPACE}/${YETUS_RELATIVE_PATCHDIR}/brief.txt")
                 
YETUS_ARGS+=("--console-report-file=${WORKSPACE}/${YETUS_RELATIVE_PATCHDIR}/console.txt")
                 
YETUS_ARGS+=("--html-report-file=${WORKSPACE}/${YETUS_RELATIVE_PATCHDIR}/report.html")
+                
YETUS_ARGS+=("--junit-results-xml=${WORKSPACE}/${YETUS_RELATIVE_PATCHDIR}/results.xml")
 
                 # enable writing back to Github
                 YETUS_ARGS+=(--github-password="${GITHUB_PASSWORD}")
@@ -198,9 +199,15 @@ pipeline {
   post {
     always {
       script {
+        // Publish JUnit results
+        try {
+            junit "${env.YETUS_RELATIVE_PATCHDIR}/results.xml"
+        } catch(e) {
+            echo 'junit processing: ' + e.toString()
+        }
+        archiveArtifacts "${env.YETUS_RELATIVE_PATCHDIR}/**"
         // Publish the HTML report so that it can be looked at
         // Has to be relative to WORKSPACE.
-        archiveArtifacts "${env.YETUS_RELATIVE_PATCHDIR}/**"
         publishHTML (target: [
                       allowMissing: true,
                       keepAll: true,
diff --git a/precommit/src/main/shell/test-patch.d/junit.sh 
b/precommit/src/main/shell/test-patch.d/junit.sh
index fe9c2a3..c1a0c55 100755
--- a/precommit/src/main/shell/test-patch.d/junit.sh
+++ b/precommit/src/main/shell/test-patch.d/junit.sh
@@ -16,6 +16,7 @@
 
 # SHELLDOC-IGNORE
 
+add_bugsystem junit
 add_test_format junit
 
 JUNIT_TEST_TIMEOUTS=""
@@ -28,6 +29,7 @@ function junit_usage
 {
   yetus_add_option "--junit-test-output=<path>" "Directory to search for the 
test output TEST-*.xml files, relative to the module directory 
(default:'${JUNIT_TEST_OUTPUT_DIR}')"
   yetus_add_option "--junit-test-prefix=<prefix to trim>" "Prefix of test 
names to be be removed. Used to shorten test names by removing common package 
name. (default:'${JUNIT_TEST_PREFIX}')"
+  yetus_add_option "--junit-results-xml=<path>" "Filename to generate a Junit 
report"
 }
 
 function junit_parse_args
@@ -42,6 +44,9 @@ function junit_parse_args
       --junit-test-prefix=*)
         JUNIT_TEST_PREFIX=${i#*=}
       ;;
+      --junit-results-xml=*)
+        JUNIT_RESULTS_XML=${i#*=}
+      ;;
     esac
   done
 }
@@ -92,3 +97,114 @@ function junit_finalize_results
     JUNIT_TEST_TIMEOUTS=""
   fi
 }
+
+## @description  Only print selected information to a report file
+## @audience     private
+## @stability    evolving
+## @replaceable  no
+## @param        runresult
+## @return       0 on success
+## @return       1 on failure
+function junit_finalreport
+{
+  declare result=$1
+  shift
+  declare i=0
+  declare failures
+  declare ourstring
+  declare vote
+  declare subs
+  declare ela
+  declare footsub
+  declare footcomment
+
+  if [[ -z "${JUNIT_RESULTS_XML}" ]]; then
+    return
+  fi
+
+  big_console_header "Writing JUnit results to ${JUNIT_RESULTS_XML}"
+
+  url=$(get_artifact_url)
+
+cat << EOF > "${JUNIT_RESULTS_XML}"
+<testsuites>
+    <testsuite tests="1" failures="'${result}'" time="1" name="Apache Yetus">
+EOF
+
+  i=0
+  until [[ $i -eq ${#TP_VOTE_TABLE[@]} ]]; do
+    ourstring=$(echo "${TP_VOTE_TABLE[${i}]}" | tr -s ' ')
+    vote=$(echo "${ourstring}" | cut -f2 -d\|)
+    subs=$(echo "${ourstring}"  | cut -f3 -d\|)
+    ela=$(echo "${ourstring}" | cut -f4 -d\|)
+    msg=$(echo "${ourstring}" | cut -f5 -d\|)
+
+    subs=${subs// }
+
+    if [[ "${subs}"  == "${oldsubs}" ]]; then
+      ((counter=counter+1))
+    else
+      oldsubs=${subs}
+      ((counter=0))
+    fi
+
+    if [[ "${vote}" = "H" ]]; then
+       ((i=i+1))
+       continue
+     fi
+
+    if [[ ${vote// } = -1 ]]; then
+      failures=1
+    else
+      failures=0
+    fi
+
+    {
+      printf "<testcase id=\"%s\" classname=\"%s\" name=\"%s\" failures=\"%s\" 
tests=\"1\" time=\"%s\">" \
+        "${subs}.${counter}" \
+        "${subs}" \
+        "${subs}" \
+        "${failures}" \
+        "${ela}"
+      if [[ "${failures}" == 1 ]]; then
+        msg="${msg//&/&amp;}"
+        msg="${msg//</&lt;}"
+        msg="${msg//>/&gt;}"
+        msg="${msg//\"/&quot;}"
+        msg="${msg//\'/&apos;}"
+        printf "<failure message=\"%s\">" "${msg}"
+        j=0
+        until [[ $j -eq ${#TP_FOOTER_TABLE[@]} ]]; do
+          if [[ "${TP_FOOTER_TABLE[${j}]}" =~ \@\@BASE\@\@ ]]; then
+            footsub=$(echo "${TP_FOOTER_TABLE[${j}]}" | cut -f2 -d\|)
+            footcomment=$(echo "${TP_FOOTER_TABLE[${j}]}" |
+                        cut -f3 -d\| |
+                        "${SED}" -e "s,@@BASE@@,${PATCH_DIR},g")
+            if [[ -n "${url}" ]]; then
+              footcomment=$(echo "${TP_FOOTER_TABLE[${j}]}" |
+                        cut -f3 -d\| |
+                        "${SED}" -e "s,@@BASE@@,${url},g")
+            fi
+            if [[ "${footsub// }" == "${subs}" ]]; then
+              footcomment="${footcomment//&/&amp;}"
+              footcomment="${footcomment//</&lt;}"
+              footcomment="${footcomment//>/&gt;}"
+              footcomment="${footcomment//\"/&quot;}"
+              footcomment="${footcomment//\'/&apos;}"
+              echo "${footcomment}"
+            fi
+          fi
+          ((j=j+1))
+        done
+        echo "</failure>"
+      fi
+      echo "</testcase>"
+    } >> "${JUNIT_RESULTS_XML}"
+
+    ((i=i+1))
+  done
+
+  echo "</testsuite>" >> "${JUNIT_RESULTS_XML}"
+  echo "</testsuites>" >> "${JUNIT_RESULTS_XML}"
+}
+

Reply via email to