#
# 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_j8_dtest_jars_build:
        type: approval
    - j8_dtest_jars_build:
        requires:
          - start_j8_dtest_jars_build
          - 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 will be run automatically
    - 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_j8_dtest_jars_build:
        type: approval
    - j8_dtest_jars_build:
        requires:
          - start_j8_dtest_jars_build
          - 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_seq_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_seq_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

  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
    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 clean <<parameters.target>>
        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
