diff --git a/.github/workflows/build-and-test-pr.yml b/.github/workflows/build-and-test-pr.yml index 4b9e933bb45a..16574f8d8860 100644 --- a/.github/workflows/build-and-test-pr.yml +++ b/.github/workflows/build-and-test-pr.yml @@ -37,7 +37,7 @@ jobs: name: "Check if code needs formatting" runs-on: ubuntu-latest steps: - - name: "Checkout" + - name: "Checkout code" uses: actions/checkout@v4 - name: "Setup maven" uses: actions/setup-java@v4 @@ -46,10 +46,10 @@ jobs: distribution: zulu - name: "Check if code aligns with code style" id: check - run: mvn --log-file mvn.log spotless:check + run: mvn ${{ env.MAVEN_ARGS }} --log-file mvn.log spotless:check continue-on-error: true - name: "Upload checkstyle result" - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: name: checkstyle-result path: mvn.log @@ -73,18 +73,19 @@ jobs: script: | core.setFailed("Formatting issues found!") - license: + check-license: name: "Check License" needs: check-format runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: "Checkout code" + uses: actions/checkout@v4 - name: "Check License" uses: apache/skywalking-eyes@e1a02359b239bd28de3f6d35fdc870250fa513d5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: "Set up JDK 21" - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 21 @@ -107,11 +108,11 @@ jobs: version: ${{ steps.dubbo-version.outputs.version }} steps: - name: "Checkout code" - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: path: dubbo - name: "Set up JDK" - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 21 @@ -176,28 +177,30 @@ jobs: echo "dubbo version: $REVISION" unit-test-prepare: - name: "Preparation for Unit Test" + name: "Prepare for Unit Test" needs: check-format runs-on: ubuntu-latest - strategy: - fail-fast: false env: - ZOOKEEPER_VERSION: 3.6.3 + JOB_COUNT: 3 + ZOOKEEPER_VERSION: 3.6.4 steps: - - name: "Cache zookeeper binary archive" - uses: actions/cache@v3 - id: "cache-zookeeper" + - name: "Checkout code" + uses: actions/checkout@v4 + - name: "Prepare test list" + run: bash ./dubbo-test/scripts/split-modules.sh 3 '${{ github.workspace }}' + - name: "Upload test list" + uses: actions/upload-artifact@v3 + with: + name: unit-test-list + path: test/jobs + - name: "Restore local zookeeper cache" + uses: actions/cache/restore@v4 + id: cache-zookeeper with: path: ${{ github.workspace }}/.tmp/zookeeper key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} - restore-keys: | - zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} - - name: "Set up msys2 if necessary" - uses: msys2/setup-msys2@v2 - if: ${{ startsWith( matrix.os, 'windows') && steps.cache-zookeeper.outputs.cache-hit != 'true' }} - with: - release: false # support cache, see https://github.com/msys2/setup-msys2#context - name: "Download zookeeper binary archive in Linux OS" + if: steps.cache-zookeeper.outputs.cache-hit != 'true' run: | mkdir -p ${{ github.workspace }}/.tmp/zookeeper wget -c https://archive.apache.org/dist/zookeeper/zookeeper-${{ env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION }}-bin.tar.gz -O ${{ github.workspace }}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz || @@ -208,30 +211,34 @@ jobs: wget -c http://mirror.apache-kr.org/apache/zookeeper/zookeeper-${{ env.ZOOKEEPER_VERSION }}/apache-zookeeper-${{ env.ZOOKEEPER_VERSION }}-bin.tar.gz -O ${{ github.workspace }}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz echo "list the downloaded zookeeper binary archive" ls -al ${{ github.workspace }}/.tmp/zookeeper/apache-zookeeper-bin.tar.gz - - unit-test: - needs: [check-format, build-source, unit-test-prepare] - name: "Unit Test On ubuntu-latest" + - name: "Save local zookeeper cache" + uses: actions/cache/save@v4 + if: steps.cache-zookeeper.outputs.cache-hit != 'true' + with: + path: ${{ github.workspace }}/.tmp/zookeeper + key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} + unit-test-job: + name: "Unit Test on ubuntu-latest (JobId: ${{matrix.job_id}})" + needs: [ check-format, build-source, unit-test-prepare ] runs-on: ubuntu-latest + timeout-minutes: 60 + env: + ZOOKEEPER_VERSION: 3.6.4 strategy: fail-fast: false - env: - DISABLE_FILE_SYSTEM_TEST: true - CURRENT_ROLE: ${{ matrix.case-role }} - ZOOKEEPER_VERSION: 3.6.3 + matrix: + job_id: [ 1, 2, 3 ] steps: - name: "Checkout code" - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - name: "Set up JDK ${{ matrix.jdk }}" - uses: actions/setup-java@v3 + uses: actions/checkout@v4 + - name: "Set up JDK" + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 21 - name: "Set current date as env variable" run: echo "TODAY=$(date +'%Y%m%d')" >> $GITHUB_ENV - - name: "Cache local maven repository" + - name: "Restore local maven repository" uses: actions/cache/restore@v4 with: path: ~/.m2/repository @@ -239,35 +246,48 @@ jobs: restore-keys: | ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} ${{ runner.os }}-maven- + - name: "Restore Dubbo cache" + uses: actions/cache/restore@v4 + with: + path: ~/.m2/repository/org/apache/dubbo + key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} - name: "Cache zookeeper binary archive" - uses: actions/cache@v3 + uses: actions/cache@v4 id: "cache-zookeeper" with: path: ${{ github.workspace }}/.tmp/zookeeper key: zookeeper-${{ runner.os }}-${{ env.ZOOKEEPER_VERSION }} restore-keys: | zookeeper-${{ runner.os }}- + - name: "Download test list" + uses: actions/download-artifact@v3 + with: + name: unit-test-list + path: test/jobs/ - name: "Test with maven" - timeout-minutes: 90 + timeout-minutes: 60 run: | set -o pipefail - ./mvnw ${{ env.MAVEN_ARGS }} clean test verify -Pjacoco,jdk15ge-simple,'!jdk15ge','!demo',skip-spotless,jacoco089 -DtrimStackTrace=false -Dmaven.test.skip=false -Dcheckstyle.skip=false -Dcheckstyle_unix.skip=false -Drat.skip=false -DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper 2>&1 | tee >(grep -n -B 1 -A 200 "FAILURE! -- in" > test_errors.log) + modules=$(cat test/jobs/test_modules_${{ matrix.job_id }}.txt) + ./mvnw ${{ env.MAVEN_ARGS }} clean test verify -Pjacoco,jdk15ge-simple,'!jdk15ge','!demo',skip-spotless,jacoco089 -pl "$modules" -DtrimStackTrace=false -Dmaven.test.skip=false -Dcheckstyle.skip=false -Dcheckstyle_unix.skip=false -Drat.skip=false -Dflatten.skip=true -DembeddedZookeeperPath=${{ github.workspace }}/.tmp/zookeeper 2>&1 | tee >(grep -n -B 1 -A 200 "FAILURE! -- in" > test_errors.log) - name: "Print test error log" if: failure() run: cat test_errors.log - name: "Upload coverage result" uses: actions/upload-artifact@v3 with: - name: coverage-result + name: unit-jacoco-result path: "**/target/site/**/jacoco.xml" samples-test-prepare: + name: "Prepare for Sample Test" needs: check-format runs-on: ubuntu-latest env: JOB_COUNT: 3 steps: - - uses: actions/checkout@v3 + - name: "Checkout code" + uses: actions/checkout@v4 with: repository: 'apache/dubbo-samples' ref: master @@ -279,19 +299,20 @@ jobs: name: samples-test-list path: test/jobs samples-test-job: - needs: [check-format, build-source, samples-test-prepare] name: "Samples Test on ubuntu-latest (JobId: ${{matrix.job_id}})" + needs: [ check-format, build-source, samples-test-prepare ] runs-on: ubuntu-latest - timeout-minutes: 90 + timeout-minutes: 60 env: JAVA_VER: 8 TEST_CASE_FILE: jobs/testjob_${{matrix.job_id}}.txt strategy: fail-fast: false matrix: - job_id: [1, 2, 3] + job_id: [ 1, 2, 3 ] steps: - - uses: actions/checkout@v3 + - name: "Checkout code" + uses: actions/checkout@v4 with: repository: 'apache/dubbo-samples' ref: master @@ -310,16 +331,13 @@ jobs: with: path: ~/.m2/repository/org/apache/dubbo key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} - restore-keys: | - ${{ runner.os }}-dubbo-snapshot-${{ github.sha }} - ${{ runner.os }}-dubbo-snapshot- - name: "Download test list" uses: actions/download-artifact@v3 with: name: samples-test-list path: test/jobs/ - name: "Set up JDK 8" - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 8 @@ -333,26 +351,25 @@ jobs: - name: "Run tests" run: cd test && bash ./run-tests.sh - name: "merge jacoco result" - run: cd test/dubbo-test-jacoco-merger && mvn clean compile exec:java -Dexec.mainClass="org.apache.dubbo.test.JacocoMerge" -Dexec.args="${{github.workspace}}" + run: cd test/dubbo-test-jacoco-merger && mvn ${{ env.MAVEN_ARGS }} clean compile exec:java -Dexec.mainClass="org.apache.dubbo.test.JacocoMerge" -Dexec.args="${{github.workspace}}" - name: "Upload jacoco" uses: actions/upload-artifact@v3 with: name: samples-jacoco-result path: target/jacoco*.exec - name: "Upload test result" - if: always() uses: actions/upload-artifact@v3 with: name: samples-test-result path: test/jobs/*-result* samples-test-result: - needs: [check-format, samples-test-job] - if: always() + needs: [ check-format, samples-test-job ] runs-on: ubuntu-latest env: JAVA_VER: 8 steps: - - uses: actions/checkout@v3 + - name: "Checkout samples code" + uses: actions/checkout@v4 with: repository: 'apache/dubbo-samples' ref: master @@ -365,12 +382,14 @@ jobs: run: ./test/scripts/merge-test-results.sh integration-test-prepare: + name: "Prepare for Integration Test" needs: check-format runs-on: ubuntu-latest env: JOB_COUNT: 3 steps: - - uses: actions/checkout@v3 + - name: "Checkout integration code" + uses: actions/checkout@v4 with: repository: 'apache/dubbo-integration-cases' ref: main @@ -379,22 +398,23 @@ jobs: - name: "Upload test list" uses: actions/upload-artifact@v3 with: - name: test-list + name: integration-test-list path: test/jobs integration-test-job: - needs: [check-format, build-source, integration-test-prepare] name: "Integration Test on ubuntu-latest (JobId: ${{matrix.job_id}})" + needs: [ check-format, build-source, integration-test-prepare ] runs-on: ubuntu-latest - timeout-minutes: 90 + timeout-minutes: 60 env: JAVA_VER: 8 TEST_CASE_FILE: jobs/testjob_${{matrix.job_id}}.txt strategy: fail-fast: false matrix: - job_id: [1, 2, 3] + job_id: [ 1, 2, 3 ] steps: - - uses: actions/checkout@v3 + - name: "Checkout integration code" + uses: actions/checkout@v4 with: repository: 'apache/dubbo-integration-cases' ref: main @@ -413,16 +433,13 @@ jobs: with: path: ~/.m2/repository/org/apache/dubbo key: ${{ runner.os }}-dubbo-snapshot-${{ github.sha }}-${{ github.run_id }} - restore-keys: | - ${{ runner.os }}-dubbo-snapshot-${{ github.sha }} - ${{ runner.os }}-dubbo-snapshot- - name: "Download test list" uses: actions/download-artifact@v3 with: - name: test-list + name: integration-test-list path: test/jobs/ - name: "Set up JDK 8" - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 8 @@ -436,54 +453,56 @@ jobs: - name: "Run tests" run: cd test && bash ./run-tests.sh - name: "merge jacoco result" - run: cd test/dubbo-test-jacoco-merger && mvn clean compile exec:java -Dexec.mainClass="org.apache.dubbo.test.JacocoMerge" -Dexec.args="${{github.workspace}}" + run: cd test/dubbo-test-jacoco-merger && mvn ${{ env.MAVEN_ARGS }} clean compile exec:java -Dexec.mainClass="org.apache.dubbo.test.JacocoMerge" -Dexec.args="${{github.workspace}}" - name: "Upload jacoco" uses: actions/upload-artifact@v3 with: - name: jacoco-result + name: integration-jacoco-result path: target/jacoco*.exec - name: "Upload test result" - if: always() uses: actions/upload-artifact@v3 with: - name: test-result + name: integration-test-result path: test/jobs/*-result* integration-test-result: - needs: [check-format, integration-test-job] - if: always() + needs: [ check-format, integration-test-job ] runs-on: ubuntu-latest env: JAVA_VER: 8 steps: - - uses: actions/checkout@v3 + - name: "Checkout integration code" + uses: actions/checkout@v4 with: repository: 'apache/dubbo-integration-cases' ref: main - name: "Download test result" uses: actions/download-artifact@v3 with: - name: test-result + name: integration-test-result path: test/jobs/ - name: "Merge test result" run: ./test/scripts/merge-test-results.sh jacoco-result-merge: runs-on: ubuntu-latest - needs: [check-format, integration-test-result, samples-test-result, unit-test] + needs: [ check-format, unit-test-job, samples-test-result, integration-test-result ] steps: - - uses: actions/checkout@v3 + - name: "Checkout code" + uses: actions/checkout@v4 with: path: "./dubbo" - - uses: actions/checkout@v3 + - name: "Checkout code" + uses: actions/checkout@v4 with: repository: 'apache/dubbo-samples' path: "./dubbo-samples" - - uses: actions/checkout@v3 + - name: "Checkout code" + uses: actions/checkout@v4 with: repository: 'apache/dubbo-integration-cases' path: "./dubbo-integration-cases" - name: "Set up JDK 21" - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 21 @@ -496,7 +515,7 @@ jobs: run: | cd ${{ github.workspace }}/dubbo unzip -o ${{ github.workspace }}/class.zip - - name: "Restore jacoco exec" + - name: "Restore samples jacoco exec" uses: actions/download-artifact@v3 with: name: samples-jacoco-result @@ -504,23 +523,23 @@ jobs: - name: "Restore integration jacoco exec" uses: actions/download-artifact@v3 with: - name: jacoco-result + name: integration-jacoco-result path: dubbo-integration-cases/target/ - - name: "Merge jacoco result" + - name: "Merge samples jacoco result" run: | cd ${{ github.workspace }}/dubbo-samples/test/dubbo-test-jacoco-merger - mvn clean compile exec:java -Dexec.mainClass="org.apache.dubbo.test.JacocoReport" -Dexec.args="${{github.workspace}}/dubbo-samples ${{github.workspace}}/dubbo" - - name: "Merge samples jacoco result" + mvn ${{ env.MAVEN_ARGS }} clean compile exec:java -Dexec.mainClass="org.apache.dubbo.test.JacocoReport" -Dexec.args="${{github.workspace}}/dubbo-samples ${{github.workspace}}/dubbo" + - name: "Merge integration jacoco result" run: | cd ${{ github.workspace }}/dubbo-integration-cases/test/dubbo-test-jacoco-merger - mvn clean compile exec:java -Dexec.mainClass="org.apache.dubbo.test.JacocoReport" -Dexec.args="${{github.workspace}}/dubbo-integration-cases ${{github.workspace}}/dubbo" + mvn ${{ env.MAVEN_ARGS }} clean compile exec:java -Dexec.mainClass="org.apache.dubbo.test.JacocoReport" -Dexec.args="${{github.workspace}}/dubbo-integration-cases ${{github.workspace}}/dubbo" - name: "Restore coverage result" uses: actions/download-artifact@v3 with: - name: coverage-result + name: unit-jacoco-result path: dubbo/ - name: "Upload coverage to Codecov" - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v4 with: verbose: true @@ -528,16 +547,18 @@ jobs: needs: check-format runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: "Checkout code" + uses: actions/checkout@v4 with: path: "./dubbo" - - uses: actions/checkout@v3 + - name: "Checkout code" + uses: actions/checkout@v4 with: repository: 'apache/dubbo-test-tools' ref: main path: "./dubbo-test-tools" - name: "Set up JDK 21" - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 21 @@ -572,7 +593,8 @@ jobs: needs: check-format runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: "Checkout code" + uses: actions/checkout@v4 with: path: "./dubbo" - name: "Setup GraalVM environment" diff --git a/dubbo-common/src/test/resources/log4j2-test.xml b/dubbo-common/src/test/resources/log4j2-test.xml index ba99f52cc2d2..a90449b61945 100644 --- a/dubbo-common/src/test/resources/log4j2-test.xml +++ b/dubbo-common/src/test/resources/log4j2-test.xml @@ -25,5 +25,6 @@ + diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/stream/StreamUtils.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/stream/StreamUtils.java index 5f726a723a5e..060b8dbe0f8d 100644 --- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/stream/StreamUtils.java +++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/stream/StreamUtils.java @@ -140,7 +140,7 @@ private static void putHeader(BiConsumer consumer, String String str = encodeBase64ASCII((byte[]) value); consumer.accept(key + TripleConstants.HEADER_BIN_SUFFIX, str); } else { - LOGGER.warn( + LOGGER.info( PROTOCOL_UNSUPPORTED, "", "", diff --git a/dubbo-test/scripts/split-modules.sh b/dubbo-test/scripts/split-modules.sh new file mode 100644 index 000000000000..1bc1fe47de05 --- /dev/null +++ b/dubbo-test/scripts/split-modules.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# +# 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. +# + +readarray -t modules < <(find . -name "pom.xml" | while read -r pom; do + module_dir=$(dirname "$pom") + if [ -d "$module_dir/src/test" ]; then + echo "${module_dir#./}" + fi +done) + +readarray -t modules < <(printf '%s\n' "${modules[@]}" | shuf --random-source=/dev/zero) + +jobs=$1 +jobs_dir=$2/test/jobs + +total=${#modules[@]} +size=$((total / jobs)) +remainder=$((total % jobs)) + +mkdir -p "$jobs_dir" + +IFS=',' +for ((i=0; i "$jobs_dir/test_modules_$((i+1)).txt" +done