#
# 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.1

default_env_vars: &default_env_vars

    # The values of some of these environment variables are meant to be frequently changed by developers.
    # The generate.sh script contains a list of accepted environment variables that should contain some of
    # these variables. Also, some variables are mentioned in the documentation, at least in
    # .circleci/readme.md and in doc/source/development/testing.rst.
    # If you modify these variables, or if you add new variables whose values are meant to be changed frequently,
    # please remember to modify the generate.sh script and the documentation accordingly.

    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
    #Skip all syncing to disk to avoid performance issues in flaky CI environments
    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

    # The Ant test target to run, for example:
    # REPEATED_UTEST_TARGET: testsome
    # REPEATED_UTEST_TARGET: test-jvm-dtest-some
    # REPEATED_UTEST_TARGET: test-cdc
    # REPEATED_UTEST_TARGET: test-compression
    # REPEATED_UTEST_TARGET: test-system-keyspace-directory
    REPEATED_UTEST_TARGET: testsome
    # The name of JUnit class to be run multiple times, for example:
    # REPEATED_UTEST_CLASS: org.apache.cassandra.cql3.ViewTest
    # REPEATED_UTEST_CLASS: org.apache.cassandra.distributed.test.PagingTest
    REPEATED_UTEST_CLASS:
    # The optional specific methods within REPEATED_UTEST_CLASS to be run, for example:
    # REPEATED_UTEST_METHODS: testCompoundPartitionKey
    # REPEATED_UTEST_METHODS: testCompoundPartitionKey,testStaticTable
    # Please note that some Ant targets will ignore the -Dtest.methods argument produced by this.
    REPEATED_UTEST_METHODS:
    # The number of times that the repeated JUnit test should be run
    REPEATED_UTEST_COUNT: 100
    # Whether the test iteration should stop on the first failure
    REPEATED_UTEST_STOP_ON_FAILURE: false

    # A Python dtest to be run multiple times, for example:
    # REPEATED_DTEST_NAME: cqlsh_tests/test_cqlsh.py
    # REPEATED_DTEST_NAME: cqlsh_tests/test_cqlsh.py::TestCqlshSmoke
    # REPEATED_DTEST_NAME: cqlsh_tests/test_cqlsh.py::TestCqlshSmoke::test_create_index
    REPEATED_DTEST_NAME:
    # Whether the repeated Python dtest should use vnodes
    REPEATED_DTEST_VNODES: false
    # The number of times that the repeated Python dtest should be run
    REPEATED_DTEST_COUNT: 100
    # Whether the test iteration should stop on the first failure
    REPEATED_DTEST_STOP_ON_FAILURE: false

    # A Python upgrade dtest to be run multiple times, for example:
    # REPEATED_UPGRADE_DTEST_NAME: upgrade_tests/cql_tests.py
    # REPEATED_UPGRADE_DTEST_NAME: upgrade_tests/cql_tests.py::TestCQLNodes2RF1_Upgrade_current_4_0_x_To_indev_4_0_x
    REPEATED_UPGRADE_DTEST_NAME:
    # The number of times that the repeated Python upgrade dtest should be run
    REPEATED_UPGRADE_DTEST_COUNT: 100
    # Whether the test iteration should stop on the first failure
    REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE: false

    # The name of JVM upgrade dtest class to be run multiple times, for example:
    # REPEATED_JVM_UPGRADE_DTEST_CLASS: org.apache.cassandra.distributed.upgrade.MixedModeAvailabilityV30Test
    REPEATED_JVM_UPGRADE_DTEST_CLASS:
    # The optional specific methods within REPEATED_JVM_UPGRADE_DTEST_CLASS to be run, for example:
    # REPEATED_JVM_UPGRADE_DTEST_METHODS: testAvailabilityV30ToV3X
    # REPEATED_JVM_UPGRADE_DTEST_METHODS: testAvailabilityV30ToV3X,testAvailabilityV30ToV4
    REPEATED_JVM_UPGRADE_DTEST_METHODS:
    # The number of times that the repeated JVM upgrade dtest should be run
    REPEATED_JVM_UPGRADE_DTEST_COUNT: 100
    # Whether the JVM upgrade dtest iteration should stop on the first failure
    REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE: false

j8_par_executor: &j8_par_executor
  executor:
    name: java8-executor
    #exec_resource_class: xlarge
  parallelism: 4

j8_small_par_executor: &j8_small_par_executor
  executor:
    name: java8-executor
    #exec_resource_class: xlarge
  parallelism: 1

j8_medium_par_executor: &j8_medium_par_executor
  executor:
    name: java8-executor
    #exec_resource_class: xlarge
  parallelism: 1

j8_seq_executor: &j8_seq_executor
  executor:
    name: java8-executor
    #exec_resource_class: xlarge
  parallelism: 1 # sequential, single container tests: no parallelism benefits

j8_repeated_utest_executor: &j8_repeated_utest_executor
  executor:
    name: java8-executor
  parallelism: 4

j8_repeated_dtest_executor: &j8_repeated_dtest_executor
  executor:
    name: java8-executor
  parallelism: 4

j8_repeated_upgrade_dtest_executor: &j8_repeated_upgrade_dtest_executor
  executor:
    name: java8-executor
  parallelism: 4

j8_repeated_jvm_upgrade_dtest_executor: &j8_repeated_jvm_upgrade_dtest_executor
  executor:
    name: java8-executor
  parallelism: 4

with_dtests_jobs: &with_dtest_jobs
  jobs:
    - start_build:
        type: approval
    - build:
        requires:
          - start_build
    # Java 8 unit tests
    - 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
    # specialized unit tests (all run using Java 8)
    - 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_utests_stress:
        type: approval
    - utests_stress:
        requires:
          - start_utests_stress
          - build
    - start_j8_dtest_jars_build:
        type: approval
    - j8_dtest_jars_build:
        requires:
          - build
          - start_j8_dtest_jars_build
    - start_jvm_upgrade_dtest:
        type: approval
    - j8_jvm_upgrade_dtests:
        requires:
          - start_jvm_upgrade_dtest
          - j8_dtest_jars_build
    # Java 8 dtests
    - start_j8_dtests:
        type: approval
    - j8_dtests-with-vnodes:
        requires:
          - start_j8_dtests
          - build
    - j8_dtests-no-vnodes:
        requires:
          - start_j8_dtests
          - build
    # Java 8 upgrade tests
    - start_upgrade_tests:
        type: approval
    - j8_upgradetests-no-vnodes:
        requires:
          - start_upgrade_tests
          - build
    # Java 8 repeated utest
    - start_j8_repeated_utest:
        type: approval
    - j8_repeated_utest:
        requires:
          - start_j8_repeated_utest
          - build
    # Java 8 repeated dtest
    - start_j8_repeated_dtest:
        type: approval
    - j8_repeated_dtest:
        requires:
          - start_j8_repeated_dtest
          - build
    # Repeated Python upgrade dtest
    - start_repeated_upgrade_dtest:
        type: approval
    - repeated_upgrade_dtest:
        requires:
          - start_repeated_upgrade_dtest
          - build
    # Repeated JVM upgrade dtest
    - start_repeated_jvm_upgrade_dtest:
        type: approval
    - repeated_jvm_upgrade_dtest:
        requires:
          - start_repeated_jvm_upgrade_dtest
          - j8_dtest_jars_build

pre-commit_jobs: &pre-commit_jobs
  jobs:
    - start_pre-commit_tests:
        type: approval
    - build:
        requires:
          - start_pre-commit_tests
    # Java 8 unit tests
    - j8_unit_tests:
        requires:
          - build
    - j8_jvm_dtests:
        requires:
          - build
    # specialized unit tests (all run on request using Java 8)
    - 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_utests_stress:
        type: approval
    - utests_stress:
        requires:
          - start_utests_stress
          - build
    - start_j8_dtest_jars_build:
        type: approval
    - j8_dtest_jars_build:
        requires:
          - build
          - start_j8_dtest_jars_build
    - start_jvm_upgrade_dtest:
        type: approval
    - j8_jvm_upgrade_dtests:
        requires:
          - start_jvm_upgrade_dtest
          - j8_dtest_jars_build
    # Java 8 dtests
    - j8_dtests-with-vnodes:
        requires:
          - build
    - j8_dtests-no-vnodes:
        requires:
          - build
    # Java 8 upgrade tests (on request)
    - start_upgrade_tests:
        type: approval
    - j8_upgradetests-no-vnodes:
        requires:
          - start_upgrade_tests
          - build
    # Java 8 repeated utest (on request)
    - start_j8_repeated_utest:
        type: approval
    - j8_repeated_utest:
        requires:
          - start_j8_repeated_utest
          - build
    # Java 8 repeated dtest (on request)
    - start_j8_repeated_dtest:
        type: approval
    - j8_repeated_dtest:
        requires:
          - start_j8_repeated_dtest
          - build
    # Repeated Python upgrade dtest (on request)
    - start_repeated_upgrade_dtest:
        type: approval
    - repeated_upgrade_dtest:
        requires:
          - start_repeated_upgrade_dtest
          - build
    # Repeated JVM upgrade dtest (on request)
    - start_repeated_jvm_upgrade_dtest:
        type: approval
    - repeated_jvm_upgrade_dtest:
        requires:
          - start_repeated_jvm_upgrade_dtest
          - j8_dtest_jars_build

workflows:
    version: 2
    separate_tests: *with_dtest_jobs
    pre-commit_tests: *pre-commit_jobs

executors:
  java8-executor:
    parameters:
      exec_resource_class:
        type: string
        default: medium
    docker:
      - image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:latest
    resource_class: << parameters.exec_resource_class >>
    working_directory: ~/
    shell: /bin/bash -eo pipefail -l
    environment:
      <<: *default_env_vars
      JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
      JDK_HOME: /usr/lib/jvm/java-8-openjdk-amd64

jobs:
  build:
    executor: java8-executor
    parallelism: 1 # This job doesn't benefit from parallelism
    steps:
      - log_environment
      - clone_cassandra
      - build_cassandra
      - run_eclipse_warnings
      - persist_to_workspace:
            root: /home/cassandra
            paths:
                - cassandra
                - .m2

  j8_dtest_jars_build:
    executor: java8-executor
    parallelism: 1
    steps:
      - attach_workspace:
          at: /home/cassandra
      - build_cassandra_dtest_jars
      - persist_to_workspace:
          root: /home/cassandra
          paths:
            - dtest_jars

  j8_unit_tests:
    <<: *j8_par_executor
    steps:
      - attach_workspace:
          at: /home/cassandra
      - create_junit_containers
      - log_environment
      - run_parallel_junit_tests

  j8_jvm_dtests:
    <<: *j8_small_par_executor
    steps:
      - attach_workspace:
          at: /home/cassandra
      - create_junit_containers:
          classlistprefix: distributed
          extra_filters: "| grep -v upgrade"
      - log_environment
      - run_parallel_junit_tests:
          classlistprefix: distributed

  j8_jvm_upgrade_dtests:
    <<: *j8_medium_par_executor
    steps:
      - attach_workspace:
          at: /home/cassandra
      - create_junit_containers:
          classlistprefix: distributed
          extra_filters: "| grep upgrade"
      - log_environment
      - run_parallel_junit_tests:
          classlistprefix: distributed

  utests_long:
    <<: *j8_seq_executor
    steps:
      - attach_workspace:
          at: /home/cassandra
      - run_junit_tests:
          target: long-test

  utests_compression:
    <<: *j8_par_executor
    steps:
      - attach_workspace:
          at: /home/cassandra
      - create_junit_containers
      - log_environment
      - run_parallel_junit_tests:
          target: testclasslist-compression

  utests_stress:
    <<: *j8_seq_executor
    steps:
      - attach_workspace:
          at: /home/cassandra
      - run_junit_tests:
          target: stress-test

  j8_dtests-with-vnodes:
    <<: *j8_par_executor
    steps:
      - attach_workspace:
          at: /home/cassandra
      - clone_dtest
      - create_venv
      - create_dtest_containers:
          file_tag: j8_with_vnodes
          run_dtests_extra_args: '--use-vnodes --skip-resource-intensive-tests'
      - run_dtests:
          file_tag: j8_with_vnodes
          pytest_extra_args: '--use-vnodes --num-tokens=32 --skip-resource-intensive-tests'

  j8_dtests-no-vnodes:
    <<: *j8_par_executor
    steps:
      - attach_workspace:
          at: /home/cassandra
      - clone_dtest
      - create_venv
      - create_dtest_containers:
          file_tag: j8_without_vnodes
          run_dtests_extra_args: '--skip-resource-intensive-tests'
      - run_dtests:
          file_tag: j8_without_vnodes
          pytest_extra_args: '--skip-resource-intensive-tests'

  j8_upgradetests-no-vnodes:
    <<: *j8_par_executor
    steps:
      - attach_workspace:
          at: /home/cassandra
      - clone_dtest
      - create_venv
      - create_dtest_containers:
          file_tag: j8_upgradetests_without_vnodes
          run_dtests_extra_args: '--execute-upgrade-tests'
          extra_env_args: 'RUN_STATIC_UPGRADE_MATRIX=true'
          tests_filter_pattern: '^upgrade_tests'
      - run_dtests:
          file_tag: j8_upgradetests_without_vnodes
          extra_env_args: 'RUN_STATIC_UPGRADE_MATRIX=true'
          pytest_extra_args: '--execute-upgrade-tests'

  j8_repeated_utest:
    <<: *j8_repeated_utest_executor
    steps:
      - attach_workspace:
          at: /home/cassandra
      - log_environment
      - run_repeated_utest:
          target: ${REPEATED_UTEST_TARGET}
          class: ${REPEATED_UTEST_CLASS}
          methods: ${REPEATED_UTEST_METHODS}
          count: ${REPEATED_UTEST_COUNT}
          stop_on_failure: ${REPEATED_UTEST_STOP_ON_FAILURE}

  j8_repeated_dtest:
    <<: *j8_repeated_dtest_executor
    steps:
      - attach_workspace:
          at: /home/cassandra
      - clone_dtest
      - create_venv
      - run_repeated_dtest:
          tests: ${REPEATED_DTEST_NAME}
          vnodes: ${REPEATED_DTEST_VNODES}
          upgrade: "false"
          count: ${REPEATED_DTEST_COUNT}
          stop_on_failure: ${REPEATED_DTEST_STOP_ON_FAILURE}

  repeated_jvm_upgrade_dtest:
    <<: *j8_repeated_jvm_upgrade_dtest_executor
    steps:
      - attach_workspace:
          at: /home/cassandra
      - log_environment
      - run_repeated_utest:
          target: test-jvm-dtest-some
          class: ${REPEATED_JVM_UPGRADE_DTEST_CLASS}
          methods: ${REPEATED_JVM_UPGRADE_DTEST_METHODS}
          count: ${REPEATED_JVM_UPGRADE_DTEST_COUNT}
          stop_on_failure: ${REPEATED_JVM_UPGRADE_DTEST_STOP_ON_FAILURE}

  repeated_upgrade_dtest:
    <<: *j8_repeated_upgrade_dtest_executor
    steps:
      - attach_workspace:
          at: /home/cassandra
      - clone_dtest
      - create_venv
      - run_repeated_dtest:
          tests: ${REPEATED_UPGRADE_DTEST_NAME}
          vnodes: "false"
          upgrade: "true"
          stop_on_failure: ${REPEATED_UPGRADE_DTEST_STOP_ON_FAILURE}
          count: ${REPEATED_UPGRADE_DTEST_COUNT}

commands:
  log_environment:
    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

  clone_cassandra:
    steps:
    - 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

  clone_dtest:
    steps:
    - run:
        name: Clone Cassandra dtest Repository (via git)
        command: |
          git clone --single-branch --branch $DTEST_BRANCH --depth 1 $DTEST_REPO ~/cassandra-dtest

  build_cassandra:
    steps:
    - 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

  build_cassandra_dtest_jars:
    steps:
    - 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

  run_eclipse_warnings:
    steps:
    - run:
        name: Run eclipse-warnings
        command: |
          export PATH=$JAVA_HOME/bin:$PATH
          cd ~/cassandra
          ant eclipse-warnings

  create_junit_containers:
    parameters:
      classlistprefix:
        type: string
        default: unit
      extra_filters:
        type: string
        default: ""
    steps:
    - run:
        name: Determine <<parameters.classlistprefix>> 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/<<parameters.classlistprefix>>/**/*.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/<<parameters.classlistprefix>>/;;g" | grep "Test\.java$" <<parameters.extra_filters>> > /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_junit_tests:
    parameters:
      target:
        type: string
      no_output_timeout:
        type: string
        default: 15m
      classlistprefix:
        type: string
        default: unit
    steps:
    - run:
        name: Run Unit Tests (<<parameters.target>>)
        # Please note that we run `clean` and therefore rebuild the project, as we can't run tests on Java 8 in case
        # based on Java 11 builds.
        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 <<parameters.target>> -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=<<parameters.classlistprefix>>
        no_output_timeout: <<parameters.no_output_timeout>>
    - 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

  run_parallel_junit_tests:
    parameters:
      target:
        type: string
        default: testclasslist
      no_output_timeout:
        type: string
        default: 15m
      classlistprefix:
        type: string
        default: unit
    steps:
    - run:
        name: Run Unit Tests (<<parameters.target>>)
        # Please note that we run `clean` and therefore rebuild the project, as we can't run tests on Java 8 in case
        # based on Java 11 builds.
        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.<<parameters.classlistprefix>>.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 <<parameters.target>> -Dtest.timeout="$test_timeout" -Dtest.classlistfile=/tmp/java_tests_${CIRCLE_NODE_INDEX}_final.txt  -Dtest.classlistprefix=<<parameters.classlistprefix>>
        no_output_timeout: <<parameters.no_output_timeout>>
    - 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

  create_venv:
    steps:
    - 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

  create_dtest_containers:
    parameters:
      file_tag:
        type: string
      run_dtests_extra_args:
        type: string
        default: ''
      extra_env_args:
        type: string
        default: ''
      tests_filter_pattern:
        type: string
        default: ''
    steps:
    - run:
        name: Determine Tests to Run (<<parameters.file_tag>>)
        no_output_timeout: 5m
        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.

          cd cassandra-dtest
          source ~/env3.6/bin/activate
          export PATH=$JAVA_HOME/bin:$PATH

          if [ -n '<<parameters.extra_env_args>>' ]; then
            export <<parameters.extra_env_args>>
          fi

          echo "***Collected DTests (<<parameters.file_tag>>)***"
          set -eo pipefail && ./run_dtests.py <<parameters.run_dtests_extra_args>> --dtest-print-tests-only --dtest-print-tests-output=/tmp/all_dtest_tests_<<parameters.file_tag>>_raw --cassandra-dir=../cassandra
          if [ -z '<<parameters.tests_filter_pattern>>' ]; then
            mv /tmp/all_dtest_tests_<<parameters.file_tag>>_raw /tmp/all_dtest_tests_<<parameters.file_tag>>
          else
            grep -e '<<parameters.tests_filter_pattern>>' /tmp/all_dtest_tests_<<parameters.file_tag>>_raw > /tmp/all_dtest_tests_<<parameters.file_tag>> || { echo "Filter did not match any tests! Exiting build."; exit 0; }
          fi
          set -eo pipefail && circleci tests split --split-by=timings --timings-type=classname /tmp/all_dtest_tests_<<parameters.file_tag>> > /tmp/split_dtest_tests_<<parameters.file_tag>>.txt
          cat /tmp/split_dtest_tests_<<parameters.file_tag>>.txt | tr '\n' ' ' > /tmp/split_dtest_tests_<<parameters.file_tag>>_final.txt
          cat /tmp/split_dtest_tests_<<parameters.file_tag>>_final.txt

  run_dtests:
    parameters:
      file_tag:
        type: string
      pytest_extra_args:
        type: string
        default: ''
      extra_env_args:
        type: string
        default: ''
    steps:
      - run:
          name: Run dtests (<<parameters.file_tag>>)
          no_output_timeout: 15m
          command: |
            echo "cat /tmp/split_dtest_tests_<<parameters.file_tag>>_final.txt"
            cat /tmp/split_dtest_tests_<<parameters.file_tag>>_final.txt

            source ~/env3.6/bin/activate
            export PATH=$JAVA_HOME/bin:$PATH
            if [ -n '<<parameters.extra_env_args>>' ]; then
              export <<parameters.extra_env_args>>
            fi

            java -version
            cd ~/cassandra-dtest
            mkdir -p /tmp/dtest

            echo "env: $(env)"
            echo "** done env"
            mkdir -p /tmp/results/dtests
            # 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
            export SPLIT_TESTS=`cat /tmp/split_dtest_tests_<<parameters.file_tag>>_final.txt`
            set -o pipefail && cd ~/cassandra-dtest && pytest <<parameters.pytest_extra_args>> --log-level="INFO" --junit-xml=/tmp/results/dtests/pytest_result_<<parameters.file_tag>>.xml -s --cassandra-dir=/home/cassandra/cassandra --keep-test-dir $SPLIT_TESTS 2>&1 | tee /tmp/dtest/stdout.txt
      - store_test_results:
          path: /tmp/results
      - store_artifacts:
          path: /tmp/dtest
          destination: dtest_<<parameters.file_tag>>
      - store_artifacts:
          path: ~/cassandra-dtest/logs
          destination: dtest_<<parameters.file_tag>>_logs

  run_repeated_utest:
    parameters:
      target:
        type: string
      class:
        type: string
      methods:
        type: string
      count:
        type: string
      stop_on_failure:
        type: string
    steps:
      - run:
          name: Run repeated JUnit test
          no_output_timeout: 15m
          command: |
            if [ "<<parameters.class>>" == "<nil>" ]; then
              echo "Repeated utest class name hasn't been defined, exiting without running any test"
            elif [ "<<parameters.count>>" == "<nil>" ]; then
              echo "Repeated utest count hasn't been defined, exiting without running any test"
            elif [ "<<parameters.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=$((<<parameters.count>> / CIRCLE_NODE_TOTAL))
              if (($CIRCLE_NODE_INDEX < (<<parameters.count>> % CIRCLE_NODE_TOTAL))); then
                count=$((count+1))
              fi

              if (($count <= 0)); then
                echo "No tests to run in this runner"
              else
                echo "Running <<parameters.target>> <<parameters.class>> <<parameters.methods>> <<parameters.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=<<parameters.target>>
                class_path=<<parameters.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" ]]; then
                  name="-Dtest.name=$class_name"
                else
                  name="-Dtest.name=$class_path"
                fi

                # Prepare the -Dtest.methods argument, which is optional
                if [ "<<parameters.methods>>" == "<nil>" ]; then
                  methods=""
                else
                  methods="-Dtest.methods=<<parameters.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/<<parameters.target>>-<<parameters.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 [[ <<parameters.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

  run_repeated_dtest:
    parameters:
      tests:
        type: string
      vnodes:
        type: string
      upgrade:
        type: string
      count:
        type: string
      stop_on_failure:
        type: string
    steps:
      - run:
          name: Run repeated Python dtest
          no_output_timeout: 15m
          command: |
            if [ "<<parameters.tests>>" == "<nil>" ]; then
              echo "Repeated dtest name hasn't been defined, exiting without running any test"
            elif [ "<<parameters.count>>" == "<nil>" ]; then
              echo "Repeated dtest count hasn't been defined, exiting without running any test"
            elif [ "<<parameters.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=$((<<parameters.count>> / CIRCLE_NODE_TOTAL))
              if (($CIRCLE_NODE_INDEX < (<<parameters.count>> % CIRCLE_NODE_TOTAL))); then
                count=$((count+1))
              fi

              if (($count <= 0)); then
                echo "No tests to run in this runner"
              else
                echo "Running <<parameters.tests>> $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

                stop_on_failure_arg=""
                if <<parameters.stop_on_failure>>; then
                  stop_on_failure_arg="-x"
                fi

                vnodes_args=""
                if <<parameters.vnodes>>; then
                  vnodes_args="--use-vnodes --num-tokens=16"
                fi

                upgrade_arg=""
                if <<parameters.upgrade>>; then
                  upgrade_arg="--execute-upgrade-tests"
                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 <<parameters.tests>> | 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
