diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index c378707..05ff570 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -20,7 +20,8 @@ on: jobs: - run-it-tests-job: + integration-test-job: + name: Run integration tests runs-on: ubuntu-latest steps: - name: Checkout @@ -55,6 +56,85 @@ jobs: run: | bash bin/deploy.sh + - name: Save Cloud Pod + run: | + localstack pod save serverless-quiz-app-ci + env: + LOCALSTACK_API_KEY: ${{ secrets.LOCALSTACK_API_KEY }} + + - name: Run Tests + env: + AWS_DEFAULT_REGION: us-east-1 + AWS_REGION: us-east-1 + AWS_ACCESS_KEY_ID: test + AWS_SECRET_ACCESS_KEY: test + run: | + pytest tests/test_infra.py + + - name: Show localstack logs + if: always() + run: | + localstack logs + + - name: Send a Slack notification + if: failure() || github.event_name != 'pull_request' + uses: ravsamhq/notify-slack-action@v2 + with: + status: ${{ job.status }} + token: ${{ secrets.GITHUB_TOKEN }} + notification_title: "{workflow} has {status_message}" + message_format: "{emoji} *{workflow}* {status_message} in <{repo_url}|{repo}>" + footer: "Linked Repo <{repo_url}|{repo}> | <{run_url}|View Workflow run>" + notify_when: "failure" + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + + - name: Generate a Diagnostic Report + if: failure() + run: | + curl -s localhost:4566/_localstack/diagnose | gzip -cf > diagnose.json.gz + + - name: Upload the Diagnostic Report + if: failure() + uses: actions/upload-artifact@v3 + with: + name: diagnose.json.gz + path: ./diagnose.json.gz + + outage-test-job: + name: Run outages test + needs: integration-test-job + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python 3.11 + id: setup-python + uses: actions/setup-python@v2 + with: + python-version: 3.11 + + - name: Set up Dependencies + run: | + pip install requests boto3 pytest + + - name: Start LocalStack + uses: LocalStack/setup-localstack@v0.2.3 + with: + image-tag: 'latest' + use-pro: 'true' + configuration: LS_LOG=trace + install-awslocal: 'true' + env: + LOCALSTACK_API_KEY: ${{ secrets.LOCALSTACK_API_KEY }} + + - name: Load Cloud Pod + run: | + localstack pod load serverless-quiz-app-ci + env: + LOCALSTACK_API_KEY: ${{ secrets.LOCALSTACK_API_KEY }} + - name: Run Tests env: AWS_DEFAULT_REGION: us-east-1 @@ -62,7 +142,7 @@ jobs: AWS_ACCESS_KEY_ID: test AWS_SECRET_ACCESS_KEY: test run: | - pytest -v + pytest tests/test_outage.py - name: Show localstack logs if: always()