From 9997a9a682ed986fc2bf881b834fde559cf05637 Mon Sep 17 00:00:00 2001 From: neha-Gupta1 Date: Thu, 30 Mar 2023 16:16:27 +0530 Subject: [PATCH] add nightly test --- .github/workflows/_setup_m365_app.yml | 40 +++++++++++ .github/workflows/ci.yml | 70 ++++++++++++++++++- ...intergration-test.yml => nightly-test.yml} | 39 ++--------- 3 files changed, 114 insertions(+), 35 deletions(-) create mode 100644 .github/workflows/_setup_m365_app.yml rename .github/workflows/{intergration-test.yml => nightly-test.yml} (78%) diff --git a/.github/workflows/_setup_m365_app.yml b/.github/workflows/_setup_m365_app.yml new file mode 100644 index 000000000..59c3891fa --- /dev/null +++ b/.github/workflows/_setup_m365_app.yml @@ -0,0 +1,40 @@ +name: Filechange Checker + +on: + workflow_call: + outputs: + environment: Testing + runs-on: ubuntu-latest + outputs: + client_app_slot: ${{ steps.roundrobin.outputs.CLIENT_APP_SLOT }} + client_id_env: ${{ steps.roundrobin.outputs.CLIENT_ID_ENV }} + client_secret_env: ${{ steps.roundrobin.outputs.CLIENT_SECRET_ENV }} + +jobs: + SetM365App: + steps: + - name: Figure out which client id to use + id: roundrobin + run: | + slot=$((GITHUB_RUN_NUMBER % 4)) + echo "CLIENT_APP_SLOT=$slot" >> $GITHUB_OUTPUT + + case $slot in + + 0) + echo "CLIENT_ID_ENV=CLIENT_ID" >> $GITHUB_OUTPUT + echo "CLIENT_SECRET_ENV=CLIENT_SECRET" >> $GITHUB_OUTPUT + ;; + 1) + echo "CLIENT_ID_ENV=CLIENT_ID_2" >> $GITHUB_OUTPUT + echo "CLIENT_SECRET_ENV=CLIENT_SECRET_2" >> $GITHUB_OUTPUT + ;; + 2) + echo "CLIENT_ID_ENV=CLIENT_ID_3" >> $GITHUB_OUTPUT + echo "CLIENT_SECRET_ENV=CLIENT_SECRET_3" >> $GITHUB_OUTPUT + ;; + 3) + echo "CLIENT_ID_ENV=CLIENT_ID_4" >> $GITHUB_OUTPUT + echo "CLIENT_SECRET_ENV=CLIENT_SECRET_4" >> $GITHUB_OUTPUT + ;; + esac diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e6df363ed..a402b946d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -152,9 +152,77 @@ jobs: version: ${{ needs.SetEnv.outputs.version }} # ---------------------------------------------------------------------------------------------------- - # --- Unit Testing ------------------------------------------------------------------- + # --- Integration and Unit Testing ------------------------------------------------------------------- # ---------------------------------------------------------------------------------------------------- + Test-Suite-Trusted: + needs: [Precheck, Checkout, SetM365App] + environment: Testing + runs-on: ubuntu-latest + if: (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/main') || (needs.precheck.outputs.srcfileschanged == 'true' && github.event.pull_request.head.repo.full_name == github.repository) + defaults: + run: + working-directory: src + env: + # Resolve the name of the secret that contains the Azure client ID/secret + AZURE_CLIENT_ID_NAME: ${{ needs.SetM365App.outputs.client_id_env }} + AZURE_CLIENT_SECRET_NAME: ${{ needs.SetM365App.outputs.client_secret_env }} + CLIENT_APP_SLOT: ${{ needs.SetM365App.outputs.client_app_slot }} + steps: + - uses: actions/checkout@v3 + + - name: Setup Golang with cache + uses: magnetikonline/action-golang-cache@v4 + with: + go-version-file: src/go.mod + + - run: mkdir testlog + + # Install gotestfmt + - name: Set up gotestfmt + run: go install github.com/gotesttools/gotestfmt/v2/cmd/gotestfmt@latest + + # AWS creds + - name: Configure AWS credentials from Test account + uses: aws-actions/configure-aws-credentials@v2 + with: + role-to-assume: ${{ secrets.AWS_IAM_ROLE }} + role-session-name: integration-testing + aws-region: us-east-1 + + # run the tests + - name: Integration Tests + env: + AZURE_CLIENT_ID: ${{ secrets[env.AZURE_CLIENT_ID_NAME] }} + AZURE_CLIENT_SECRET: ${{ secrets[env.AZURE_CLIENT_SECRET_NAME] }} + AZURE_TENANT_ID: ${{ secrets.TENANT_ID }} + CORSO_CI_TESTS: true + CORSO_M365_TEST_USER_ID: ${{ secrets.CORSO_M365_TEST_USER_ID }} + CORSO_SECONDARY_M365_TEST_USER_ID: ${{ secrets.CORSO_SECONDARY_M365_TEST_USER_ID }} + CORSO_PASSPHRASE: ${{ secrets.INTEGRATION_TEST_CORSO_PASSPHRASE }} + CORSO_LOG_FILE: ./src/testlog/testlogging.log + LOG_GRAPH_REQUESTS: true + run: | + set -euo pipefail + go test \ + -tags testing \ + -json \ + -v \ + -failfast \ + -p 1 \ + -timeout 15m \ + ./... 2>&1 | tee ./testlog/gotest.log | gotestfmt -hide successful-tests + + # Upload the original go test output as an artifact for later review. + - name: Upload test log + if: failure() + uses: actions/upload-artifact@v3 + with: + name: test-log + path: src/testlog/* + if-no-files-found: error + retention-days: 14 + Unit-Test-Suite: needs: [Precheck, Checkout] environment: Testing diff --git a/.github/workflows/intergration-test.yml b/.github/workflows/nightly-test.yml similarity index 78% rename from .github/workflows/intergration-test.yml rename to .github/workflows/nightly-test.yml index da75d438a..3babdaa02 100644 --- a/.github/workflows/intergration-test.yml +++ b/.github/workflows/nightly-test.yml @@ -4,6 +4,7 @@ env: on: workflow_dispatch: +# TODO: remove this on merge pull_request: push: @@ -53,38 +54,8 @@ jobs: # SetM365App will decide which M365 app to use for this CI run SetM365App: - environment: Testing - runs-on: ubuntu-latest - outputs: - client_app_slot: ${{ steps.roundrobin.outputs.CLIENT_APP_SLOT }} - client_id_env: ${{ steps.roundrobin.outputs.CLIENT_ID_ENV }} - client_secret_env: ${{ steps.roundrobin.outputs.CLIENT_SECRET_ENV }} - steps: - - name: Figure out which client id to use - id: roundrobin - run: | - slot=$((GITHUB_RUN_NUMBER % 4)) - echo "CLIENT_APP_SLOT=$slot" >> $GITHUB_OUTPUT + uses: alcionai/corso/.github/workflows/_setup_m365_app.yml - case $slot in - - 0) - echo "CLIENT_ID_ENV=CLIENT_ID" >> $GITHUB_OUTPUT - echo "CLIENT_SECRET_ENV=CLIENT_SECRET" >> $GITHUB_OUTPUT - ;; - 1) - echo "CLIENT_ID_ENV=CLIENT_ID_2" >> $GITHUB_OUTPUT - echo "CLIENT_SECRET_ENV=CLIENT_SECRET_2" >> $GITHUB_OUTPUT - ;; - 2) - echo "CLIENT_ID_ENV=CLIENT_ID_3" >> $GITHUB_OUTPUT - echo "CLIENT_SECRET_ENV=CLIENT_SECRET_3" >> $GITHUB_OUTPUT - ;; - 3) - echo "CLIENT_ID_ENV=CLIENT_ID_4" >> $GITHUB_OUTPUT - echo "CLIENT_SECRET_ENV=CLIENT_SECRET_4" >> $GITHUB_OUTPUT - ;; - esac SetEnv: environment: Testing @@ -107,7 +78,7 @@ jobs: fi # ---------------------------------------------------------------------------------------------------- - # --- Integration and Unit Testing ------------------------------------------------------------------- + # --- Nightly Test ------------------------------------------------------------------- # ---------------------------------------------------------------------------------------------------- Test-Suite-Trusted: @@ -146,12 +117,12 @@ jobs: aws-region: us-east-1 # run the tests - - name: Integration Tests + - name: Nightly Tests env: AZURE_CLIENT_ID: ${{ secrets[env.AZURE_CLIENT_ID_NAME] }} AZURE_CLIENT_SECRET: ${{ secrets[env.AZURE_CLIENT_SECRET_NAME] }} AZURE_TENANT_ID: ${{ secrets.TENANT_ID }} - CORSO_CI_TESTS: true + CORSO_NIGHTLY_TESTS: true CORSO_M365_TEST_USER_ID: ${{ secrets.CORSO_M365_TEST_USER_ID }} CORSO_SECONDARY_M365_TEST_USER_ID: ${{ secrets.CORSO_SECONDARY_M365_TEST_USER_ID }} CORSO_PASSPHRASE: ${{ secrets.INTEGRATION_TEST_CORSO_PASSPHRASE }}