From 30dc2ff754bf0c1e7e4aab024f9ecd33eb237c94 Mon Sep 17 00:00:00 2001 From: alexradzin Date: Thu, 16 Nov 2023 18:18:44 +0200 Subject: [PATCH] integration tests --- .github/workflows/integration-test-v1.yml | 95 +++++++++++++++ .github/workflows/integration-test-v2.yml | 100 ++++++++++++++++ .github/workflows/integration-test.yml | 136 +++++----------------- 3 files changed, 224 insertions(+), 107 deletions(-) create mode 100644 .github/workflows/integration-test-v1.yml create mode 100644 .github/workflows/integration-test-v2.yml diff --git a/.github/workflows/integration-test-v1.yml b/.github/workflows/integration-test-v1.yml new file mode 100644 index 000000000..ecbbde51a --- /dev/null +++ b/.github/workflows/integration-test-v1.yml @@ -0,0 +1,95 @@ +name: Run integration tests v1 + +on: + workflow_dispatch: + inputs: + database: + description: 'Database - a new one will be created if not provided' + required: false + default: '' + engine: + description: 'Engine - a new one will be created if not provided' + required: false + environment: + description: 'Environment to run the tests against' + type: choice + required: true + default: 'staging' + options: + - dev + - staging + +jobs: + run-integration-tests: + runs-on: ubuntu-latest + + steps: + - name: Validate database and engine + if: ${{ (github.event.inputs.database == '') != (github.event.inputs.engine == '') }} + uses: actions/github-script@v3 + with: + script: | + core.setFailed("Database and Engine parameters should be provided simultaneously") + + - name: "Foresight: Collect Workflow Telemetry" + uses: runforesight/foresight-workflow-kit-action@v1 + if: ${{ always() }} + - name: Check out code + uses: actions/checkout@v3 + + - name: Prepare java + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: '17' + - name: Determine env variables + run: | + if [ "${{ github.event.inputs.environment }}" == 'staging' ]; then + echo "USERNAME=${{ secrets.FIREBOLT_USERNAME_STAGING }}" >> "$GITHUB_ENV" + echo "PASSWORD=${{ secrets.FIREBOLT_PASSWORD_STAGING }}" >> "$GITHUB_ENV" + else + echo "USERNAME=${{ secrets.FIREBOLT_USERNAME_DEV }}" >> "$GITHUB_ENV" + echo "PASSWORD=${{ secrets.FIREBOLT_PASSWORD_DEV }}" >> "$GITHUB_ENV" + fi + - name: Setup database and engine + id: setup + if: ${{ github.event.inputs.database == '' }} + uses: firebolt-db/integration-testing-setup@v1 + with: + firebolt-username: ${{ env.USERNAME }} + firebolt-password: ${{ env.PASSWORD }} + api-endpoint: "api.${{ github.event.inputs.environment }}.firebolt.io" + region: "us-east-1" + instance-type: "B2" + + - name: Determine database name + id: find-database-name + run: | + if ! [[ -z "${{ github.event.inputs.database }}" ]]; then + echo "database_name=${{ github.event.inputs.database }}" >> $GITHUB_OUTPUT + else + echo "database_name=${{ steps.setup.outputs.database_name }}" >> $GITHUB_OUTPUT + fi + + - name: Determine engine name + id: find-engine-name + run: | + if ! [[ -z "${{ github.event.inputs.engine }}" ]]; then + echo "engine_name=${{ github.event.inputs.engine }}" >> $GITHUB_OUTPUT + else + echo "engine_name=${{ steps.setup.outputs.engine_name }}" >> $GITHUB_OUTPUT + fi + + - name: Run integration tests + run: ./gradlew integrationTest -Ddb=${{ steps.find-database-name.outputs.database_name }} -Dapi=api.${{ github.event.inputs.environment }}.firebolt.io -Dpassword="${{ env.PASSWORD }}" -Duser="${{ env.USERNAME }}" -Dengine="${{ steps.find-engine-name.outputs.engine_name }}" + + - name: "Foresight: Analyze Test Results" + uses: runforesight/foresight-test-kit-action@v1 + if: success() || failure() + with: + test_format: JUNIT + test_framework: JUNIT + test_path: ./build/test-results/ + tags: | + type:"integration" + language:"Java" diff --git a/.github/workflows/integration-test-v2.yml b/.github/workflows/integration-test-v2.yml new file mode 100644 index 000000000..184a6bc7e --- /dev/null +++ b/.github/workflows/integration-test-v2.yml @@ -0,0 +1,100 @@ +name: Run integration tests v2 + +on: + workflow_dispatch: + inputs: + database: + description: 'Database - a new one will be created if not provided' + required: false + default: '' + engine: + description: 'Engine - a new one will be created if not provided' + required: false + account: + description: 'Account' + required: true + default: 'developer' + environment: + description: 'Environment to run the tests against' + type: choice + required: true + default: 'staging' + options: + - dev + - staging + +jobs: + run-integration-tests: + runs-on: ubuntu-latest + + steps: + - name: Validate database and engine + if: ${{ (github.event.inputs.database == '') != (github.event.inputs.engine == '') }} + uses: actions/github-script@v3 + with: + script: | + core.setFailed("Database and Engine parameters should be provided simultaneously") + + - name: "Foresight: Collect Workflow Telemetry" + uses: runforesight/foresight-workflow-kit-action@v1 + if: ${{ always() }} + - name: Check out code + uses: actions/checkout@v3 + + - name: Prepare java + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: '17' + - name: Determine env variables + run: | + if [ "${{ github.event.inputs.environment }}" == 'staging' ]; then + echo "SERVICE_ACCOUNT_ID=${{ secrets.FIREBOLT_CLIENT_ID_STG_NEW_IDN }}" >> "$GITHUB_ENV" + echo "SERVICE_ACCOUNT_SECRET=${{ secrets.FIREBOLT_CLIENT_SECRET_STG_NEW_IDN }}" >> "$GITHUB_ENV" + else + echo "SERVICE_ACCOUNT_ID=${{ secrets.FIREBOLT_CLIENT_ID_NEW_IDN }}" >> "$GITHUB_ENV" + echo "SERVICE_ACCOUNT_SECRET=${{ secrets.FIREBOLT_CLIENT_SECRET_NEW_IDN }}" >> "$GITHUB_ENV" + fi + + - name: Setup database and engine + id: setup + if: ${{ github.event.inputs.database == '' }} + uses: firebolt-db/integration-testing-setup@v2 + with: + firebolt-client-id: ${{ env.SERVICE_ACCOUNT_ID }} + firebolt-client-secret: ${{ env.SERVICE_ACCOUNT_SECRET }} + account: ${{ github.event.inputs.account }} + api-endpoint: "api.${{ github.event.inputs.environment }}.firebolt.io" + instance-type: "B2" + + - name: Determine database name + id: find-database-name + run: | + if ! [[ -z "${{ github.event.inputs.database }}" ]]; then + echo "database_name=${{ github.event.inputs.database }}" >> $GITHUB_OUTPUT + else + echo "database_name=${{ steps.setup.outputs.database_name }}" >> $GITHUB_OUTPUT + fi + + - name: Determine engine name + id: find-engine-name + run: | + if ! [[ -z "${{ github.event.inputs.engine }}" ]]; then + echo "engine_name=${{ github.event.inputs.engine }}" >> $GITHUB_OUTPUT + else + echo "engine_name=${{ steps.setup.outputs.engine_name }}" >> $GITHUB_OUTPUT + fi + + - name: Run integration tests + run: ./gradlew integrationTest -Ddb=${{ steps.find-database-name.outputs.database_name }} -Denv=${{ github.event.inputs.environment }} -Dclient_secret="${{ env.SERVICE_ACCOUNT_SECRET }}" -Dclient_id="${{ env.SERVICE_ACCOUNT_ID }}" -Daccount="${{ github.event.inputs.account }}" -Dengine="${{ steps.find-engine-name.outputs.engine_name }}" + + - name: "Foresight: Analyze Test Results" + uses: runforesight/foresight-test-kit-action@v1 + if: success() || failure() + with: + test_format: JUNIT + test_framework: JUNIT + test_path: ./build/test-results/ + tags: | + type:"integration" + language:"Java" diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index 07f1bc589..6d0fad736 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -11,6 +11,9 @@ on: description: 'Database (v2) - a new one will be created if not provided' required: false default: '' + engine1: + description: 'Engine (v1) - a new one will be created if not provided' + required: false engine2: description: 'Engine (v2) - a new one will be created if not provided' required: false @@ -26,117 +29,36 @@ on: options: - dev - staging + run-v1: + description: 'Run tests against Firebolt DB v1' + required: true + default: true + run-v2: + description: 'Run tests against Firebolt DB v2' + required: true + default: true jobs: - run-integration-tests: + run-integration-tests1: runs-on: ubuntu-latest - steps: - - name: Validate database and engine - if: ${{ (github.event.inputs.database2 == '') != (github.event.inputs.engine2 == '') }} - uses: actions/github-script@v3 - with: - script: | - core.setFailed("Database and Engine parameters should be provided simultaneously") - - - name: "Foresight: Collect Workflow Telemetry" - uses: runforesight/foresight-workflow-kit-action@v1 - if: ${{ always() }} - - name: Check out code - uses: actions/checkout@v3 - - - name: Prepare java - uses: actions/setup-java@v3 - with: - distribution: 'zulu' - java-version: '11' - - name: Determine env variables (v1) - run: | - if [ "${{ github.event.inputs.environment }}" == 'staging' ]; then - echo "USERNAME=${{ secrets.FIREBOLT_USERNAME_STAGING }}" >> "$GITHUB_ENV" - echo "PASSWORD=${{ secrets.FIREBOLT_PASSWORD_STAGING }}" >> "$GITHUB_ENV" - echo "SERVICE_ACCOUNT_ID=${{ secrets.SERVICE_ACCOUNT_ID_STAGING }}" >> "$GITHUB_ENV" - echo "SERVICE_ACCOUNT_SECRET=${{ secrets.SERVICE_ACCOUNT_SECRET_STAGING }}" >> "$GITHUB_ENV" - else - echo "USERNAME=${{ secrets.FIREBOLT_USERNAME_DEV }}" >> "$GITHUB_ENV" - echo "PASSWORD=${{ secrets.FIREBOLT_PASSWORD_DEV }}" >> "$GITHUB_ENV" - echo "SERVICE_ACCOUNT_ID=${{ secrets.SERVICE_ACCOUNT_ID_DEV }}" >> "$GITHUB_ENV" - echo "SERVICE_ACCOUNT_SECRET=${{ secrets.SERVICE_ACCOUNT_SECRET_DEV }}" >> "$GITHUB_ENV" - fi - - name: Setup database and engine (v1) - id: setup1 - if: ${{ github.event.inputs.database1 == '' }} - uses: firebolt-db/integration-testing-setup@v1 + - name: Run integration tests v1 + id: integration-tests-v1 + if: ${{ github.event.inputs.run-v1 == '' }} + uses: integration-test-v1.yml with: - firebolt-username: ${{ env.USERNAME }} - firebolt-password: ${{ env.PASSWORD }} - api-endpoint: "api.${{ github.event.inputs.environment }}.firebolt.io" - region: "us-east-1" - instance-type: "B2" - - - name: Determine database (v1) name - id: find-database-name1 - run: | - if ! [[ -z "${{ github.event.inputs.database1 }}" ]]; then - echo "database_name=${{ github.event.inputs.database1 }}" >> $GITHUB_OUTPUT - else - echo "database_name=${{ steps.setup1.outputs.database_name }}" >> $GITHUB_OUTPUT - fi - - - name: Run integration tests (v1) - run: ./gradlew integrationTest -Ddb=${{ steps.find-database-name1.outputs.database_name }} -Dapi=api.${{ github.event.inputs.environment }}.firebolt.io -Dpassword="${{ env.SERVICE_ACCOUNT_SECRET }}" -Duser="${{ env.SERVICE_ACCOUNT_ID }}" -DincludeTags="common,v1" + database: ${{ github.event.inputs.database1 }} + engine: ${{ github.event.inputs.engine1 }} + environment: ${{ github.event.inputs.environment }} - - - name: Determine env variables (v2) - run: | - if [ "${{ github.event.inputs.environment }}" == 'staging' ]; then - echo "SERVICE_ACCOUNT_ID=${{ secrets.FIREBOLT_CLIENT_ID_STG_NEW_IDN }}" >> "$GITHUB_ENV" - echo "SERVICE_ACCOUNT_SECRET=${{ secrets.FIREBOLT_CLIENT_SECRET_STG_NEW_IDN }}" >> "$GITHUB_ENV" - else - echo "SERVICE_ACCOUNT_ID=${{ secrets.FIREBOLT_CLIENT_ID_NEW_IDN }}" >> "$GITHUB_ENV" - echo "SERVICE_ACCOUNT_SECRET=${{ secrets.FIREBOLT_CLIENT_SECRET_NEW_IDN }}" >> "$GITHUB_ENV" - fi - - - name: Setup database and engine (v2) - id: setup2 - if: ${{ github.event.inputs.database2 == '' }} - uses: firebolt-db/integration-testing-setup@v2 - with: - firebolt-client-id: ${{ env.SERVICE_ACCOUNT_ID }} - firebolt-client-secret: ${{ env.SERVICE_ACCOUNT_SECRET }} - account: ${{ github.event.inputs.account }} - api-endpoint: "api.${{ github.event.inputs.environment }}.firebolt.io" - instance-type: "B2" - engine-scale: 1 - - - name: Determine database (v2) name - id: find-database-name2 - run: | - if ! [[ -z "${{ github.event.inputs.database2 }}" ]]; then - echo "database_name=${{ github.event.inputs.database2 }}" >> $GITHUB_OUTPUT - else - echo "database_name=${{ steps.setup2.outputs.database_name }}" >> $GITHUB_OUTPUT - fi - - - name: Determine engine (v2) name - id: find-engine-name2 - run: | - if ! [[ -z "${{ github.event.inputs.engine2 }}" ]]; then - echo "engine_name=${{ github.event.inputs.engine2 }}" >> $GITHUB_OUTPUT - else - echo "engine_name=${{ steps.setup2.outputs.engine_name }}" >> $GITHUB_OUTPUT - fi - - - name: Run integration tests (v2) - run: ./gradlew integrationTest -Ddb=${{ steps.find-database-name2.outputs.database_name }} -Denv=${{ github.event.inputs.environment }} -Dclient_secret="${{ env.SERVICE_ACCOUNT_SECRET }}" -Dclient_id="${{ env.SERVICE_ACCOUNT_ID }}" -Daccount="${{ github.event.inputs.account }}" -Dengine="${{ steps.find-engine-name2.outputs.engine_name }}" -DincludeTags="common,v2" - - - name: "Foresight: Analyze Test Results" - uses: runforesight/foresight-test-kit-action@v1 - if: success() || failure() + run-integration-tests2: + runs-on: ubuntu-latest + steps: + - name: Run integration tests v2 + id: integration-tests-v2 + if: ${{ github.event.inputs.run-v2 == '' }} + uses: integration-test-v2.yml with: - test_format: JUNIT - test_framework: JUNIT - test_path: ./build/test-results/ - tags: | - type:"integration" - language:"Java" + database: ${{ github.event.inputs.database2 }} + engine: ${{ github.event.inputs.engine2 }} + environment: ${{ github.event.inputs.environment }}