Skip to content

Commit

Permalink
Split tests to core/providers/task-sdk/integration/system
Browse files Browse the repository at this point in the history
The tests execution was traditionally using single "breeze testing
tests" command and you could select which test to run via TEST_TYPE.

However the recent move of providers and adding task_sdk necessitates
splitting the tests commands into separate commands for core, providers,
task_sdk, helm, integration and system.

This is done via introducing "TEST_GROUP" - which determines which
group of tests is being executed, and dedicated testing command for each
of the groups - with "db" and "non-db" variants where applicable.

Cleanup and small refactoring has been done to make it easier to
reason about parameters passed down from the command line to
docker and in-container pytest command.

Related: #42632
  • Loading branch information
potiuk committed Nov 15, 2024
1 parent 0393c1f commit 8dd4384
Show file tree
Hide file tree
Showing 96 changed files with 4,313 additions and 4,126 deletions.
14 changes: 7 additions & 7 deletions .github/workflows/check-providers.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ on: # yamllint disable-line rule:truthy
description: "Whether to upgrade to newer dependencies"
required: true
type: string
affected-providers-list-as-string:
selected-providers-list-as-string:
description: "List of affected providers as string"
required: false
type: string
Expand All @@ -54,7 +54,7 @@ on: # yamllint disable-line rule:truthy
description: "List of parallel provider test types as string"
required: true
type: string
skip-provider-tests:
skip-providers-tests:
description: "Whether to skip provider tests (true/false)"
required: true
type: string
Expand Down Expand Up @@ -163,7 +163,7 @@ jobs:
run: >
breeze release-management prepare-provider-packages --include-not-ready-providers
--version-suffix-for-pypi dev0 --package-format sdist
${{ inputs.affected-providers-list-as-string }}
${{ inputs.selected-providers-list-as-string }}
- name: "Prepare airflow package: sdist"
run: >
breeze release-management prepare-airflow-package
Expand All @@ -187,7 +187,7 @@ jobs:
--providers-constraints-location
/files/constraints-${{env.PYTHON_MAJOR_MINOR_VERSION}}/constraints-source-providers-${{env.PYTHON_MAJOR_MINOR_VERSION}}.txt
--run-in-parallel
if: inputs.affected-providers-list-as-string == ''
if: inputs.selected-providers-list-as-string == ''
- name: "Install affected provider packages and airflow via sdist files"
run: >
breeze release-management install-provider-packages
Expand All @@ -198,7 +198,7 @@ jobs:
--providers-constraints-location
/files/constraints-${{env.PYTHON_MAJOR_MINOR_VERSION}}/constraints-source-providers-${{env.PYTHON_MAJOR_MINOR_VERSION}}.txt
--run-in-parallel
if: inputs.affected-providers-list-as-string != ''
if: inputs.selected-providers-list-as-string != ''

providers-compatibility-checks:
timeout-minutes: 80
Expand All @@ -218,7 +218,7 @@ jobs:
VERSION_SUFFIX_FOR_PYPI: "dev0"
VERBOSE: "true"
CLEAN_AIRFLOW_INSTALLATION: "${{ inputs.canary-run }}"
if: inputs.skip-provider-tests != 'true'
if: inputs.skip-providers-tests != 'true'
steps:
- name: "Cleanup repo"
shell: bash
Expand Down Expand Up @@ -268,7 +268,7 @@ jobs:
Airflow ${{ matrix.airflow-version }}:Python ${{ matrix.python-version }}
if: matrix.run-tests == 'true'
run: >
breeze testing tests --run-in-parallel
breeze testing providers-tests --run-in-parallel
--parallel-test-types "${{ inputs.providers-test-types-list-as-string }}"
--use-packages-from-dist
--package-format wheel
Expand Down
184 changes: 101 additions & 83 deletions .github/workflows/ci.yml

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion .github/workflows/helm-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ jobs:
- name: "Prepare breeze & CI image: ${{inputs.default-python-version}}:${{inputs.image-tag}}"
uses: ./.github/actions/prepare_breeze_and_image
- name: "Helm Unit Tests: ${{ matrix.helm-test-package }}"
run: breeze testing helm-tests --helm-test-package "${{ matrix.helm-test-package }}"
run: breeze testing helm-tests --test-type "${{ matrix.helm-test-package }}"

tests-helm-release:
timeout-minutes: 80
Expand Down
200 changes: 200 additions & 0 deletions .github/workflows/integration-system-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
# 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.
#
---
name: Integration and system tests
on: # yamllint disable-line rule:truthy
workflow_call:
inputs:
runs-on-as-json-public:
description: "The array of labels (in json form) determining public runners."
required: true
type: string
image-tag:
description: "Tag to set for the image"
required: true
type: string
testable-core-integrations:
description: "The list of testable core integrations as JSON array."
required: true
type: string
testable-providers-integrations:
description: "The list of testable providers integrations as JSON array."
required: true
type: string
run-system-tests:
description: "Run system tests (true/false)"
required: true
type: string
default-postgres-version:
description: "Default version of Postgres to use"
required: true
type: string
default-mysql-version:
description: "Default version of MySQL to use"
required: true
type: string
skip-providers-tests:
description: "Skip provider tests (true/false)"
required: true
type: string
run-coverage:
description: "Run coverage (true/false)"
required: true
type: string
default-python-version:
description: "Which version of python should be used by default"
required: true
type: string
debug-resources:
description: "Debug resources (true/false)"
required: true
type: string
jobs:
tests-core-integration:
timeout-minutes: 130
if: inputs.testable-core-integrations != '[]'
name: "Integration core ${{ matrix.integration }}"
runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
strategy:
fail-fast: false
matrix:
integration: ${{ fromJSON(inputs.testable-core-integrations) }}
env:
IMAGE_TAG: "${{ inputs.image-tag }}"
BACKEND: "postgres"
BACKEND_VERSION: ${{ inputs.default-postgres-version }}"
PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
JOB_ID: "integration-core-${{ matrix.integration }}"
SKIP_PROVIDERS_TESTS: "${{ inputs.skip-providers-tests }}"
ENABLE_COVERAGE: "${{ inputs.run-coverage}}"
DEBUG_RESOURCES: "${{ inputs.debug-resources }}"
GITHUB_REPOSITORY: ${{ github.repository }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_USERNAME: ${{ github.actor }}
VERBOSE: "true"
steps:
- name: "Cleanup repo"
shell: bash
run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@v4
with:
persist-credentials: false
- name: "Cleanup docker"
run: ./scripts/ci/cleanup_docker.sh
- name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}:${{ inputs.image-tag }}"
uses: ./.github/actions/prepare_breeze_and_image
- name: "Integration: core ${{ matrix.integration }}"
# yamllint disable rule:line-length
run: ./scripts/ci/testing/run_integration_tests_with_retry.sh core "${{ matrix.integration }}"
- name: "Post Tests success"
uses: ./.github/actions/post_tests_success
with:
codecov-token: ${{ secrets.CODECOV_TOKEN }}
python-version: ${{ inputs.default-python-version }}
- name: "Post Tests failure"
uses: ./.github/actions/post_tests_failure
if: failure()

tests-providers-integration:
timeout-minutes: 130
if: inputs.testable-providers-integrations != '[]' && inputs.skip-providers-tests != 'true'
name: "Integration: providers ${{ matrix.integration }}"
runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
strategy:
fail-fast: false
matrix:
integration: ${{ fromJSON(inputs.testable-providers-integrations) }}
env:
IMAGE_TAG: "${{ inputs.image-tag }}"
BACKEND: "postgres"
BACKEND_VERSION: ${{ inputs.default-postgres-version }}"
PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
JOB_ID: "integration-providers-${{ matrix.integration }}"
SKIP_PROVIDERS_TESTS: "${{ inputs.skip-providers-tests }}"
ENABLE_COVERAGE: "${{ inputs.run-coverage}}"
DEBUG_RESOURCES: "${{ inputs.debug-resources }}"
GITHUB_REPOSITORY: ${{ github.repository }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_USERNAME: ${{ github.actor }}
VERBOSE: "true"
steps:
- name: "Cleanup repo"
shell: bash
run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@v4
with:
persist-credentials: false
- name: "Cleanup docker"
run: ./scripts/ci/cleanup_docker.sh
- name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}:${{ inputs.image-tag }}"
uses: ./.github/actions/prepare_breeze_and_image
- name: "Integration: providers ${{ matrix.integration }}"
run: ./scripts/ci/testing/run_integration_tests_with_retry.sh providers "${{ matrix.integration }}"
- name: "Post Tests success"
uses: ./.github/actions/post_tests_success
with:
codecov-token: ${{ secrets.CODECOV_TOKEN }}
python-version: ${{ inputs.default-python-version }}
- name: "Post Tests failure"
uses: ./.github/actions/post_tests_failure
if: failure()

tests-system:
timeout-minutes: 130
if: inputs.run-system-tests == 'true'
name: "System Tests"
runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }}
env:
IMAGE_TAG: "${{ inputs.image-tag }}"
BACKEND: "postgres"
BACKEND_VERSION: ${{ inputs.default-postgres-version }}"
PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
JOB_ID: "system"
SKIP_PROVIDERS_TESTS: "${{ inputs.skip-providers-tests }}"
ENABLE_COVERAGE: "${{ inputs.run-coverage}}"
DEBUG_RESOURCES: "${{ inputs.debug-resources }}"
GITHUB_REPOSITORY: ${{ github.repository }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_USERNAME: ${{ github.actor }}
VERBOSE: "true"
steps:
- name: "Cleanup repo"
shell: bash
run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
- name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
uses: actions/checkout@v4
with:
persist-credentials: false
- name: "Cleanup docker"
run: ./scripts/ci/cleanup_docker.sh
- name: "Prepare breeze & CI image: ${{ inputs.default-python-version }}:${{ inputs.image-tag }}"
uses: ./.github/actions/prepare_breeze_and_image
- name: "System Tests"
run: >
./scripts/ci/testing/run_system_tests.sh
tests/system/example_empty.py providers/tests/system/example_empty.py
- name: "Post Tests success"
uses: ./.github/actions/post_tests_success
with:
codecov-token: ${{ secrets.CODECOV_TOKEN }}
python-version: ${{ inputs.default-python-version }}
- name: "Post Tests failure"
uses: ./.github/actions/post_tests_failure
if: failure()
103 changes: 0 additions & 103 deletions .github/workflows/integration-tests.yml

This file was deleted.

Loading

0 comments on commit 8dd4384

Please sign in to comment.