| # |
| # 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. |
| # |
| |
| version: 2 |
| jobs: |
| j8_jvm_upgrade_dtests: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 1 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Determine distributed Tests to Run |
| command: | |
| # reminder: this code (along with all the steps) is independently executed on every circle container |
| # so the goal here is to get the circleci script to return the tests *this* container will run |
| # which we do via the `circleci` cli tool. |
| |
| rm -fr ~/cassandra-dtest/upgrade_tests |
| echo "***java tests***" |
| |
| # get all of our unit test filenames |
| set -eo pipefail && circleci tests glob "$HOME/cassandra/test/distributed/**/*.java" > /tmp/all_java_unit_tests.txt |
| |
| # split up the unit tests into groups based on the number of containers we have |
| set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt |
| set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/distributed/;;g" | grep "Test\.java$" | grep upgrade > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt |
| echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt" |
| cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt |
| no_output_timeout: 15m |
| - run: |
| name: Log Environment Information |
| command: | |
| echo '*** id ***' |
| id |
| echo '*** cat /proc/cpuinfo ***' |
| cat /proc/cpuinfo |
| echo '*** free -m ***' |
| free -m |
| echo '*** df -m ***' |
| df -m |
| echo '*** ifconfig -a ***' |
| ifconfig -a |
| echo '*** uname -a ***' |
| uname -a |
| echo '*** mount ***' |
| mount |
| echo '*** env ***' |
| env |
| echo '*** java ***' |
| which java |
| java -version |
| - run: |
| name: Run Unit Tests (testclasslist) |
| command: | |
| set -x |
| export PATH=$JAVA_HOME/bin:$PATH |
| time mv ~/cassandra /tmp |
| cd /tmp/cassandra |
| if [ -d ~/dtest_jars ]; then |
| cp ~/dtest_jars/dtest* /tmp/cassandra/build/ |
| fi |
| test_timeout=$(grep 'name="test.distributed.timeout"' build.xml | awk -F'"' '{print $4}' || true) |
| if [ -z "$test_timeout" ]; then |
| test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}') |
| fi |
| ant testclasslist -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=distributed -Dno-build-test=true |
| no_output_timeout: 15m |
| - store_test_results: |
| path: /tmp/cassandra/build/test/output/ |
| - store_artifacts: |
| path: /tmp/cassandra/build/test/output |
| destination: junitxml |
| - store_artifacts: |
| path: /tmp/cassandra/build/test/logs |
| destination: logs |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| utests_compression_repeat: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 4 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Log Environment Information |
| command: | |
| echo '*** id ***' |
| id |
| echo '*** cat /proc/cpuinfo ***' |
| cat /proc/cpuinfo |
| echo '*** free -m ***' |
| free -m |
| echo '*** df -m ***' |
| df -m |
| echo '*** ifconfig -a ***' |
| ifconfig -a |
| echo '*** uname -a ***' |
| uname -a |
| echo '*** mount ***' |
| mount |
| echo '*** env ***' |
| env |
| echo '*** java ***' |
| which java |
| java -version |
| - run: |
| name: Repeatedly run new or modifed JUnit tests |
| no_output_timeout: 15m |
| command: | |
| set -x |
| export PATH=$JAVA_HOME/bin:$PATH |
| time mv ~/cassandra /tmp |
| cd /tmp/cassandra |
| if [ -d ~/dtest_jars ]; then |
| cp ~/dtest_jars/dtest* /tmp/cassandra/build/ |
| fi |
| |
| # Calculate the number of test iterations to be run by the current parallel runner. |
| count=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL)) |
| if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then |
| count=$((count+1)) |
| fi |
| |
| # Put manually specified tests and automatically detected tests together, removing duplicates |
| tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) |
| echo "Tests to be repeated: ${tests}" |
| |
| # Prepare the testtag for the target, used by the test macro in build.xml to group the output files |
| target=test-compression |
| testtag="" |
| if [[ $target == "test-compression" ]]; then |
| testtag="compression" |
| fi |
| |
| # Run each test class as many times as requested. |
| exit_code="$?" |
| for test in $tests; do |
| |
| # Split class and method names from the test name |
| if [[ $test =~ "#" ]]; then |
| class=${test%"#"*} |
| method=${test#*"#"} |
| else |
| class=$test |
| method="" |
| fi |
| |
| # Prepare the -Dtest.name argument. |
| # It can be the fully qualified class name or the short class name, depending on the target. |
| if [[ $target == "test" || \ |
| $target == "test-cdc" || \ |
| $target == "test-compression" || \ |
| $target == "test-system-keyspace-directory" || \ |
| $target == "long-test" ]]; then |
| name_arg="-Dtest.name=${class##*.}" |
| else |
| name_arg="-Dtest.name=$class" |
| fi |
| |
| # Prepare the -Dtest.methods argument, which is optional |
| if [[ $method == "" ]]; then |
| methods_arg="" |
| else |
| methods_arg="-Dtest.methods=$method" |
| fi |
| |
| for i in $(seq -w 1 $count); do |
| echo "Running test $test, iteration $i of $count" |
| |
| # run the test |
| status="passes" |
| if !( set -o pipefail && \ |
| ant test-compression $name_arg $methods_arg -Dno-build-test=true | \ |
| tee stdout.txt \ |
| ); then |
| status="fails" |
| exit_code=1 |
| fi |
| |
| # move the stdout output file |
| dest=/tmp/results/repeated_utests/stdout/${status}/${i} |
| mkdir -p $dest |
| mv stdout.txt $dest/${test}.txt |
| |
| # move the XML output files |
| source=build/test/output/${testtag} |
| dest=/tmp/results/repeated_utests/output/${status}/${i} |
| mkdir -p $dest |
| if [[ -d $source && -n "$(ls $source)" ]]; then |
| mv $source/* $dest/ |
| fi |
| |
| # move the log files |
| source=build/test/logs/${testtag} |
| dest=/tmp/results/repeated_utests/logs/${status}/${i} |
| mkdir -p $dest |
| if [[ -d $source && -n "$(ls $source)" ]]; then |
| mv $source/* $dest/ |
| fi |
| |
| # maybe stop iterations on test failure |
| if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then |
| break |
| fi |
| done |
| done |
| (exit ${exit_code}) |
| - store_test_results: |
| path: /tmp/results/repeated_utests/output |
| - store_artifacts: |
| path: /tmp/results/repeated_utests/stdout |
| destination: stdout |
| - store_artifacts: |
| path: /tmp/results/repeated_utests/output |
| destination: junitxml |
| - store_artifacts: |
| path: /tmp/results/repeated_utests/logs |
| destination: logs |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| utests_long_repeat: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 4 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Log Environment Information |
| command: | |
| echo '*** id ***' |
| id |
| echo '*** cat /proc/cpuinfo ***' |
| cat /proc/cpuinfo |
| echo '*** free -m ***' |
| free -m |
| echo '*** df -m ***' |
| df -m |
| echo '*** ifconfig -a ***' |
| ifconfig -a |
| echo '*** uname -a ***' |
| uname -a |
| echo '*** mount ***' |
| mount |
| echo '*** env ***' |
| env |
| echo '*** java ***' |
| which java |
| java -version |
| - run: |
| name: Repeatedly run new or modifed JUnit tests |
| no_output_timeout: 15m |
| command: | |
| set -x |
| export PATH=$JAVA_HOME/bin:$PATH |
| time mv ~/cassandra /tmp |
| cd /tmp/cassandra |
| if [ -d ~/dtest_jars ]; then |
| cp ~/dtest_jars/dtest* /tmp/cassandra/build/ |
| fi |
| |
| # Calculate the number of test iterations to be run by the current parallel runner. |
| count=$((${REPEATED_UTESTS_LONG_COUNT} / CIRCLE_NODE_TOTAL)) |
| if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_LONG_COUNT} % CIRCLE_NODE_TOTAL))); then |
| count=$((count+1)) |
| fi |
| |
| # Put manually specified tests and automatically detected tests together, removing duplicates |
| tests=$(echo ${REPEATED_UTESTS_LONG} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) |
| echo "Tests to be repeated: ${tests}" |
| |
| # Prepare the testtag for the target, used by the test macro in build.xml to group the output files |
| target=long-testsome |
| testtag="" |
| if [[ $target == "test-compression" ]]; then |
| testtag="compression" |
| fi |
| |
| # Run each test class as many times as requested. |
| exit_code="$?" |
| for test in $tests; do |
| |
| # Split class and method names from the test name |
| if [[ $test =~ "#" ]]; then |
| class=${test%"#"*} |
| method=${test#*"#"} |
| else |
| class=$test |
| method="" |
| fi |
| |
| # Prepare the -Dtest.name argument. |
| # It can be the fully qualified class name or the short class name, depending on the target. |
| if [[ $target == "test" || \ |
| $target == "test-cdc" || \ |
| $target == "test-compression" || \ |
| $target == "test-system-keyspace-directory" || \ |
| $target == "long-test" ]]; then |
| name_arg="-Dtest.name=${class##*.}" |
| else |
| name_arg="-Dtest.name=$class" |
| fi |
| |
| # Prepare the -Dtest.methods argument, which is optional |
| if [[ $method == "" ]]; then |
| methods_arg="" |
| else |
| methods_arg="-Dtest.methods=$method" |
| fi |
| |
| for i in $(seq -w 1 $count); do |
| echo "Running test $test, iteration $i of $count" |
| |
| # run the test |
| status="passes" |
| if !( set -o pipefail && \ |
| ant long-testsome $name_arg $methods_arg -Dno-build-test=true | \ |
| tee stdout.txt \ |
| ); then |
| status="fails" |
| exit_code=1 |
| fi |
| |
| # move the stdout output file |
| dest=/tmp/results/repeated_utests/stdout/${status}/${i} |
| mkdir -p $dest |
| mv stdout.txt $dest/${test}.txt |
| |
| # move the XML output files |
| source=build/test/output/${testtag} |
| dest=/tmp/results/repeated_utests/output/${status}/${i} |
| mkdir -p $dest |
| if [[ -d $source && -n "$(ls $source)" ]]; then |
| mv $source/* $dest/ |
| fi |
| |
| # move the log files |
| source=build/test/logs/${testtag} |
| dest=/tmp/results/repeated_utests/logs/${status}/${i} |
| mkdir -p $dest |
| if [[ -d $source && -n "$(ls $source)" ]]; then |
| mv $source/* $dest/ |
| fi |
| |
| # maybe stop iterations on test failure |
| if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then |
| break |
| fi |
| done |
| done |
| (exit ${exit_code}) |
| - store_test_results: |
| path: /tmp/results/repeated_utests/output |
| - store_artifacts: |
| path: /tmp/results/repeated_utests/stdout |
| destination: stdout |
| - store_artifacts: |
| path: /tmp/results/repeated_utests/output |
| destination: junitxml |
| - store_artifacts: |
| path: /tmp/results/repeated_utests/logs |
| destination: logs |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| j8_unit_tests_repeat: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 4 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Log Environment Information |
| command: | |
| echo '*** id ***' |
| id |
| echo '*** cat /proc/cpuinfo ***' |
| cat /proc/cpuinfo |
| echo '*** free -m ***' |
| free -m |
| echo '*** df -m ***' |
| df -m |
| echo '*** ifconfig -a ***' |
| ifconfig -a |
| echo '*** uname -a ***' |
| uname -a |
| echo '*** mount ***' |
| mount |
| echo '*** env ***' |
| env |
| echo '*** java ***' |
| which java |
| java -version |
| - run: |
| name: Repeatedly run new or modifed JUnit tests |
| no_output_timeout: 15m |
| command: | |
| set -x |
| export PATH=$JAVA_HOME/bin:$PATH |
| time mv ~/cassandra /tmp |
| cd /tmp/cassandra |
| if [ -d ~/dtest_jars ]; then |
| cp ~/dtest_jars/dtest* /tmp/cassandra/build/ |
| fi |
| |
| # Calculate the number of test iterations to be run by the current parallel runner. |
| count=$((${REPEATED_UTESTS_COUNT} / CIRCLE_NODE_TOTAL)) |
| if (($CIRCLE_NODE_INDEX < (${REPEATED_UTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then |
| count=$((count+1)) |
| fi |
| |
| # Put manually specified tests and automatically detected tests together, removing duplicates |
| tests=$(echo ${REPEATED_UTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) |
| echo "Tests to be repeated: ${tests}" |
| |
| # Prepare the testtag for the target, used by the test macro in build.xml to group the output files |
| target=testsome |
| testtag="" |
| if [[ $target == "test-compression" ]]; then |
| testtag="compression" |
| fi |
| |
| # Run each test class as many times as requested. |
| exit_code="$?" |
| for test in $tests; do |
| |
| # Split class and method names from the test name |
| if [[ $test =~ "#" ]]; then |
| class=${test%"#"*} |
| method=${test#*"#"} |
| else |
| class=$test |
| method="" |
| fi |
| |
| # Prepare the -Dtest.name argument. |
| # It can be the fully qualified class name or the short class name, depending on the target. |
| if [[ $target == "test" || \ |
| $target == "test-cdc" || \ |
| $target == "test-compression" || \ |
| $target == "test-system-keyspace-directory" || \ |
| $target == "long-test" ]]; then |
| name_arg="-Dtest.name=${class##*.}" |
| else |
| name_arg="-Dtest.name=$class" |
| fi |
| |
| # Prepare the -Dtest.methods argument, which is optional |
| if [[ $method == "" ]]; then |
| methods_arg="" |
| else |
| methods_arg="-Dtest.methods=$method" |
| fi |
| |
| for i in $(seq -w 1 $count); do |
| echo "Running test $test, iteration $i of $count" |
| |
| # run the test |
| status="passes" |
| if !( set -o pipefail && \ |
| ant testsome $name_arg $methods_arg -Dno-build-test=true | \ |
| tee stdout.txt \ |
| ); then |
| status="fails" |
| exit_code=1 |
| fi |
| |
| # move the stdout output file |
| dest=/tmp/results/repeated_utests/stdout/${status}/${i} |
| mkdir -p $dest |
| mv stdout.txt $dest/${test}.txt |
| |
| # move the XML output files |
| source=build/test/output/${testtag} |
| dest=/tmp/results/repeated_utests/output/${status}/${i} |
| mkdir -p $dest |
| if [[ -d $source && -n "$(ls $source)" ]]; then |
| mv $source/* $dest/ |
| fi |
| |
| # move the log files |
| source=build/test/logs/${testtag} |
| dest=/tmp/results/repeated_utests/logs/${status}/${i} |
| mkdir -p $dest |
| if [[ -d $source && -n "$(ls $source)" ]]; then |
| mv $source/* $dest/ |
| fi |
| |
| # maybe stop iterations on test failure |
| if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then |
| break |
| fi |
| done |
| done |
| (exit ${exit_code}) |
| - store_test_results: |
| path: /tmp/results/repeated_utests/output |
| - store_artifacts: |
| path: /tmp/results/repeated_utests/stdout |
| destination: stdout |
| - store_artifacts: |
| path: /tmp/results/repeated_utests/output |
| destination: junitxml |
| - store_artifacts: |
| path: /tmp/results/repeated_utests/logs |
| destination: logs |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| j8_upgrade_dtests_repeat: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 4 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Clone Cassandra dtest Repository (via git) |
| command: | |
| git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest |
| - run: |
| name: Configure virtualenv and python Dependencies |
| command: | |
| # note, this should be super quick as all dependencies should be pre-installed in the docker image |
| # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated |
| # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and |
| # rebuild the docker image! (it automatically pulls the latest requirements.txt on build) |
| source ~/env3.6/bin/activate |
| export PATH=$JAVA_HOME/bin:$PATH |
| pip3 install --upgrade -r ~/cassandra-dtest/requirements.txt |
| pip3 freeze |
| - run: |
| name: Run repeated Python dtest |
| no_output_timeout: 15m |
| command: | |
| if [ "${REPEATED_UPGRADE_DTESTS}" == "<nil>" ]; then |
| echo "Repeated dtest name hasn't been defined, exiting without running any test" |
| elif [ "${REPEATED_UPGRADE_DTESTS_COUNT}" == "<nil>" ]; then |
| echo "Repeated dtest count hasn't been defined, exiting without running any test" |
| elif [ "${REPEATED_UPGRADE_DTESTS_COUNT}" -le 0 ]; then |
| echo "Repeated dtest count is lesser or equals than zero, exiting without running any test" |
| else |
| |
| # Calculate the number of test iterations to be run by the current parallel runner. |
| # Since we are running the same test multiple times there is no need to use `circleci tests split`. |
| count=$((${REPEATED_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL)) |
| if (($CIRCLE_NODE_INDEX < (${REPEATED_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then |
| count=$((count+1)) |
| fi |
| |
| if (($count <= 0)); then |
| echo "No tests to run in this runner" |
| else |
| echo "Running ${REPEATED_UPGRADE_DTESTS} $count times" |
| |
| source ~/env3.6/bin/activate |
| export PATH=$JAVA_HOME/bin:$PATH |
| |
| java -version |
| cd ~/cassandra-dtest |
| mkdir -p /tmp/dtest |
| |
| echo "env: $(env)" |
| echo "** done env" |
| mkdir -p /tmp/results/dtests |
| |
| tests_arg=$(echo ${REPEATED_UPGRADE_DTESTS} | sed -e "s/,/ /g") |
| |
| stop_on_failure_arg="" |
| if ${REPEATED_TESTS_STOP_ON_FAILURE}; then |
| stop_on_failure_arg="-x" |
| fi |
| |
| vnodes_args="" |
| if false; then |
| vnodes_args="--use-vnodes --num-tokens=16" |
| fi |
| |
| upgrade_arg="" |
| if true; then |
| upgrade_arg="--execute-upgrade-tests --upgrade-target-version-only --upgrade-version-selection all" |
| fi |
| |
| # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee |
| set -o pipefail && cd ~/cassandra-dtest && pytest $vnodes_args --count=$count $stop_on_failure_arg $upgrade_arg --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $tests_arg | tee /tmp/dtest/stdout.txt |
| fi |
| fi |
| - store_test_results: |
| path: /tmp/results |
| - store_artifacts: |
| path: /tmp/dtest |
| destination: dtest |
| - store_artifacts: |
| path: ~/cassandra-dtest/logs |
| destination: dtest_logs |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| build: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 1 |
| steps: |
| - run: |
| name: Log Environment Information |
| command: | |
| echo '*** id ***' |
| id |
| echo '*** cat /proc/cpuinfo ***' |
| cat /proc/cpuinfo |
| echo '*** free -m ***' |
| free -m |
| echo '*** df -m ***' |
| df -m |
| echo '*** ifconfig -a ***' |
| ifconfig -a |
| echo '*** uname -a ***' |
| uname -a |
| echo '*** mount ***' |
| mount |
| echo '*** env ***' |
| env |
| echo '*** java ***' |
| which java |
| java -version |
| - run: |
| name: Clone Cassandra Repository (via git) |
| command: | |
| git clone --single-branch --depth 1 --branch $CIRCLE_BRANCH https://github.com/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME.git ~/cassandra |
| - run: |
| name: Build Cassandra |
| command: | |
| export PATH=$JAVA_HOME/bin:$PATH |
| cd ~/cassandra |
| # Loop to prevent failure due to maven-ant-tasks not downloading a jar.. |
| for x in $(seq 1 3); do |
| ${ANT_HOME}/bin/ant clean jar build-test |
| RETURN="$?" |
| if [ "${RETURN}" -eq "0" ]; then |
| break |
| fi |
| done |
| # Exit, if we didn't build successfully |
| if [ "${RETURN}" -ne "0" ]; then |
| echo "Build failed with exit code: ${RETURN}" |
| exit ${RETURN} |
| fi |
| no_output_timeout: 15m |
| - run: |
| name: Run eclipse-warnings |
| command: | |
| export PATH=$JAVA_HOME/bin:$PATH |
| cd ~/cassandra |
| ant eclipse-warnings |
| - persist_to_workspace: |
| root: /home/cassandra |
| paths: |
| - cassandra |
| - .m2 |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| j8_dtests_vnode_repeat: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 4 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Clone Cassandra dtest Repository (via git) |
| command: | |
| git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest |
| - run: |
| name: Configure virtualenv and python Dependencies |
| command: | |
| # note, this should be super quick as all dependencies should be pre-installed in the docker image |
| # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated |
| # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and |
| # rebuild the docker image! (it automatically pulls the latest requirements.txt on build) |
| source ~/env3.6/bin/activate |
| export PATH=$JAVA_HOME/bin:$PATH |
| pip3 install --upgrade -r ~/cassandra-dtest/requirements.txt |
| pip3 freeze |
| - run: |
| name: Run repeated Python dtest |
| no_output_timeout: 15m |
| command: | |
| if [ "${REPEATED_DTESTS}" == "<nil>" ]; then |
| echo "Repeated dtest name hasn't been defined, exiting without running any test" |
| elif [ "${REPEATED_DTESTS_COUNT}" == "<nil>" ]; then |
| echo "Repeated dtest count hasn't been defined, exiting without running any test" |
| elif [ "${REPEATED_DTESTS_COUNT}" -le 0 ]; then |
| echo "Repeated dtest count is lesser or equals than zero, exiting without running any test" |
| else |
| |
| # Calculate the number of test iterations to be run by the current parallel runner. |
| # Since we are running the same test multiple times there is no need to use `circleci tests split`. |
| count=$((${REPEATED_DTESTS_COUNT} / CIRCLE_NODE_TOTAL)) |
| if (($CIRCLE_NODE_INDEX < (${REPEATED_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then |
| count=$((count+1)) |
| fi |
| |
| if (($count <= 0)); then |
| echo "No tests to run in this runner" |
| else |
| echo "Running ${REPEATED_DTESTS} $count times" |
| |
| source ~/env3.6/bin/activate |
| export PATH=$JAVA_HOME/bin:$PATH |
| |
| java -version |
| cd ~/cassandra-dtest |
| mkdir -p /tmp/dtest |
| |
| echo "env: $(env)" |
| echo "** done env" |
| mkdir -p /tmp/results/dtests |
| |
| tests_arg=$(echo ${REPEATED_DTESTS} | sed -e "s/,/ /g") |
| |
| stop_on_failure_arg="" |
| if ${REPEATED_TESTS_STOP_ON_FAILURE}; then |
| stop_on_failure_arg="-x" |
| fi |
| |
| vnodes_args="" |
| if true; then |
| vnodes_args="--use-vnodes --num-tokens=16" |
| fi |
| |
| upgrade_arg="" |
| if false; then |
| upgrade_arg="--execute-upgrade-tests --upgrade-target-version-only --upgrade-version-selection all" |
| fi |
| |
| # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee |
| set -o pipefail && cd ~/cassandra-dtest && pytest $vnodes_args --count=$count $stop_on_failure_arg $upgrade_arg --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $tests_arg | tee /tmp/dtest/stdout.txt |
| fi |
| fi |
| - store_test_results: |
| path: /tmp/results |
| - store_artifacts: |
| path: /tmp/dtest |
| destination: dtest |
| - store_artifacts: |
| path: ~/cassandra-dtest/logs |
| destination: dtest_logs |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| j8_upgrade_dtests: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 4 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Clone Cassandra dtest Repository (via git) |
| command: | |
| git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest |
| - run: |
| name: Configure virtualenv and python Dependencies |
| command: | |
| # note, this should be super quick as all dependencies should be pre-installed in the docker image |
| # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated |
| # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and |
| # rebuild the docker image! (it automatically pulls the latest requirements.txt on build) |
| source ~/env3.6/bin/activate |
| export PATH=$JAVA_HOME/bin:$PATH |
| pip3 install --upgrade -r ~/cassandra-dtest/requirements.txt |
| pip3 freeze |
| - run: |
| name: Determine Tests to Run (j8_upgradetests_without_vnodes) |
| no_output_timeout: 5m |
| command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n export \nfi\n\necho \"***Collected DTests (j8_upgradetests_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --execute-upgrade-tests-only --upgrade-target-version-only --upgrade-version-selection all --dtest-print-tests-only --dtest-print-tests-output=/tmp/all_dtest_tests_j8_upgradetests_without_vnodes_raw --cassandra-dir=../cassandra\nif [ -z '' ]; then\n mv /tmp/all_dtest_tests_j8_upgradetests_without_vnodes_raw /tmp/all_dtest_tests_j8_upgradetests_without_vnodes\nelse\n grep -e '' /tmp/all_dtest_tests_j8_upgradetests_without_vnodes_raw > /tmp/all_dtest_tests_j8_upgradetests_without_vnodes || { echo \"Filter did not match any tests! Exiting build.\"; exit 0; }\nfi\nset -eo pipefail && circleci tests split --split-by=timings --timings-type=classname /tmp/all_dtest_tests_j8_upgradetests_without_vnodes > /tmp/split_dtest_tests_j8_upgradetests_without_vnodes.txt\ncat /tmp/split_dtest_tests_j8_upgradetests_without_vnodes.txt | tr '\\n' ' ' > /tmp/split_dtest_tests_j8_upgradetests_without_vnodes_final.txt\ncat /tmp/split_dtest_tests_j8_upgradetests_without_vnodes_final.txt\n" |
| - run: |
| name: Run dtests (j8_upgradetests_without_vnodes) |
| no_output_timeout: 15m |
| command: "echo \"cat /tmp/split_dtest_tests_j8_upgradetests_without_vnodes_final.txt\"\ncat /tmp/split_dtest_tests_j8_upgradetests_without_vnodes_final.txt\n\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\nif [ -n '' ]; then\n export \nfi\n\njava -version\ncd ~/cassandra-dtest\nmkdir -p /tmp/dtest\n\necho \"env: $(env)\"\necho \"** done env\"\nmkdir -p /tmp/results/dtests\n# we need the \"set -o pipefail\" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee\nexport SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_upgradetests_without_vnodes_final.txt`\nset -o pipefail && cd ~/cassandra-dtest && pytest --execute-upgrade-tests-only --upgrade-target-version-only --upgrade-version-selection all --log-level=\"DEBUG\" --junit-xml=/tmp/results/dtests/pytest_result_j8_upgradetests_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt\n" |
| - store_test_results: |
| path: /tmp/results |
| - store_artifacts: |
| path: /tmp/dtest |
| destination: dtest_j8_upgradetests_without_vnodes |
| - store_artifacts: |
| path: ~/cassandra-dtest/logs |
| destination: dtest_j8_upgradetests_without_vnodes_logs |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| j8_jvm_upgrade_dtests_repeat: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 4 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Log Environment Information |
| command: | |
| echo '*** id ***' |
| id |
| echo '*** cat /proc/cpuinfo ***' |
| cat /proc/cpuinfo |
| echo '*** free -m ***' |
| free -m |
| echo '*** df -m ***' |
| df -m |
| echo '*** ifconfig -a ***' |
| ifconfig -a |
| echo '*** uname -a ***' |
| uname -a |
| echo '*** mount ***' |
| mount |
| echo '*** env ***' |
| env |
| echo '*** java ***' |
| which java |
| java -version |
| - run: |
| name: Repeatedly run new or modifed JUnit tests |
| no_output_timeout: 15m |
| command: | |
| set -x |
| export PATH=$JAVA_HOME/bin:$PATH |
| time mv ~/cassandra /tmp |
| cd /tmp/cassandra |
| if [ -d ~/dtest_jars ]; then |
| cp ~/dtest_jars/dtest* /tmp/cassandra/build/ |
| fi |
| |
| # Calculate the number of test iterations to be run by the current parallel runner. |
| count=$((${REPEATED_JVM_UPGRADE_DTESTS_COUNT} / CIRCLE_NODE_TOTAL)) |
| if (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_UPGRADE_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then |
| count=$((count+1)) |
| fi |
| |
| # Put manually specified tests and automatically detected tests together, removing duplicates |
| tests=$(echo ${REPEATED_JVM_UPGRADE_DTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) |
| echo "Tests to be repeated: ${tests}" |
| |
| # Prepare the testtag for the target, used by the test macro in build.xml to group the output files |
| target=test-jvm-dtest-some |
| testtag="" |
| if [[ $target == "test-compression" ]]; then |
| testtag="compression" |
| fi |
| |
| # Run each test class as many times as requested. |
| exit_code="$?" |
| for test in $tests; do |
| |
| # Split class and method names from the test name |
| if [[ $test =~ "#" ]]; then |
| class=${test%"#"*} |
| method=${test#*"#"} |
| else |
| class=$test |
| method="" |
| fi |
| |
| # Prepare the -Dtest.name argument. |
| # It can be the fully qualified class name or the short class name, depending on the target. |
| if [[ $target == "test" || \ |
| $target == "test-cdc" || \ |
| $target == "test-compression" || \ |
| $target == "test-system-keyspace-directory" || \ |
| $target == "long-test" ]]; then |
| name_arg="-Dtest.name=${class##*.}" |
| else |
| name_arg="-Dtest.name=$class" |
| fi |
| |
| # Prepare the -Dtest.methods argument, which is optional |
| if [[ $method == "" ]]; then |
| methods_arg="" |
| else |
| methods_arg="-Dtest.methods=$method" |
| fi |
| |
| for i in $(seq -w 1 $count); do |
| echo "Running test $test, iteration $i of $count" |
| |
| # run the test |
| status="passes" |
| if !( set -o pipefail && \ |
| ant test-jvm-dtest-some $name_arg $methods_arg -Dno-build-test=true | \ |
| tee stdout.txt \ |
| ); then |
| status="fails" |
| exit_code=1 |
| fi |
| |
| # move the stdout output file |
| dest=/tmp/results/repeated_utests/stdout/${status}/${i} |
| mkdir -p $dest |
| mv stdout.txt $dest/${test}.txt |
| |
| # move the XML output files |
| source=build/test/output/${testtag} |
| dest=/tmp/results/repeated_utests/output/${status}/${i} |
| mkdir -p $dest |
| if [[ -d $source && -n "$(ls $source)" ]]; then |
| mv $source/* $dest/ |
| fi |
| |
| # move the log files |
| source=build/test/logs/${testtag} |
| dest=/tmp/results/repeated_utests/logs/${status}/${i} |
| mkdir -p $dest |
| if [[ -d $source && -n "$(ls $source)" ]]; then |
| mv $source/* $dest/ |
| fi |
| |
| # maybe stop iterations on test failure |
| if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then |
| break |
| fi |
| done |
| done |
| (exit ${exit_code}) |
| - store_test_results: |
| path: /tmp/results/repeated_utests/output |
| - store_artifacts: |
| path: /tmp/results/repeated_utests/stdout |
| destination: stdout |
| - store_artifacts: |
| path: /tmp/results/repeated_utests/output |
| destination: junitxml |
| - store_artifacts: |
| path: /tmp/results/repeated_utests/logs |
| destination: logs |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| j8_unit_tests: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 4 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Determine unit Tests to Run |
| command: | |
| # reminder: this code (along with all the steps) is independently executed on every circle container |
| # so the goal here is to get the circleci script to return the tests *this* container will run |
| # which we do via the `circleci` cli tool. |
| |
| rm -fr ~/cassandra-dtest/upgrade_tests |
| echo "***java tests***" |
| |
| # get all of our unit test filenames |
| set -eo pipefail && circleci tests glob "$HOME/cassandra/test/unit/**/*.java" > /tmp/all_java_unit_tests.txt |
| |
| # split up the unit tests into groups based on the number of containers we have |
| set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt |
| set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/unit/;;g" | grep "Test\.java$" > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt |
| echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt" |
| cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt |
| no_output_timeout: 15m |
| - run: |
| name: Log Environment Information |
| command: | |
| echo '*** id ***' |
| id |
| echo '*** cat /proc/cpuinfo ***' |
| cat /proc/cpuinfo |
| echo '*** free -m ***' |
| free -m |
| echo '*** df -m ***' |
| df -m |
| echo '*** ifconfig -a ***' |
| ifconfig -a |
| echo '*** uname -a ***' |
| uname -a |
| echo '*** mount ***' |
| mount |
| echo '*** env ***' |
| env |
| echo '*** java ***' |
| which java |
| java -version |
| - run: |
| name: Run Unit Tests (testclasslist) |
| command: | |
| set -x |
| export PATH=$JAVA_HOME/bin:$PATH |
| time mv ~/cassandra /tmp |
| cd /tmp/cassandra |
| if [ -d ~/dtest_jars ]; then |
| cp ~/dtest_jars/dtest* /tmp/cassandra/build/ |
| fi |
| test_timeout=$(grep 'name="test.unit.timeout"' build.xml | awk -F'"' '{print $4}' || true) |
| if [ -z "$test_timeout" ]; then |
| test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}') |
| fi |
| ant testclasslist -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit -Dno-build-test=true |
| no_output_timeout: 15m |
| - store_test_results: |
| path: /tmp/cassandra/build/test/output/ |
| - store_artifacts: |
| path: /tmp/cassandra/build/test/output |
| destination: junitxml |
| - store_artifacts: |
| path: /tmp/cassandra/build/test/logs |
| destination: logs |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| j8_dtests: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 4 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Clone Cassandra dtest Repository (via git) |
| command: | |
| git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest |
| - run: |
| name: Configure virtualenv and python Dependencies |
| command: | |
| # note, this should be super quick as all dependencies should be pre-installed in the docker image |
| # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated |
| # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and |
| # rebuild the docker image! (it automatically pulls the latest requirements.txt on build) |
| source ~/env3.6/bin/activate |
| export PATH=$JAVA_HOME/bin:$PATH |
| pip3 install --upgrade -r ~/cassandra-dtest/requirements.txt |
| pip3 freeze |
| - run: |
| name: Determine Tests to Run (j8_without_vnodes) |
| no_output_timeout: 5m |
| command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n export \nfi\n\necho \"***Collected DTests (j8_without_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --skip-resource-intensive-tests --dtest-print-tests-only --dtest-print-tests-output=/tmp/all_dtest_tests_j8_without_vnodes_raw --cassandra-dir=../cassandra\nif [ -z '' ]; then\n mv /tmp/all_dtest_tests_j8_without_vnodes_raw /tmp/all_dtest_tests_j8_without_vnodes\nelse\n grep -e '' /tmp/all_dtest_tests_j8_without_vnodes_raw > /tmp/all_dtest_tests_j8_without_vnodes || { echo \"Filter did not match any tests! Exiting build.\"; exit 0; }\nfi\nset -eo pipefail && circleci tests split --split-by=timings --timings-type=classname /tmp/all_dtest_tests_j8_without_vnodes > /tmp/split_dtest_tests_j8_without_vnodes.txt\ncat /tmp/split_dtest_tests_j8_without_vnodes.txt | tr '\\n' ' ' > /tmp/split_dtest_tests_j8_without_vnodes_final.txt\ncat /tmp/split_dtest_tests_j8_without_vnodes_final.txt\n" |
| - run: |
| name: Run dtests (j8_without_vnodes) |
| no_output_timeout: 15m |
| command: "echo \"cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt\"\ncat /tmp/split_dtest_tests_j8_without_vnodes_final.txt\n\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\nif [ -n '' ]; then\n export \nfi\n\njava -version\ncd ~/cassandra-dtest\nmkdir -p /tmp/dtest\n\necho \"env: $(env)\"\necho \"** done env\"\nmkdir -p /tmp/results/dtests\n# we need the \"set -o pipefail\" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee\nexport SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_without_vnodes_final.txt`\nset -o pipefail && cd ~/cassandra-dtest && pytest --skip-resource-intensive-tests --log-level=\"DEBUG\" --junit-xml=/tmp/results/dtests/pytest_result_j8_without_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt\n" |
| - store_test_results: |
| path: /tmp/results |
| - store_artifacts: |
| path: /tmp/dtest |
| destination: dtest_j8_without_vnodes |
| - store_artifacts: |
| path: ~/cassandra-dtest/logs |
| destination: dtest_j8_without_vnodes_logs |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| j8_dtests_vnode: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 4 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Clone Cassandra dtest Repository (via git) |
| command: | |
| git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest |
| - run: |
| name: Configure virtualenv and python Dependencies |
| command: | |
| # note, this should be super quick as all dependencies should be pre-installed in the docker image |
| # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated |
| # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and |
| # rebuild the docker image! (it automatically pulls the latest requirements.txt on build) |
| source ~/env3.6/bin/activate |
| export PATH=$JAVA_HOME/bin:$PATH |
| pip3 install --upgrade -r ~/cassandra-dtest/requirements.txt |
| pip3 freeze |
| - run: |
| name: Determine Tests to Run (j8_with_vnodes) |
| no_output_timeout: 5m |
| command: "# reminder: this code (along with all the steps) is independently executed on every circle container\n# so the goal here is to get the circleci script to return the tests *this* container will run\n# which we do via the `circleci` cli tool.\n\ncd cassandra-dtest\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\n\nif [ -n '' ]; then\n export \nfi\n\necho \"***Collected DTests (j8_with_vnodes)***\"\nset -eo pipefail && ./run_dtests.py --use-vnodes --skip-resource-intensive-tests --dtest-print-tests-only --dtest-print-tests-output=/tmp/all_dtest_tests_j8_with_vnodes_raw --cassandra-dir=../cassandra\nif [ -z '' ]; then\n mv /tmp/all_dtest_tests_j8_with_vnodes_raw /tmp/all_dtest_tests_j8_with_vnodes\nelse\n grep -e '' /tmp/all_dtest_tests_j8_with_vnodes_raw > /tmp/all_dtest_tests_j8_with_vnodes || { echo \"Filter did not match any tests! Exiting build.\"; exit 0; }\nfi\nset -eo pipefail && circleci tests split --split-by=timings --timings-type=classname /tmp/all_dtest_tests_j8_with_vnodes > /tmp/split_dtest_tests_j8_with_vnodes.txt\ncat /tmp/split_dtest_tests_j8_with_vnodes.txt | tr '\\n' ' ' > /tmp/split_dtest_tests_j8_with_vnodes_final.txt\ncat /tmp/split_dtest_tests_j8_with_vnodes_final.txt\n" |
| - run: |
| name: Run dtests (j8_with_vnodes) |
| no_output_timeout: 15m |
| command: "echo \"cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt\"\ncat /tmp/split_dtest_tests_j8_with_vnodes_final.txt\n\nsource ~/env3.6/bin/activate\nexport PATH=$JAVA_HOME/bin:$PATH\nif [ -n '' ]; then\n export \nfi\n\njava -version\ncd ~/cassandra-dtest\nmkdir -p /tmp/dtest\n\necho \"env: $(env)\"\necho \"** done env\"\nmkdir -p /tmp/results/dtests\n# we need the \"set -o pipefail\" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee\nexport SPLIT_TESTS=`cat /tmp/split_dtest_tests_j8_with_vnodes_final.txt`\nset -o pipefail && cd ~/cassandra-dtest && pytest --use-vnodes --num-tokens=32 --skip-resource-intensive-tests --log-level=\"DEBUG\" --junit-xml=/tmp/results/dtests/pytest_result_j8_with_vnodes.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt\n" |
| - store_test_results: |
| path: /tmp/results |
| - store_artifacts: |
| path: /tmp/dtest |
| destination: dtest_j8_with_vnodes |
| - store_artifacts: |
| path: ~/cassandra-dtest/logs |
| destination: dtest_j8_with_vnodes_logs |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| j8_jvm_dtests_repeat: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 4 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Log Environment Information |
| command: | |
| echo '*** id ***' |
| id |
| echo '*** cat /proc/cpuinfo ***' |
| cat /proc/cpuinfo |
| echo '*** free -m ***' |
| free -m |
| echo '*** df -m ***' |
| df -m |
| echo '*** ifconfig -a ***' |
| ifconfig -a |
| echo '*** uname -a ***' |
| uname -a |
| echo '*** mount ***' |
| mount |
| echo '*** env ***' |
| env |
| echo '*** java ***' |
| which java |
| java -version |
| - run: |
| name: Repeatedly run new or modifed JUnit tests |
| no_output_timeout: 15m |
| command: | |
| set -x |
| export PATH=$JAVA_HOME/bin:$PATH |
| time mv ~/cassandra /tmp |
| cd /tmp/cassandra |
| if [ -d ~/dtest_jars ]; then |
| cp ~/dtest_jars/dtest* /tmp/cassandra/build/ |
| fi |
| |
| # Calculate the number of test iterations to be run by the current parallel runner. |
| count=$((${REPEATED_JVM_DTESTS_COUNT} / CIRCLE_NODE_TOTAL)) |
| if (($CIRCLE_NODE_INDEX < (${REPEATED_JVM_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then |
| count=$((count+1)) |
| fi |
| |
| # Put manually specified tests and automatically detected tests together, removing duplicates |
| tests=$(echo ${REPEATED_JVM_DTESTS} | sed -e "s/<nil>//" | sed -e "s/ //" | tr "," "\n" | tr " " "\n" | sort -n | uniq -u) |
| echo "Tests to be repeated: ${tests}" |
| |
| # Prepare the testtag for the target, used by the test macro in build.xml to group the output files |
| target=test-jvm-dtest-some |
| testtag="" |
| if [[ $target == "test-compression" ]]; then |
| testtag="compression" |
| fi |
| |
| # Run each test class as many times as requested. |
| exit_code="$?" |
| for test in $tests; do |
| |
| # Split class and method names from the test name |
| if [[ $test =~ "#" ]]; then |
| class=${test%"#"*} |
| method=${test#*"#"} |
| else |
| class=$test |
| method="" |
| fi |
| |
| # Prepare the -Dtest.name argument. |
| # It can be the fully qualified class name or the short class name, depending on the target. |
| if [[ $target == "test" || \ |
| $target == "test-cdc" || \ |
| $target == "test-compression" || \ |
| $target == "test-system-keyspace-directory" || \ |
| $target == "long-test" ]]; then |
| name_arg="-Dtest.name=${class##*.}" |
| else |
| name_arg="-Dtest.name=$class" |
| fi |
| |
| # Prepare the -Dtest.methods argument, which is optional |
| if [[ $method == "" ]]; then |
| methods_arg="" |
| else |
| methods_arg="-Dtest.methods=$method" |
| fi |
| |
| for i in $(seq -w 1 $count); do |
| echo "Running test $test, iteration $i of $count" |
| |
| # run the test |
| status="passes" |
| if !( set -o pipefail && \ |
| ant test-jvm-dtest-some $name_arg $methods_arg -Dno-build-test=true | \ |
| tee stdout.txt \ |
| ); then |
| status="fails" |
| exit_code=1 |
| fi |
| |
| # move the stdout output file |
| dest=/tmp/results/repeated_utests/stdout/${status}/${i} |
| mkdir -p $dest |
| mv stdout.txt $dest/${test}.txt |
| |
| # move the XML output files |
| source=build/test/output/${testtag} |
| dest=/tmp/results/repeated_utests/output/${status}/${i} |
| mkdir -p $dest |
| if [[ -d $source && -n "$(ls $source)" ]]; then |
| mv $source/* $dest/ |
| fi |
| |
| # move the log files |
| source=build/test/logs/${testtag} |
| dest=/tmp/results/repeated_utests/logs/${status}/${i} |
| mkdir -p $dest |
| if [[ -d $source && -n "$(ls $source)" ]]; then |
| mv $source/* $dest/ |
| fi |
| |
| # maybe stop iterations on test failure |
| if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then |
| break |
| fi |
| done |
| done |
| (exit ${exit_code}) |
| - store_test_results: |
| path: /tmp/results/repeated_utests/output |
| - store_artifacts: |
| path: /tmp/results/repeated_utests/stdout |
| destination: stdout |
| - store_artifacts: |
| path: /tmp/results/repeated_utests/output |
| destination: junitxml |
| - store_artifacts: |
| path: /tmp/results/repeated_utests/logs |
| destination: logs |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| j8_repeated_ant_test: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 4 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Log Environment Information |
| command: | |
| echo '*** id ***' |
| id |
| echo '*** cat /proc/cpuinfo ***' |
| cat /proc/cpuinfo |
| echo '*** free -m ***' |
| free -m |
| echo '*** df -m ***' |
| df -m |
| echo '*** ifconfig -a ***' |
| ifconfig -a |
| echo '*** uname -a ***' |
| uname -a |
| echo '*** mount ***' |
| mount |
| echo '*** env ***' |
| env |
| echo '*** java ***' |
| which java |
| java -version |
| - run: |
| name: Run repeated JUnit test |
| no_output_timeout: 15m |
| command: | |
| if [ "${REPEATED_ANT_TEST_CLASS}" == "<nil>" ]; then |
| echo "Repeated utest class name hasn't been defined, exiting without running any test" |
| elif [ "${REPEATED_ANT_TEST_COUNT}" == "<nil>" ]; then |
| echo "Repeated utest count hasn't been defined, exiting without running any test" |
| elif [ "${REPEATED_ANT_TEST_COUNT}" -le 0 ]; then |
| echo "Repeated utest count is lesser or equals than zero, exiting without running any test" |
| else |
| |
| # Calculate the number of test iterations to be run by the current parallel runner. |
| # Since we are running the same test multiple times there is no need to use `circleci tests split`. |
| count=$((${REPEATED_ANT_TEST_COUNT} / CIRCLE_NODE_TOTAL)) |
| if (($CIRCLE_NODE_INDEX < (${REPEATED_ANT_TEST_COUNT} % CIRCLE_NODE_TOTAL))); then |
| count=$((count+1)) |
| fi |
| |
| if (($count <= 0)); then |
| echo "No tests to run in this runner" |
| else |
| echo "Running ${REPEATED_ANT_TEST_TARGET} ${REPEATED_ANT_TEST_CLASS} ${REPEATED_ANT_TEST_METHODS} ${REPEATED_ANT_TEST_COUNT} times" |
| |
| set -x |
| export PATH=$JAVA_HOME/bin:$PATH |
| time mv ~/cassandra /tmp |
| cd /tmp/cassandra |
| if [ -d ~/dtest_jars ]; then |
| cp ~/dtest_jars/dtest* /tmp/cassandra/build/ |
| fi |
| |
| target=${REPEATED_ANT_TEST_TARGET} |
| class_path=${REPEATED_ANT_TEST_CLASS} |
| class_name="${class_path##*.}" |
| |
| # Prepare the -Dtest.name argument. |
| # It can be the fully qualified class name or the short class name, depending on the target. |
| if [[ $target == "test" || \ |
| $target == "test-cdc" || \ |
| $target == "test-compression" || \ |
| $target == "test-system-keyspace-directory" || \ |
| $target == "long-test" ]]; then |
| name="-Dtest.name=$class_name" |
| else |
| name="-Dtest.name=$class_path" |
| fi |
| |
| # Prepare the -Dtest.methods argument, which is optional |
| if [ "${REPEATED_ANT_TEST_METHODS}" == "<nil>" ]; then |
| methods="" |
| else |
| methods="-Dtest.methods=${REPEATED_ANT_TEST_METHODS}" |
| fi |
| |
| # Run the test target as many times as requested collecting the exit code, |
| # stopping the iteration only if stop_on_failure is set. |
| exit_code="$?" |
| for i in $(seq -w 1 $count); do |
| |
| echo "Running test iteration $i of $count" |
| |
| # run the test |
| status="passes" |
| if !( set -o pipefail && ant $target $name $methods -Dno-build-test=true | tee stdout.txt ); then |
| status="fails" |
| exit_code=1 |
| fi |
| |
| # move the stdout output file |
| dest=/tmp/results/repeated_utest/stdout/${status}/${i} |
| mkdir -p $dest |
| mv stdout.txt $dest/${REPEATED_ANT_TEST_TARGET}-${REPEATED_ANT_TEST_CLASS}.txt |
| |
| # move the XML output files |
| source=build/test/output |
| dest=/tmp/results/repeated_utest/output/${status}/${i} |
| mkdir -p $dest |
| if [[ -d $source && -n "$(ls $source)" ]]; then |
| mv $source/* $dest/ |
| fi |
| |
| # move the log files |
| source=build/test/logs |
| dest=/tmp/results/repeated_utest/logs/${status}/${i} |
| mkdir -p $dest |
| if [[ -d $source && -n "$(ls $source)" ]]; then |
| mv $source/* $dest/ |
| fi |
| |
| # maybe stop iterations on test failure |
| if [[ ${REPEATED_TESTS_STOP_ON_FAILURE} = true ]] && (( $exit_code > 0 )); then |
| break |
| fi |
| done |
| |
| (exit ${exit_code}) |
| fi |
| fi |
| - store_test_results: |
| path: /tmp/results/repeated_utest/output |
| - store_artifacts: |
| path: /tmp/results/repeated_utest/stdout |
| destination: stdout |
| - store_artifacts: |
| path: /tmp/results/repeated_utest/output |
| destination: junitxml |
| - store_artifacts: |
| path: /tmp/results/repeated_utest/logs |
| destination: logs |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| j8_dtests_repeat: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 4 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Clone Cassandra dtest Repository (via git) |
| command: | |
| git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest |
| - run: |
| name: Configure virtualenv and python Dependencies |
| command: | |
| # note, this should be super quick as all dependencies should be pre-installed in the docker image |
| # if additional dependencies were added to requirmeents.txt and the docker image hasn't been updated |
| # we'd have to install it here at runtime -- which will make things slow, so do yourself a favor and |
| # rebuild the docker image! (it automatically pulls the latest requirements.txt on build) |
| source ~/env3.6/bin/activate |
| export PATH=$JAVA_HOME/bin:$PATH |
| pip3 install --upgrade -r ~/cassandra-dtest/requirements.txt |
| pip3 freeze |
| - run: |
| name: Run repeated Python dtest |
| no_output_timeout: 15m |
| command: | |
| if [ "${REPEATED_DTESTS}" == "<nil>" ]; then |
| echo "Repeated dtest name hasn't been defined, exiting without running any test" |
| elif [ "${REPEATED_DTESTS_COUNT}" == "<nil>" ]; then |
| echo "Repeated dtest count hasn't been defined, exiting without running any test" |
| elif [ "${REPEATED_DTESTS_COUNT}" -le 0 ]; then |
| echo "Repeated dtest count is lesser or equals than zero, exiting without running any test" |
| else |
| |
| # Calculate the number of test iterations to be run by the current parallel runner. |
| # Since we are running the same test multiple times there is no need to use `circleci tests split`. |
| count=$((${REPEATED_DTESTS_COUNT} / CIRCLE_NODE_TOTAL)) |
| if (($CIRCLE_NODE_INDEX < (${REPEATED_DTESTS_COUNT} % CIRCLE_NODE_TOTAL))); then |
| count=$((count+1)) |
| fi |
| |
| if (($count <= 0)); then |
| echo "No tests to run in this runner" |
| else |
| echo "Running ${REPEATED_DTESTS} $count times" |
| |
| source ~/env3.6/bin/activate |
| export PATH=$JAVA_HOME/bin:$PATH |
| |
| java -version |
| cd ~/cassandra-dtest |
| mkdir -p /tmp/dtest |
| |
| echo "env: $(env)" |
| echo "** done env" |
| mkdir -p /tmp/results/dtests |
| |
| tests_arg=$(echo ${REPEATED_DTESTS} | sed -e "s/,/ /g") |
| |
| stop_on_failure_arg="" |
| if ${REPEATED_TESTS_STOP_ON_FAILURE}; then |
| stop_on_failure_arg="-x" |
| fi |
| |
| vnodes_args="" |
| if false; then |
| vnodes_args="--use-vnodes --num-tokens=16" |
| fi |
| |
| upgrade_arg="" |
| if false; then |
| upgrade_arg="--execute-upgrade-tests --upgrade-target-version-only --upgrade-version-selection all" |
| fi |
| |
| # we need the "set -o pipefail" here so that the exit code that circleci will actually use is from pytest and not the exit code from tee |
| set -o pipefail && cd ~/cassandra-dtest && pytest $vnodes_args --count=$count $stop_on_failure_arg $upgrade_arg --log-cli-level=DEBUG --junit-xml=/tmp/results/dtests/pytest_result.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $tests_arg | tee /tmp/dtest/stdout.txt |
| fi |
| fi |
| - store_test_results: |
| path: /tmp/results |
| - store_artifacts: |
| path: /tmp/dtest |
| destination: dtest |
| - store_artifacts: |
| path: ~/cassandra-dtest/logs |
| destination: dtest_logs |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| j8_jvm_dtests: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 1 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Determine distributed Tests to Run |
| command: | |
| # reminder: this code (along with all the steps) is independently executed on every circle container |
| # so the goal here is to get the circleci script to return the tests *this* container will run |
| # which we do via the `circleci` cli tool. |
| |
| rm -fr ~/cassandra-dtest/upgrade_tests |
| echo "***java tests***" |
| |
| # get all of our unit test filenames |
| set -eo pipefail && circleci tests glob "$HOME/cassandra/test/distributed/**/*.java" > /tmp/all_java_unit_tests.txt |
| |
| # split up the unit tests into groups based on the number of containers we have |
| set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt |
| set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/distributed/;;g" | grep "Test\.java$" | grep -v upgrade > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt |
| echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt" |
| cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt |
| no_output_timeout: 15m |
| - run: |
| name: Log Environment Information |
| command: | |
| echo '*** id ***' |
| id |
| echo '*** cat /proc/cpuinfo ***' |
| cat /proc/cpuinfo |
| echo '*** free -m ***' |
| free -m |
| echo '*** df -m ***' |
| df -m |
| echo '*** ifconfig -a ***' |
| ifconfig -a |
| echo '*** uname -a ***' |
| uname -a |
| echo '*** mount ***' |
| mount |
| echo '*** env ***' |
| env |
| echo '*** java ***' |
| which java |
| java -version |
| - run: |
| name: Run Unit Tests (testclasslist) |
| command: | |
| set -x |
| export PATH=$JAVA_HOME/bin:$PATH |
| time mv ~/cassandra /tmp |
| cd /tmp/cassandra |
| if [ -d ~/dtest_jars ]; then |
| cp ~/dtest_jars/dtest* /tmp/cassandra/build/ |
| fi |
| test_timeout=$(grep 'name="test.distributed.timeout"' build.xml | awk -F'"' '{print $4}' || true) |
| if [ -z "$test_timeout" ]; then |
| test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}') |
| fi |
| ant testclasslist -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=distributed -Dno-build-test=true |
| no_output_timeout: 15m |
| - store_test_results: |
| path: /tmp/cassandra/build/test/output/ |
| - store_artifacts: |
| path: /tmp/cassandra/build/test/output |
| destination: junitxml |
| - store_artifacts: |
| path: /tmp/cassandra/build/test/logs |
| destination: logs |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| utests_long: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 1 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Run Unit Tests (long-test) |
| command: | |
| export PATH=$JAVA_HOME/bin:$PATH |
| time mv ~/cassandra /tmp |
| cd /tmp/cassandra |
| if [ -d ~/dtest_jars ]; then |
| cp ~/dtest_jars/dtest* /tmp/cassandra/build/ |
| fi |
| ant clean long-test -Dno-build-test=true |
| no_output_timeout: 15m |
| - store_test_results: |
| path: /tmp/cassandra/build/test/output/ |
| - store_artifacts: |
| path: /tmp/cassandra/build/test/output |
| destination: junitxml |
| - store_artifacts: |
| path: /tmp/cassandra/build/test/logs |
| destination: logs |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| utests_compression: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 4 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Determine unit Tests to Run |
| command: | |
| # reminder: this code (along with all the steps) is independently executed on every circle container |
| # so the goal here is to get the circleci script to return the tests *this* container will run |
| # which we do via the `circleci` cli tool. |
| |
| rm -fr ~/cassandra-dtest/upgrade_tests |
| echo "***java tests***" |
| |
| # get all of our unit test filenames |
| set -eo pipefail && circleci tests glob "$HOME/cassandra/test/unit/**/*.java" > /tmp/all_java_unit_tests.txt |
| |
| # split up the unit tests into groups based on the number of containers we have |
| set -eo pipefail && circleci tests split --split-by=timings --timings-type=filename --index=${CIRCLE_NODE_INDEX} --total=${CIRCLE_NODE_TOTAL} /tmp/all_java_unit_tests.txt > /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt |
| set -eo pipefail && cat /tmp/java_tests_${CIRCLE_NODE_INDEX}.txt | sed "s;^/home/cassandra/cassandra/test/unit/;;g" | grep "Test\.java$" > /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt |
| echo "** /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt" |
| cat /tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt |
| no_output_timeout: 15m |
| - run: |
| name: Log Environment Information |
| command: | |
| echo '*** id ***' |
| id |
| echo '*** cat /proc/cpuinfo ***' |
| cat /proc/cpuinfo |
| echo '*** free -m ***' |
| free -m |
| echo '*** df -m ***' |
| df -m |
| echo '*** ifconfig -a ***' |
| ifconfig -a |
| echo '*** uname -a ***' |
| uname -a |
| echo '*** mount ***' |
| mount |
| echo '*** env ***' |
| env |
| echo '*** java ***' |
| which java |
| java -version |
| - run: |
| name: Run Unit Tests (testclasslist-compression) |
| command: | |
| set -x |
| export PATH=$JAVA_HOME/bin:$PATH |
| time mv ~/cassandra /tmp |
| cd /tmp/cassandra |
| if [ -d ~/dtest_jars ]; then |
| cp ~/dtest_jars/dtest* /tmp/cassandra/build/ |
| fi |
| test_timeout=$(grep 'name="test.unit.timeout"' build.xml | awk -F'"' '{print $4}' || true) |
| if [ -z "$test_timeout" ]; then |
| test_timeout=$(grep 'name="test.timeout"' build.xml | awk -F'"' '{print $4}') |
| fi |
| ant testclasslist-compression -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt -Dtest.classlistprefix=unit -Dno-build-test=true |
| no_output_timeout: 15m |
| - store_test_results: |
| path: /tmp/cassandra/build/test/output/ |
| - store_artifacts: |
| path: /tmp/cassandra/build/test/output |
| destination: junitxml |
| - store_artifacts: |
| path: /tmp/cassandra/build/test/logs |
| destination: logs |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| j8_dtest_jars_build: |
| docker: |
| - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest |
| resource_class: medium |
| working_directory: ~/ |
| shell: /bin/bash -eo pipefail -l |
| parallelism: 1 |
| steps: |
| - attach_workspace: |
| at: /home/cassandra |
| - run: |
| name: Build Cassandra DTest jars |
| command: | |
| export PATH=$JAVA_HOME/bin:$PATH |
| cd ~/cassandra |
| mkdir ~/dtest_jars |
| git remote add apache https://github.com/apache/cassandra.git |
| for branch in cassandra-2.2 cassandra-3.0 cassandra-3.11 trunk; do |
| # check out the correct cassandra version: |
| git remote set-branches --add apache '$branch' |
| git fetch --depth 1 apache $branch |
| git checkout $branch |
| git clean -fd |
| # Loop to prevent failure due to maven-ant-tasks not downloading a jar.. |
| for x in $(seq 1 3); do |
| ${ANT_HOME}/bin/ant realclean; ${ANT_HOME}/bin/ant jar dtest-jar |
| RETURN="$?" |
| if [ "${RETURN}" -eq "0" ]; then |
| cp build/dtest*.jar ~/dtest_jars |
| break |
| fi |
| done |
| # Exit, if we didn't build successfully |
| if [ "${RETURN}" -ne "0" ]; then |
| echo "Build failed with exit code: ${RETURN}" |
| exit ${RETURN} |
| fi |
| done |
| # and build the dtest-jar for the branch under test |
| ${ANT_HOME}/bin/ant realclean |
| git checkout origin/$CIRCLE_BRANCH |
| git clean -fd |
| for x in $(seq 1 3); do |
| ${ANT_HOME}/bin/ant realclean; ${ANT_HOME}/bin/ant jar dtest-jar |
| RETURN="$?" |
| if [ "${RETURN}" -eq "0" ]; then |
| cp build/dtest*.jar ~/dtest_jars |
| break |
| fi |
| done |
| # Exit, if we didn't build successfully |
| if [ "${RETURN}" -ne "0" ]; then |
| echo "Build failed with exit code: ${RETURN}" |
| exit ${RETURN} |
| fi |
| ls -l ~/dtest_jars |
| no_output_timeout: 15m |
| - persist_to_workspace: |
| root: /home/cassandra |
| paths: |
| - dtest_jars |
| environment: |
| - JAVA8_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - ANT_HOME: /usr/share/ant |
| - LANG: en_US.UTF-8 |
| - KEEP_TEST_DIR: true |
| - DEFAULT_DIR: /home/cassandra/cassandra-dtest |
| - PYTHONIOENCODING: utf-8 |
| - PYTHONUNBUFFERED: true |
| - CASS_DRIVER_NO_EXTENSIONS: true |
| - CASS_DRIVER_NO_CYTHON: true |
| - CASSANDRA_SKIP_SYNC: true |
| - DTEST_REPO: https://github.com/apache/cassandra-dtest.git |
| - DTEST_BRANCH: trunk |
| - CCM_MAX_HEAP_SIZE: 1024M |
| - CCM_HEAP_NEWSIZE: 256M |
| - REPEATED_TESTS_STOP_ON_FAILURE: false |
| - REPEATED_UTESTS: null |
| - REPEATED_UTESTS_COUNT: 500 |
| - REPEATED_UTESTS_LONG: null |
| - REPEATED_UTESTS_LONG_COUNT: 100 |
| - REPEATED_JVM_DTESTS: null |
| - REPEATED_JVM_DTESTS_COUNT: 500 |
| - REPEATED_JVM_UPGRADE_DTESTS: null |
| - REPEATED_JVM_UPGRADE_DTESTS_COUNT: 500 |
| - REPEATED_DTESTS: null |
| - REPEATED_DTESTS_COUNT: 500 |
| - REPEATED_UPGRADE_DTESTS: null |
| - REPEATED_UPGRADE_DTESTS_COUNT: 25 |
| - REPEATED_ANT_TEST_TARGET: testsome |
| - REPEATED_ANT_TEST_CLASS: null |
| - REPEATED_ANT_TEST_METHODS: null |
| - REPEATED_ANT_TEST_COUNT: 500 |
| - JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| - JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64 |
| workflows: |
| version: 2 |
| separate_tests: |
| jobs: |
| - start_build: |
| type: approval |
| - build: |
| requires: |
| - start_build |
| - start_j8_unit_tests: |
| type: approval |
| - j8_unit_tests: |
| requires: |
| - start_j8_unit_tests |
| - build |
| - start_j8_jvm_dtests: |
| type: approval |
| - j8_jvm_dtests: |
| requires: |
| - start_j8_jvm_dtests |
| - build |
| - start_utests_long: |
| type: approval |
| - utests_long: |
| requires: |
| - start_utests_long |
| - build |
| - start_utests_compression: |
| type: approval |
| - utests_compression: |
| requires: |
| - start_utests_compression |
| - build |
| - start_j8_dtest_jars_build: |
| type: approval |
| - j8_dtest_jars_build: |
| requires: |
| - start_j8_dtest_jars_build |
| - build |
| - start_jvm_upgrade_dtests: |
| type: approval |
| - j8_jvm_upgrade_dtests: |
| requires: |
| - start_jvm_upgrade_dtests |
| - j8_dtest_jars_build |
| - start_j8_dtests: |
| type: approval |
| - j8_dtests: |
| requires: |
| - start_j8_dtests |
| - build |
| - start_j8_dtests_vnode: |
| type: approval |
| - j8_dtests_vnode: |
| requires: |
| - start_j8_dtests_vnode |
| - build |
| - start_j8_upgrade_dtests: |
| type: approval |
| - j8_upgrade_dtests: |
| requires: |
| - start_j8_upgrade_dtests |
| - build |
| pre-commit_tests: |
| jobs: |
| - start_pre-commit_tests: |
| type: approval |
| - build: |
| requires: |
| - start_pre-commit_tests |
| - j8_unit_tests: |
| requires: |
| - build |
| - j8_jvm_dtests: |
| requires: |
| - build |
| - start_utests_long: |
| type: approval |
| - utests_long: |
| requires: |
| - start_utests_long |
| - build |
| - start_utests_compression: |
| type: approval |
| - utests_compression: |
| requires: |
| - start_utests_compression |
| - build |
| - start_jvm_upgrade_dtests: |
| type: approval |
| - j8_dtest_jars_build: |
| requires: |
| - start_jvm_upgrade_dtests |
| - build |
| - j8_jvm_upgrade_dtests: |
| requires: |
| - j8_dtest_jars_build |
| - j8_dtests: |
| requires: |
| - build |
| - j8_dtests_vnode: |
| requires: |
| - build |
| - start_upgrade_dtests: |
| type: approval |
| - j8_upgrade_dtests: |
| requires: |
| - start_upgrade_dtests |
| - build |