You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ratis.apache.org by ad...@apache.org on 2022/10/10 18:16:21 UTC

[ratis] branch master updated: RATIS-1658. Prepare unit check for running some tests repeatedly (#704)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 84a2997df RATIS-1658. Prepare unit check for running some tests repeatedly (#704)
84a2997df is described below

commit 84a2997df4917f127217387fbb81dfa63db1c035
Author: Doroszlai, Attila <64...@users.noreply.github.com>
AuthorDate: Mon Oct 10 20:16:15 2022 +0200

    RATIS-1658. Prepare unit check for running some tests repeatedly (#704)
---
 dev-support/checks/_mvn_unit_report.sh | 38 ++++++++++++++++++-------------
 dev-support/checks/unit.sh             | 41 ++++++++++++++++++++++++++++------
 2 files changed, 57 insertions(+), 22 deletions(-)

diff --git a/dev-support/checks/_mvn_unit_report.sh b/dev-support/checks/_mvn_unit_report.sh
index 682de9e9f..f7123775f 100755
--- a/dev-support/checks/_mvn_unit_report.sh
+++ b/dev-support/checks/_mvn_unit_report.sh
@@ -27,17 +27,18 @@ _realpath() {
 }
 
 ## generate summary txt file
-find "." -name 'TEST*.xml' -print0 \
+find "." -not -path '*/iteration*' -name 'TEST*.xml' -print0 \
     | xargs -n1 -0 "grep" -l -E "<failure|<error" \
     | awk -F/ '{sub("'"TEST-"'",""); sub(".xml",""); print $NF}' \
     | tee "$REPORT_DIR/summary.txt"
 
 #Copy heap dump and dump leftovers
-find "." -name "*.hprof" \
+find "." -not -path '*/iteration*' \
+    \( -name "*.hprof" \
     -or -name "*.dump" \
     -or -name "*.dumpstream" \
-    -or -name "hs_err_*.log" \
-  -exec cp {} "$REPORT_DIR/" \;
+    -or -name "hs_err_*.log" \) \
+  -exec mv {} "$REPORT_DIR/" \;
 
 ## Add the tests where the JVM is crashed
 grep -A1 'Crashed tests' "${REPORT_DIR}/output.log" \
@@ -46,23 +47,30 @@ grep -A1 'Crashed tests' "${REPORT_DIR}/output.log" \
   | sort -u \
   | tee -a "${REPORT_DIR}/summary.txt"
 
-# Add tests where "There was a timeout or other error in the fork"
-grep -e 'Running org' -e 'Tests run: .* in org' "${REPORT_DIR}/output.log" \
-  | sed -e 's/.* \(org[^ ]*\)/\1/' \
-  | uniq -c \
-  | grep -v ' 2 ' \
-  | awk '{ print $2 }' \
-  | sort -u \
-  | tee -a "${REPORT_DIR}/summary.txt"
-
+# Check for tests that started but were not finished
+if grep -q 'There was a timeout or other error in the fork' "${REPORT_DIR}/output.log"; then
+  diff -uw \
+    <(grep -e 'Running org' "${REPORT_DIR}/output.log" \
+      | sed -e 's/.* \(org[^ ]*\)/\1/' \
+      | uniq -c \
+      | sort -u -k2) \
+    <(grep -e 'Tests run: .* in org' "${REPORT_DIR}/output.log" \
+      | sed -e 's/.* \(org[^ ]*\)/\1/' \
+      | uniq -c \
+      | sort -u -k2) \
+    | grep '^- ' \
+    | awk '{ print $3 }' \
+    | tee -a "${REPORT_DIR}/summary.txt"
+fi
 
 #Collect of all of the report files of FAILED tests
 for failed_test in $(< ${REPORT_DIR}/summary.txt); do
-  for file in $(find "." -name "${failed_test}.txt" -or -name "${failed_test}-output.txt" -or -name "TEST-${failed_test}.xml"); do
+  for file in $(find "." -not -path '*/iteration*' \
+      \( -name "${failed_test}.txt" -or -name "${failed_test}-output.txt" -or -name "TEST-${failed_test}.xml" \)); do
     dir=$(dirname "${file}")
     dest_dir=$(_realpath --relative-to="${PWD}" "${dir}/../..") || continue
     mkdir -p "${REPORT_DIR}/${dest_dir}"
-    cp "${file}" "${REPORT_DIR}/${dest_dir}"/
+    mv "${file}" "${REPORT_DIR}/${dest_dir}"/
   done
 done
 
diff --git a/dev-support/checks/unit.sh b/dev-support/checks/unit.sh
index 4a57d8205..50a1c712f 100755
--- a/dev-support/checks/unit.sh
+++ b/dev-support/checks/unit.sh
@@ -19,17 +19,44 @@ set -o pipefail
 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
 cd "$DIR/../.." || exit 1
 
+: ${ITERATIONS:="1"}
+
+declare -i ITERATIONS
+if [[ ${ITERATIONS} -le 0 ]]; then
+  ITERATIONS=1
+fi
+
 REPORT_DIR=${OUTPUT_DIR:-"$DIR/../../target/unit"}
 mkdir -p "$REPORT_DIR"
 
 export MAVEN_OPTS="-Xmx4096m"
-mvn -B -fae test "$@" | tee "${REPORT_DIR}/output.log"
-rc=$?
 
-# shellcheck source=dev-support/checks/_mvn_unit_report.sh
-source "$DIR/_mvn_unit_report.sh"
+rc=0
+for i in $(seq 1 ${ITERATIONS}); do
+  if [[ ${ITERATIONS} -gt 1 ]]; then
+    original_report_dir="${REPORT_DIR}"
+    REPORT_DIR="${original_report_dir}/iteration${i}"
+    mkdir -p "${REPORT_DIR}"
+  fi
+
+  mvn -B -fae test "$@" \
+    | tee "${REPORT_DIR}/output.log"
+  irc=$?
+
+  # shellcheck source=dev-support/checks/_mvn_unit_report.sh
+  source "${DIR}/_mvn_unit_report.sh"
+  if [[ ${irc} == 0 ]] && [[ -s "${REPORT_DIR}/summary.txt" ]]; then
+    irc=1
+  fi
+
+  if [[ ${ITERATIONS} -gt 1 ]]; then
+    REPORT_DIR="${original_report_dir}"
+    echo "Iteration ${i} exit code: ${irc}" | tee -a "${REPORT_DIR}/summary.txt"
+  fi
+
+  if [[ ${rc} == 0 ]]; then
+    rc=${irc}
+  fi
+done
 
-if [[ -s "$REPORT_DIR/summary.txt" ]] ; then
-    exit 1
-fi
 exit ${rc}