diff --git a/.github/workflows/ansible-test-plugins.yml b/.github/workflows/ansible-test-plugins.yml index d54b1fc..2841d5a 100644 --- a/.github/workflows/ansible-test-plugins.yml +++ b/.github/workflows/ansible-test-plugins.yml @@ -40,48 +40,60 @@ jobs: strategy: fail-fast: false matrix: - db_engine_version: - - mysql:5.7.40 - - mysql:8.0.31 - - mariadb:10.4.24 - - mariadb:10.5.18 - - mariadb:10.6.11 - - mariadb:10.7.7 - - mariadb:10.8.3 - ansible: - - stable-2.12 - - stable-2.13 - - stable-2.14 - - devel - python: - - "3.8" - - "3.9" - - "3.10" # Without quotes, this become 3.1 in run_all_test.py! - connector: - - pymysql==0.7.10 - - pymysql==0.9.3 - - mysqlclient==2.0.1 - exclude: - - db_engine_version: mysql:8.0.22 - connector: pymysql==0.7.10 - - db_engine_version: mariadb:10.4.24 - connector: pymysql==0.7.10 - - db_engine_version: mariadb:10.5.18 - connector: pymysql==0.7.10 - - db_engine_version: mariadb:10.8.3 - connector: pymysql==0.7.10 - - python: 3.8 - ansible: stable-2.13 - - python: 3.8 - ansible: stable-2.14 - - python: 3.8 - ansible: devel - - python: 3.9 - ansible: stable-2.12 - - python: 3.9 - connector: mysqlclient==2.0.1 - - python: 3.10 - ansible: stable-2.12 + include: + - ansible: stable-2.12 + db_engine_version: mysql:5.7.40 + python: 3.8 + connector: pymysql==0.7.11 + docker_container: my57-py38-mysqlclient201-pymysql0711 + - ansible: stable-2.12 + db_engine_version: mysql:5.7.40 + python: 3.8 + connector: pymysql==0.9.3 + docker_container: my57-py38-pymysql093 + + # db_engine_version: + # - mysql:5.7.40 + # - mysql:8.0.31 + # - mariadb:10.4.24 + # - mariadb:10.5.18 + # - mariadb:10.6.11 + # - mariadb:10.7.7 + # - mariadb:10.8.3 + # ansible: + # - stable-2.12 + # - stable-2.13 + # - stable-2.14 + # - devel + # python: + # - "3.8" + # - "3.9" + # - "3.10" # Without quotes, this become 3.1 in run_all_test.py! + # connector: + # - pymysql==0.7.10 + # - pymysql==0.9.3 + # - mysqlclient==2.0.1 + # exclude: + # - db_engine_version: mysql:8.0.22 + # connector: pymysql==0.7.10 + # - db_engine_version: mariadb:10.4.24 + # connector: pymysql==0.7.10 + # - db_engine_version: mariadb:10.5.18 + # connector: pymysql==0.7.10 + # - db_engine_version: mariadb:10.8.3 + # connector: pymysql==0.7.10 + # - python: 3.8 + # ansible: stable-2.13 + # - python: 3.8 + # ansible: stable-2.14 + # - python: 3.8 + # ansible: devel + # - python: 3.9 + # ansible: stable-2.12 + # - python: 3.9 + # connector: mysqlclient==2.0.1 + # - python: 3.10 + # ansible: stable-2.12 services: db_primary: @@ -157,6 +169,7 @@ jobs: echo -n "${{ matrix.db_engine_version }}" > tests/integration/db_engine_version; echo Setting Connector version to "${{ matrix.connector }}"...; echo -n "${{ matrix.connector }}" > tests/integration/connector + docker_container: ${{ matrix.docker_container }} target-python-version: ${{ matrix.python }} testing-type: integration diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dec7554..0d139f3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,6 +13,29 @@ Actually, the makefile only support Podman. I don't have tested with docker yet. The Makefile accept the following options: +- ansible: Mandatory version of ansible to install in a venv to run ansible-test. +- container_image: + The container image to use to run our test. There images are created in github.com/community.mysql-test-containers and push the following images on quay.io: + - my57-py38-pymysql093 + - my57-py38-mysqlclient201-pymysql0711 + - my57-py39-pymysql093 + - my57-py39-mysqlclient203-pymysql0711 + - my57-py310-pymysql093 + - my57-py310-mysqlclient211-pymysql0711 + - my80-py38-pymysql093 + - my80-py38-mysqlclient201-pymysql0711 + - my80-py39-pymysql093 + - my80-py39-mysqlclient203-pymysql0711 + - my80-py310-pymysql093 + - my80-py310-mysqlclient211-pymysql0711 + - mariadb-py38-pymysql093 + - mariadb-py38-mysqlclient201 + - mariadb-py39-pymysql093 + - mariadb-py39-mysqlclient203 + - mariadb-py310-pymysql093 + - mariadb-py310-mysqlclient211 + Unfortunatly you must provide the right container_image yourself. And you still need to provides db_engine_version, python, etc... + To minimise the amount of images, pymysql 0.7.11 and mysqlclient are shipped together. - db_engine_version: The name of the container to use. Either MYSQL or MariaDB. Use ':' as a separator. Do not use short version, like mysql:8 for instance. Our tests expect a full version to filter tests based on released version. For instance: when: db_version is version ('8.0.22', '>'). - connector: The name of the python package of the connector along with its version number. Use '==' as a separator. - python: The python version to use in the controller. @@ -22,10 +45,10 @@ Examples: ```sh # Run all targets -make db_engine_version="mysql:5.7.40" connector="pymysql==0.7.10" python="3.8" +make ansible="stable-2.14" db_engine_version="mysql:5.7.40" connector="pymysql==0.7.10" python="3.8" container_image="my57-py38-mysqlclient201-pymysql0711" # A single target -make db_engine_version="mysql:5.7.40" connector="pymysql==0.7.10" python="3.8" target="test_mysql_db" +make ansible="stable-2.14" db_engine_version="mysql:5.7.40" connector="pymysql==0.7.10" python="3.8" container_image="my57-py38-mysqlclient201-pymysql0711" target="test_mysql_db" ``` diff --git a/run_all_tests.py b/run_all_tests.py index 3c4070d..14702f8 100755 --- a/run_all_tests.py +++ b/run_all_tests.py @@ -28,27 +28,31 @@ def extract_matrix(workflow_yaml): return matrix -def is_exclude(exclude_list, test_suite): - test_is_excluded = False - for excl in exclude_list: - match = 0 +# def is_exclude(exclude_list, test_suite): +# test_is_excluded = False +# for excl in exclude_list: +# match = 0 - if 'db_engine_version' in excl: - if excl.get('db_engine_version') == test_suite[0]: - match += 1 +# if 'ansible' in excl: +# if excl.get('ansible') == test_suite[0]: +# match += 1 - if 'python' in excl: - if excl.get('python') == test_suite[1]: - match += 1 +# if 'db_engine_version' in excl: +# if excl.get('db_engine_version') == test_suite[1]: +# match += 1 - if 'connector' in excl: - if excl.get('connector') == test_suite[2]: - match += 1 +# if 'python' in excl: +# if excl.get('python') == test_suite[2]: +# match += 1 - if match > 1: - test_is_excluded = True +# if 'connector' in excl: +# if excl.get('connector') == test_suite[3]: +# match += 1 - return test_is_excluded +# if match > 1: +# test_is_excluded = True + +# return test_is_excluded def main(): @@ -56,17 +60,23 @@ def main(): tests_matrix_yaml = extract_matrix(workflow_yaml) matrix = [] - exclude_list = tests_matrix_yaml.get('exclude') - for db_engine in tests_matrix_yaml.get('db_engine_version'): - for python in tests_matrix_yaml.get('python'): - for connector in tests_matrix_yaml.get('connector'): - if not is_exclude(exclude_list, (db_engine, python, connector)): - matrix.append((db_engine, python, connector)) + # exclude_list = tests_matrix_yaml.get('exclude') + # for ansible in tests_matrix_yaml.get('ansible'): + # for db_engine in tests_matrix_yaml.get('db_engine_version'): + # for python in tests_matrix_yaml.get('python'): + # for connector in tests_matrix_yaml.get('connector'): + # if not is_exclude(exclude_list, (ansible, db_engine, python, connector)): + # matrix.append((ansible, db_engine, python, connector)) - for tests in matrix: - make_cmd = f'make db_engine_version="{tests[0]}" python="{tests[1]}" connector="{tests[2]}" test-integration' - print(f'Run tests for: {tests[0]}, Python: {tests[1]}, Connector: {tests[2]}') - os.system(make_cmd) + for tests in tests_matrix_yaml.get('include'): + a = tests.get('ansible') + d = tests.get('db_engine_version') + p = tests.get('python') + c = tests.get('connector') + i = tests.get('docker_container') + make_cmd = f'make ansible="{a}" db_engine_version="{d}" python="{p}" connector="{c}" docker_container="{i}" test-integration' + print(f'Run tests for: Ansible: {a}, DB: {d}, Python: {p}, Connector: {c}, Image: {i}') + # os.system(make_cmd) if __name__ == '__main__': diff --git a/tests/integration/targets/setup_controller/tasks/connector.yml b/tests/integration/targets/setup_controller/tasks/connector.yml index fc760ac..132c240 100644 --- a/tests/integration/targets/setup_controller/tasks/connector.yml +++ b/tests/integration/targets/setup_controller/tasks/connector.yml @@ -1,6 +1,18 @@ --- -- name: "{{ role_name }} | Connector | Install python packages" - ansible.builtin.pip: - name: "{{ connector_name }}" - state: present +# - name: "{{ role_name }} | Connector | Install requirements for mysqlclient" +# ansible.builtin.apt: +# name: +# - python3-dev +# - default-libmysqlclient-dev +# - build-essential +# state: present +# environment: +# DEBIAN_FRONTEND: noninteractive +# when: +# - connector_name == 'mysqlclient' + +# - name: "{{ role_name }} | Connector | Install python packages" +# ansible.builtin.pip: +# name: "{{ connector_name_version }}" +# state: present diff --git a/tests/integration/targets/setup_controller/tasks/install.yml b/tests/integration/targets/setup_controller/tasks/install.yml index 59c1d37..e288983 100644 --- a/tests/integration/targets/setup_controller/tasks/install.yml +++ b/tests/integration/targets/setup_controller/tasks/install.yml @@ -1,14 +1,14 @@ --- -- name: "{{ role_name }} | install | Required package for testing" - ansible.builtin.apt: - name: - - iproute2 - - python3-cryptography # To authenticate with MySQL 8+ - state: present - update_cache: true - environment: - DEBIAN_FRONTEND: noninteractive +# - name: "{{ role_name }} | install | Required package for testing" +# ansible.builtin.apt: +# name: +# - iproute2 # To grab docker network gateway address +# - python3-cryptography # To authenticate with MySQL 8+ +# state: present +# update_cache: true +# environment: +# DEBIAN_FRONTEND: noninteractive - name: "{{ role_name }} | install | Ensure fake root folder" ansible.builtin.file: diff --git a/tests/integration/targets/setup_controller/tasks/main.yml b/tests/integration/targets/setup_controller/tasks/main.yml index 82f8537..2daf2dc 100644 --- a/tests/integration/targets/setup_controller/tasks/main.yml +++ b/tests/integration/targets/setup_controller/tasks/main.yml @@ -13,10 +13,10 @@ ansible.builtin.import_tasks: file: setvars.yml -- name: Install MySQL local client - ansible.builtin.import_tasks: - file: client.yml +# - name: Install MySQL local client +# ansible.builtin.import_tasks: +# file: client.yml -- name: Install MySQL Python connector - ansible.builtin.import_tasks: - file: connector.yml +# - name: Install MySQL Python connector +# ansible.builtin.import_tasks: +# file: connector.yml