From e960b4c7e5c6bfa44495b45b30217bb732bb33aa Mon Sep 17 00:00:00 2001 From: Matous Jobanek Date: Tue, 3 Oct 2017 12:03:41 +0200 Subject: [PATCH 1/3] feat: Introduced additonal parallelism to the test suite execution * the test-bed build uses Maven parallelism with 50 threads per cpu core * the same is used for build invocation on Travis (could be used locally) * the Travis is building in three virtual machines at once: * one for unit tests * one for functional tests - to separate unit tests and functional tests I had to introduce two profiles inside of the pom files * one for generating documentation - no to do it in the previous builds/vm twice * speeding up Java startup using properties: -XX:+TieredCompilation -XX:TieredStopAtLevel=1 --- .travis.yml | 30 ++++++++---- core/pom.xml | 1 - functional-tests/git-rules/pom.xml | 1 - functional-tests/test-bed/pom.xml | 47 ++++++++++++++++++- .../testbed/project/BuildConfigurator.java | 14 +++++- .../ftest/testbed/project/ProjectBuilder.java | 1 + .../SurefireForksConfigurationTest.java | 11 +++-- junit-test-result-parser/pom.xml | 1 - mvn-extension/pom.xml | 1 - strategies/affected/pom.xml | 1 - strategies/changed/pom.xml | 1 - strategies/failed/pom.xml | 1 - surefire-provider/pom.xml | 1 - 13 files changed, 88 insertions(+), 23 deletions(-) diff --git a/.travis.yml b/.travis.yml index a538f1c7e..97124a93b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,13 +17,18 @@ cache: directories: - $HOME/.m2 +env: + - TEST_SUITE=units GENERATE_DOC=1 + - TEST_SUITE=functional TEST_BED_M2_HOME=/home/travis/.arquillian/mvn/apache-maven-3.3.9 GENERATE_DOC=1 + - GENERATE_DOC=0 + before_install: - BRANCH=${TRAVIS_PULL_REQUEST_BRANCH:-$TRAVIS_BRANCH} - MODIFIED_DOCS=$(git diff --name-only $TRAVIS_COMMIT_RANGE | grep -E 'README.adoc|^docs/.*.adoc$' | wc -l) - COMMITS_WITH_FORCED_GEN=$(git log --format=%B $TRAVIS_COMMIT_RANGE | grep -i "\[gen docs\]" | wc -l) - git describe --tags --exact-match HEAD >/dev/null 2>&1 && TAGGED=0 || TAGGED=1 - - '[ $TAGGED -eq 0 ] || [ $COMMITS_WITH_FORCED_GEN -gt 0 ] || [ $MODIFIED_DOCS -ge 1 ] && GENERATE_DOC=0 || GENERATE_DOC=1' - - '[ "${BRANCH}" == "master" ] && [ "${TRAVIS_REPO_SLUG}" == "arquillian/smart-testing" ] || [ ! -z "${TRAVIS_PULL_REQUEST// }" -a "${TRAVIS_PULL_REQUEST}" != "false" ] && GENERATE_DOC=0 || GENERATE_DOC=1' + - '[ $TAGGED -eq 0 ] || [ $COMMITS_WITH_FORCED_GEN -gt 0 ] || [ $MODIFIED_DOCS -ge 1 ] && [ $GENERATE_DOC -eq 0 ] && GENERATE_DOC=0 || GENERATE_DOC=1' + - '[ "${BRANCH}" == "master" ] && [ "${TRAVIS_REPO_SLUG}" == "arquillian/smart-testing" ] || [ ! -z "${TRAVIS_PULL_REQUEST// }" -a "${TRAVIS_PULL_REQUEST}" != "false" ] && [ $GENERATE_DOC -eq 0 ] && GENERATE_DOC=0 || GENERATE_DOC=1' - 'if [ $GENERATE_DOC -eq 0 ]; then git config user.name "${GH_USER}"; git config user.email "${GH_EMAIL}"; @@ -34,6 +39,11 @@ before_install: docker pull rochdev/alpine-asciidoctor:mini; fi' +install: + - 'if [[ -n $TEST_SUITE ]]; then + ./mvnw clean install -DskipTests; + fi' + before_script: - mkdir -p /home/travis/.arquillian/mvn - wget https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz -P /home/travis/.arquillian/resolver/maven/download @@ -61,14 +71,16 @@ before_script: fi ' -env: - - TEST_BED_M2_HOME=/home/travis/.arquillian/mvn/apache-maven-3.3.9 - script: - - ./mvnw clean verify -P travis -DJAVA_OPTS="-XX:-UseLoopPredicate" - - 'if [ $GENERATE_DOC -eq 0 ]; then - ./.asciidoctor/generate.sh --keep; - fi' + - 'if [[ -n $TEST_SUITE ]]; then + if [[ "$TEST_SUITE" == "units" ]]; then + ./mvnw clean package -P travis -DJAVA_OPTS="-XX:-UseLoopPredicate" -T 100; + else + ./mvnw clean verify -pl functional-tests/test-bed -P travis -DJAVA_OPTS="-XX:-UseLoopPredicate" -T 100; + fi + elif [ $GENERATE_DOC -eq 0 ]; then + ./.asciidoctor/generate.sh --keep; + fi' after_success: - 'if [ $GENERATE_DOC -eq 0 ]; then diff --git a/core/pom.xml b/core/pom.xml index 80b600ee0..a625c1fdd 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -45,5 +45,4 @@ ${version.snakeyaml} - diff --git a/functional-tests/git-rules/pom.xml b/functional-tests/git-rules/pom.xml index be688ee74..8df481afe 100644 --- a/functional-tests/git-rules/pom.xml +++ b/functional-tests/git-rules/pom.xml @@ -43,5 +43,4 @@ test - diff --git a/functional-tests/test-bed/pom.xml b/functional-tests/test-bed/pom.xml index ab252bb05..c22b89d4d 100644 --- a/functional-tests/test-bed/pom.xml +++ b/functional-tests/test-bed/pom.xml @@ -91,7 +91,52 @@ true + + maven-surefire-plugin + + true + + + + org.apache.maven.plugins + maven-failsafe-plugin + ${version.surefire} + + + default-test + + integration-test + verify + + + ${surefire.fork.count} + ${surefire.thread.count} + ${surefire.reuse.forks} + -Xmx1024m + classesAndMethods + net.jcip.annotations.NotThreadSafe + + + + not-thread-safe + + integration-test + verify + + + false + net.jcip.annotations.NotThreadSafe + + + + + + **/*Test.java + **/Test*.java + **/*TestCase.java + + + - diff --git a/functional-tests/test-bed/src/main/java/org/arquillian/smart/testing/ftest/testbed/project/BuildConfigurator.java b/functional-tests/test-bed/src/main/java/org/arquillian/smart/testing/ftest/testbed/project/BuildConfigurator.java index a84b8d02b..ef5fc7dde 100644 --- a/functional-tests/test-bed/src/main/java/org/arquillian/smart/testing/ftest/testbed/project/BuildConfigurator.java +++ b/functional-tests/test-bed/src/main/java/org/arquillian/smart/testing/ftest/testbed/project/BuildConfigurator.java @@ -37,9 +37,10 @@ public class BuildConfigurator { private boolean ignoreBuildFailure = false; private boolean skipTests = false; private File workingDirectory; - private String mavenOpts = "-Xms512m -Xmx1024m"; + private String mavenOpts = "-Xms512m -Xmx1024m -XX:+TieredCompilation -XX:TieredStopAtLevel=1"; private String mavenVersion; private Using usingInstallation; + private boolean useThreads = true; BuildConfigurator(ProjectBuilder projectBuilder) { systemProperties.put("surefire.exitTimeout", "-1"); // see http://bit.ly/2vARQ5p @@ -183,11 +184,16 @@ public BuildConfigurator excludeProjects(String... projects) { return this; } - public BuildConfigurator useMavenVersion(String mavenVersion){ + public BuildConfigurator useMavenVersion(String mavenVersion) { this.mavenVersion = mavenVersion; return this; } + public BuildConfigurator useThreads(boolean useThreads){ + this.useThreads = useThreads; + return this; + } + void enableDebugOptions() { if (isRemoteDebugEnabled()) { final String debugOptions = String.format(MVN_DEBUG_AGENT, shouldSuspend(), getRemotePort()); @@ -268,6 +274,10 @@ String getMavenVersion() { return mavenVersion; } + boolean useThreads(){ + return useThreads; + } + private int getAvailableLocalPort() { ServerSocket socket = null; try { diff --git a/functional-tests/test-bed/src/main/java/org/arquillian/smart/testing/ftest/testbed/project/ProjectBuilder.java b/functional-tests/test-bed/src/main/java/org/arquillian/smart/testing/ftest/testbed/project/ProjectBuilder.java index 463815f99..f3d0a4880 100644 --- a/functional-tests/test-bed/src/main/java/org/arquillian/smart/testing/ftest/testbed/project/ProjectBuilder.java +++ b/functional-tests/test-bed/src/main/java/org/arquillian/smart/testing/ftest/testbed/project/ProjectBuilder.java @@ -66,6 +66,7 @@ private BuiltProject executeGoals(String... goals) { final BuiltProject build = embeddedMaven .setShowVersion(true) .setGoals(goals) + .setThreads(buildConfigurator.useThreads() ? "50C" : null) .setProjects(buildConfigurator.getModulesToBeBuilt()) .setDebug(buildConfigurator.isMavenDebugOutputEnabled()) .setQuiet(buildConfigurator.disableQuietWhenAnyDebugModeEnabled() && buildConfigurator.isQuietMode()) diff --git a/functional-tests/test-bed/src/test/java/org/arquillian/smart/testing/ftest/configuration/SurefireForksConfigurationTest.java b/functional-tests/test-bed/src/test/java/org/arquillian/smart/testing/ftest/configuration/SurefireForksConfigurationTest.java index e3026678e..71d46ab8e 100644 --- a/functional-tests/test-bed/src/test/java/org/arquillian/smart/testing/ftest/configuration/SurefireForksConfigurationTest.java +++ b/functional-tests/test-bed/src/test/java/org/arquillian/smart/testing/ftest/configuration/SurefireForksConfigurationTest.java @@ -37,7 +37,7 @@ public void test_with_reuse_forks_false() { @Test public void test_with_fork_count_zero() { - verifyTestSuiteExecution("forkCount", "0"); + verifyTestSuiteExecution(false, "forkCount", "0"); } @Test @@ -57,10 +57,14 @@ public void test_with_multiple_forks_not_reusing_forks() { @Test public void test_with_fork_count_zero_not_reusing_forks() { - verifyTestSuiteExecution("forkCount", "0", "reuseForks", "false"); + verifyTestSuiteExecution(false, "forkCount", "0", "reuseForks", "false"); } - private void verifyTestSuiteExecution(String... systemPropertiesPairs) { + private void verifyTestSuiteExecution(String... systemPropertiesPairs){ + verifyTestSuiteExecution(true, systemPropertiesPairs); + } + + private void verifyTestSuiteExecution(boolean useThreads, String... systemPropertiesPairs) { // given final Project project = testBed.getProject(); @@ -80,6 +84,7 @@ private void verifyTestSuiteExecution(String... systemPropertiesPairs) { .logBuildOutput(false) .withSystemProperties(systemPropertiesPairs) .withSystemProperties(SMART_TESTING_REPORT_ENABLE, "true") + .useThreads(useThreads) .configure() .run(); diff --git a/junit-test-result-parser/pom.xml b/junit-test-result-parser/pom.xml index 07d23bf69..568accdb1 100644 --- a/junit-test-result-parser/pom.xml +++ b/junit-test-result-parser/pom.xml @@ -24,5 +24,4 @@ assertj-core - diff --git a/mvn-extension/pom.xml b/mvn-extension/pom.xml index cce210b43..15b8f7e88 100644 --- a/mvn-extension/pom.xml +++ b/mvn-extension/pom.xml @@ -128,5 +128,4 @@ - diff --git a/strategies/affected/pom.xml b/strategies/affected/pom.xml index 39bda91e0..6b32d0b53 100644 --- a/strategies/affected/pom.xml +++ b/strategies/affected/pom.xml @@ -50,5 +50,4 @@ test - diff --git a/strategies/changed/pom.xml b/strategies/changed/pom.xml index 88883055d..dad71468b 100644 --- a/strategies/changed/pom.xml +++ b/strategies/changed/pom.xml @@ -40,5 +40,4 @@ test - diff --git a/strategies/failed/pom.xml b/strategies/failed/pom.xml index bca5f6ba7..9ee884a46 100644 --- a/strategies/failed/pom.xml +++ b/strategies/failed/pom.xml @@ -38,5 +38,4 @@ test - diff --git a/surefire-provider/pom.xml b/surefire-provider/pom.xml index e30d80b17..ebc0fcb71 100644 --- a/surefire-provider/pom.xml +++ b/surefire-provider/pom.xml @@ -87,5 +87,4 @@ - From cca1c288f447169a4b0669c0776553881d064b44 Mon Sep 17 00:00:00 2001 From: Matous Jobanek Date: Thu, 12 Oct 2017 08:29:16 +0200 Subject: [PATCH 2/3] changed order of the suite execution --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 97124a93b..68f4944b8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,8 +18,8 @@ cache: - $HOME/.m2 env: - - TEST_SUITE=units GENERATE_DOC=1 - TEST_SUITE=functional TEST_BED_M2_HOME=/home/travis/.arquillian/mvn/apache-maven-3.3.9 GENERATE_DOC=1 + - TEST_SUITE=units GENERATE_DOC=1 - GENERATE_DOC=0 before_install: From 206e71dcb248c300aae347620a199902ef458e69 Mon Sep 17 00:00:00 2001 From: Matous Jobanek Date: Fri, 13 Oct 2017 11:05:48 +0200 Subject: [PATCH 3/3] cleanup --- .travis.yml | 30 ++++++------------- core/pom.xml | 1 + functional-tests/git-rules/pom.xml | 1 + functional-tests/test-bed/pom.xml | 47 +----------------------------- junit-test-result-parser/pom.xml | 1 + mvn-extension/pom.xml | 1 + strategies/affected/pom.xml | 1 + strategies/changed/pom.xml | 1 + strategies/failed/pom.xml | 1 + surefire-provider/pom.xml | 1 + 10 files changed, 18 insertions(+), 67 deletions(-) diff --git a/.travis.yml b/.travis.yml index 68f4944b8..176ade78c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,18 +17,13 @@ cache: directories: - $HOME/.m2 -env: - - TEST_SUITE=functional TEST_BED_M2_HOME=/home/travis/.arquillian/mvn/apache-maven-3.3.9 GENERATE_DOC=1 - - TEST_SUITE=units GENERATE_DOC=1 - - GENERATE_DOC=0 - before_install: - BRANCH=${TRAVIS_PULL_REQUEST_BRANCH:-$TRAVIS_BRANCH} - MODIFIED_DOCS=$(git diff --name-only $TRAVIS_COMMIT_RANGE | grep -E 'README.adoc|^docs/.*.adoc$' | wc -l) - COMMITS_WITH_FORCED_GEN=$(git log --format=%B $TRAVIS_COMMIT_RANGE | grep -i "\[gen docs\]" | wc -l) - git describe --tags --exact-match HEAD >/dev/null 2>&1 && TAGGED=0 || TAGGED=1 - - '[ $TAGGED -eq 0 ] || [ $COMMITS_WITH_FORCED_GEN -gt 0 ] || [ $MODIFIED_DOCS -ge 1 ] && [ $GENERATE_DOC -eq 0 ] && GENERATE_DOC=0 || GENERATE_DOC=1' - - '[ "${BRANCH}" == "master" ] && [ "${TRAVIS_REPO_SLUG}" == "arquillian/smart-testing" ] || [ ! -z "${TRAVIS_PULL_REQUEST// }" -a "${TRAVIS_PULL_REQUEST}" != "false" ] && [ $GENERATE_DOC -eq 0 ] && GENERATE_DOC=0 || GENERATE_DOC=1' + - '[ $TAGGED -eq 0 ] || [ $COMMITS_WITH_FORCED_GEN -gt 0 ] || [ $MODIFIED_DOCS -ge 1 ] && GENERATE_DOC=0 || GENERATE_DOC=1' + - '[ "${BRANCH}" == "master" ] && [ "${TRAVIS_REPO_SLUG}" == "arquillian/smart-testing" ] || [ ! -z "${TRAVIS_PULL_REQUEST// }" -a "${TRAVIS_PULL_REQUEST}" != "false" ] && GENERATE_DOC=0 || GENERATE_DOC=1' - 'if [ $GENERATE_DOC -eq 0 ]; then git config user.name "${GH_USER}"; git config user.email "${GH_EMAIL}"; @@ -39,11 +34,6 @@ before_install: docker pull rochdev/alpine-asciidoctor:mini; fi' -install: - - 'if [[ -n $TEST_SUITE ]]; then - ./mvnw clean install -DskipTests; - fi' - before_script: - mkdir -p /home/travis/.arquillian/mvn - wget https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz -P /home/travis/.arquillian/resolver/maven/download @@ -71,16 +61,14 @@ before_script: fi ' +env: + - TEST_BED_M2_HOME=/home/travis/.arquillian/mvn/apache-maven-3.3.9 MAVEN_OPTS="-Xms512m -Xmx1024m -XX:+TieredCompilation -XX:TieredStopAtLevel=1" + script: - - 'if [[ -n $TEST_SUITE ]]; then - if [[ "$TEST_SUITE" == "units" ]]; then - ./mvnw clean package -P travis -DJAVA_OPTS="-XX:-UseLoopPredicate" -T 100; - else - ./mvnw clean verify -pl functional-tests/test-bed -P travis -DJAVA_OPTS="-XX:-UseLoopPredicate" -T 100; - fi - elif [ $GENERATE_DOC -eq 0 ]; then - ./.asciidoctor/generate.sh --keep; - fi' + - ./mvnw clean verify -P travis -DJAVA_OPTS="-XX:-UseLoopPredicate" -T 100 + - 'if [ $GENERATE_DOC -eq 0 ]; then + ./.asciidoctor/generate.sh --keep; + fi' after_success: - 'if [ $GENERATE_DOC -eq 0 ]; then diff --git a/core/pom.xml b/core/pom.xml index a625c1fdd..80b600ee0 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -45,4 +45,5 @@ ${version.snakeyaml} + diff --git a/functional-tests/git-rules/pom.xml b/functional-tests/git-rules/pom.xml index 8df481afe..be688ee74 100644 --- a/functional-tests/git-rules/pom.xml +++ b/functional-tests/git-rules/pom.xml @@ -43,4 +43,5 @@ test + diff --git a/functional-tests/test-bed/pom.xml b/functional-tests/test-bed/pom.xml index c22b89d4d..ab252bb05 100644 --- a/functional-tests/test-bed/pom.xml +++ b/functional-tests/test-bed/pom.xml @@ -91,52 +91,7 @@ true - - maven-surefire-plugin - - true - - - - org.apache.maven.plugins - maven-failsafe-plugin - ${version.surefire} - - - default-test - - integration-test - verify - - - ${surefire.fork.count} - ${surefire.thread.count} - ${surefire.reuse.forks} - -Xmx1024m - classesAndMethods - net.jcip.annotations.NotThreadSafe - - - - not-thread-safe - - integration-test - verify - - - false - net.jcip.annotations.NotThreadSafe - - - - - - **/*Test.java - **/Test*.java - **/*TestCase.java - - - + diff --git a/junit-test-result-parser/pom.xml b/junit-test-result-parser/pom.xml index 568accdb1..07d23bf69 100644 --- a/junit-test-result-parser/pom.xml +++ b/junit-test-result-parser/pom.xml @@ -24,4 +24,5 @@ assertj-core + diff --git a/mvn-extension/pom.xml b/mvn-extension/pom.xml index 15b8f7e88..cce210b43 100644 --- a/mvn-extension/pom.xml +++ b/mvn-extension/pom.xml @@ -128,4 +128,5 @@ + diff --git a/strategies/affected/pom.xml b/strategies/affected/pom.xml index 6b32d0b53..39bda91e0 100644 --- a/strategies/affected/pom.xml +++ b/strategies/affected/pom.xml @@ -50,4 +50,5 @@ test + diff --git a/strategies/changed/pom.xml b/strategies/changed/pom.xml index dad71468b..88883055d 100644 --- a/strategies/changed/pom.xml +++ b/strategies/changed/pom.xml @@ -40,4 +40,5 @@ test + diff --git a/strategies/failed/pom.xml b/strategies/failed/pom.xml index 9ee884a46..bca5f6ba7 100644 --- a/strategies/failed/pom.xml +++ b/strategies/failed/pom.xml @@ -38,4 +38,5 @@ test + diff --git a/surefire-provider/pom.xml b/surefire-provider/pom.xml index ebc0fcb71..e30d80b17 100644 --- a/surefire-provider/pom.xml +++ b/surefire-provider/pom.xml @@ -87,4 +87,5 @@ +