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/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 201a1bb3c9 HDDS-9357. Add workflow for running intermittently failing 
tests repeatedly. (#5368)
201a1bb3c9 is described below

commit 201a1bb3c97ea7b79b98d60d828c63d8cd5e55f4
Author: Sadanand Shenoy <[email protected]>
AuthorDate: Thu Sep 28 13:54:05 2023 +0530

    HDDS-9357. Add workflow for running intermittently failing tests 
repeatedly. (#5368)
---
 .github/workflows/intermittent-test-check.yml | 145 ++++++++++++++++++++++++++
 hadoop-ozone/dev-support/checks/junit.sh      |   0
 2 files changed, 145 insertions(+)

diff --git a/.github/workflows/intermittent-test-check.yml 
b/.github/workflows/intermittent-test-check.yml
new file mode 100644
index 0000000000..8b66ee405e
--- /dev/null
+++ b/.github/workflows/intermittent-test-check.yml
@@ -0,0 +1,145 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+name: flaky-test-check
+on:
+  workflow_dispatch:
+    inputs:
+      ref:
+        description: Git Ref (Branch/Commit_ID/Tag)
+        default: master
+        required: true
+      test-class:
+        description: Test Class
+        default: NA
+        required: true
+      test-name:
+        description: Test Name
+        default:  ALL
+        required: false
+      iterations:
+        description: Number of Iterations per split
+        default: 10
+        required: true
+      splits:
+        description: Number of splits
+        default: 2
+        required: true
+env:
+  MAVEN_OPTS: -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false 
-Dmaven.wagon.http.retryHandler.class=standard 
-Dmaven.wagon.http.retryHandler.count=3
+  TEST_CLASS: ${{ github.event.inputs.test-class}}
+  TEST_METHOD: ${{ github.event.inputs.test-name }}
+  ITERATIONS: ${{ github.event.inputs.iterations }}
+jobs:
+  prepare-job:
+    runs-on: ubuntu-20.04
+    outputs:
+      matrix: ${{steps.generate.outputs.matrix}}
+      test_type: ${{steps.check-test-existence.outputs.test_type}}
+    steps:
+      - uses: actions/checkout@v3
+        with:
+          ref: ${{ github.event.inputs.ref }}
+      - name: Check for Test File
+        id: check-test-existence
+        run: |
+          filename="$TEST_CLASS.java"
+          found_file=$(find . -name "$filename" -type f -print -quit)
+          test_type=unit
+          if [ -n "$found_file" ]; then
+              echo "File path : $found_file"
+              if [[ "$found_file" == *"integration-test"* ]]; then
+                  test_type=integration
+              fi 
+              if [ "$TEST_METHOD" != "ALL" ]; then
+                  if grep -q "public void $TEST_METHOD(" "$found_file"; then
+                      echo "Test method $TEST_METHOD exists in $filename"
+                  else
+                      echo "Test method $TEST_METHOD does not exist in 
$filename.Stopping!"
+                      exit 1
+                  fi
+              fi
+              echo "Test file $filename found. Continuing.."
+          else
+              echo "Test file $filename not found.Stopping!"
+              exit 1
+          fi
+          echo "test_type=$test_type" >> $GITHUB_OUTPUT
+      - id: generate
+        name: Generate test matrix
+        run: |
+          splits=()
+          for ((i = 1; i <= ${{ github.event.inputs.splits }}; i++)); do
+              splits+=("$i")
+          done
+          printf -v x "%s," "${splits[@]}"
+          split_matrix="[${x%,}]"
+          echo "matrix=$split_matrix" >> $GITHUB_OUTPUT
+  run-test:
+    needs: prepare-job
+    name: Run-Split
+    runs-on: ubuntu-20.04
+    strategy:
+      matrix:
+        split: ${{fromJson(needs.prepare-job.outputs.matrix)}}  # Define  
splits
+    steps:
+      - uses: actions/checkout@v3
+        with:
+          ref: ${{ github.event.inputs.ref }}
+      - name: Cache for maven dependencies
+        uses: actions/cache@v3
+        with:
+          path: ~/.m2/repository
+          key: maven-repo-${{ hashFiles('**/pom.xml') }}-8-single
+          restore-keys: |
+            maven-repo-${{ hashFiles('**/pom.xml') }}-8
+            maven-repo-${{ hashFiles('**/pom.xml') }}
+            maven-repo-
+      - name: Setup java
+        uses: actions/setup-java@v3
+        with:
+          distribution: 'temurin'
+          java-version: 8
+      - name: Execute tests
+        run: |
+          test_type=${{ needs.prepare-job.outputs.test_type }}
+          args=""
+          if [ "$test_type" = "integration" ]; then
+              args="-pl :ozone-integration-test,:mini-chaos-tests"
+          fi
+          if [ "$TEST_METHOD" = "ALL" ]; then
+              echo "Running all tests from $TEST_CLASS"
+              hadoop-ozone/dev-support/checks/junit.sh $args -Dtest=$TEST_CLASS
+          else
+              echo "Running test: $TEST_METHOD from $TEST_CLASS"
+              hadoop-ozone/dev-support/checks/junit.sh $args 
-Dtest=$TEST_CLASS#$TEST_METHOD
+          fi
+        continue-on-error: true
+        env:
+          CHECK: ${{ needs.prepare-job.outputs.test_type }}
+      - name: Summary of failures
+        run: hadoop-ozone/dev-support/checks/_summary.sh target/${{ 
needs.prepare-job.outputs.test_type }}/summary.txt
+        if: always()
+      - name: Archive build results
+        uses: actions/upload-artifact@v3
+        if: always()
+        with:
+          name: result-${{ env.TEST_CLASS }}-split-${{ matrix.split }}
+          path: target/${{ needs.prepare-job.outputs.test_type }}
+      - name: Delete temporary build artifacts before caching
+        run: |
+          #Never cache local artifacts
+          rm -rf ~/.m2/repository/org/apache/ozone/hdds*
+          rm -rf ~/.m2/repository/org/apache/ozone/ozone*
+        if: always()
\ No newline at end of file
diff --git a/hadoop-ozone/dev-support/checks/junit.sh 
b/hadoop-ozone/dev-support/checks/junit.sh
old mode 100644
new mode 100755


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to