diff --git a/justfile b/justfile index 80d615f..d2f8803 100644 --- a/justfile +++ b/justfile @@ -1,4 +1,4 @@ -PROJECTS := "pytest-backend pytest-saas pytest-itde" +PROJECTS := "pytest-backend" # Default target default: diff --git a/pytest-backend/exasol/pytest_backend/__init__.py b/pytest-backend/exasol/pytest_backend/__init__.py index 6433443..ad453a2 100644 --- a/pytest-backend/exasol/pytest_backend/__init__.py +++ b/pytest-backend/exasol/pytest_backend/__init__.py @@ -17,8 +17,8 @@ _BACKEND_ONPREM = 'onprem' _BACKEND_SAAS = 'saas' -_onprem_stash_key = pytest.StashKey[bool]() -_saas_stash_key = pytest.StashKey[bool]() +itde_calls = 0 +saas_calls = 0 def pytest_addoption(parser): @@ -62,19 +62,18 @@ def use_saas(request) -> bool: @pytest.fixture(scope="session") -def backend_aware_onprem_database(request, - use_onprem, +def backend_aware_onprem_database(use_onprem, itde_config, exasol_config, bucketfs_config, ssh_config, database_name) -> None: if use_onprem and (itde_config.db_version != "external"): - # Guard against a potential issue with repeated call of a parameterised fixture - if _onprem_stash_key in request.session.stash: - raise RuntimeError(('Repeated call of the session level fixture ' - 'backend_aware_onprem_database')) - request.session.stash[_onprem_stash_key] = True + global itde_calls + itde_calls += 1 + print('-----------------') + print('| STARTING ITDE |') + print('-----------------') bucketfs_url = urlparse(bucketfs_config.url) _, cleanup_function = api.spawn_test_environment( @@ -99,11 +98,11 @@ def backend_aware_saas_database_id(request, saas_pat, saas_account_id) -> str: if use_saas: - # Guard against a potential issue with repeated call of a parameterised fixture - if _saas_stash_key in request.session.stash: - raise RuntimeError(('Repeated call of the session level fixture ' - 'backend_aware_saas_database_id')) - request.session.stash[_saas_stash_key] = True + global saas_calls + saas_calls += 1 + print('-----------------') + print('| STARTING ITDE |') + print('-----------------') db_id = request.config.getoption("--saas-database-id") keep = request.config.getoption("--keep-saas-database") @@ -228,3 +227,13 @@ def backend_aware_bucketfs_params(backend, return backend_aware_saas_bucketfs_params else: ValueError(f'Unknown backend {backend}') + + +@pytest.fixture +def global_itde_calls() -> int: + return itde_calls + + +@pytest.fixture +def global_saas_calls() -> int: + return saas_calls diff --git a/pytest-backend/test/integration/pytest_backend_test.py b/pytest-backend/test/integration/pytest_backend_test.py index c45b83e..d95087b 100644 --- a/pytest-backend/test/integration/pytest_backend_test.py +++ b/pytest-backend/test/integration/pytest_backend_test.py @@ -1,10 +1,11 @@ from textwrap import dedent -import re import pytest import pyexasol import exasol.bucketfs as bfs +from exasol.pytest_backend import * + pytest_plugins = ["pytester"] @@ -62,16 +63,64 @@ def test_pass_options_via_cli(pytester, test_case, cli_args, num_passed, num_ski result.assert_outcomes(passed=num_passed, skipped=num_skipped) -def test_backend_aware_database_params(backend_aware_database_params): +def test_backend_aware_database_params1(backend_aware_database_params, global_itde_calls, global_saas_calls): conn = pyexasol.connect(**backend_aware_database_params) res = conn.execute('SELECT SESSION_ID FROM SYS.EXA_ALL_SESSIONS;').fetchall() assert res + assert global_itde_calls <= 1 + assert global_saas_calls <= 1 + assert global_itde_calls + global_saas_calls > 0 + + +def test_backend_aware_database_params2(backend_aware_database_params, global_itde_calls, global_saas_calls): + conn = pyexasol.connect(**backend_aware_database_params) + res = conn.execute('SELECT SESSION_ID FROM SYS.EXA_ALL_SESSIONS;').fetchall() + assert res + assert global_itde_calls <= 1 + assert global_saas_calls <= 1 + assert global_itde_calls + global_saas_calls > 0 + + +def test_backend_aware_database_params3(backend_aware_database_params, global_itde_calls, global_saas_calls): + conn = pyexasol.connect(**backend_aware_database_params) + res = conn.execute('SELECT SESSION_ID FROM SYS.EXA_ALL_SESSIONS;').fetchall() + assert res + assert global_itde_calls <= 1 + assert global_saas_calls <= 1 + assert global_itde_calls + global_saas_calls > 0 + + +def test_backend_aware_bucketfs_params1(backend_aware_bucketfs_params, global_itde_calls, global_saas_calls): + bfs_path = bfs.path.build_path(**backend_aware_bucketfs_params, path='plugin_test1') + file_content = b'In God We Trust' + bfs_path.write(file_content) + data_back = b''.join(bfs_path.read()) + bfs_path.rm() + assert data_back == file_content + assert global_itde_calls <= 1 + assert global_saas_calls <= 1 + assert global_itde_calls + global_saas_calls > 0 + + +def test_backend_aware_bucketfs_params2(backend_aware_bucketfs_params, global_itde_calls, global_saas_calls): + bfs_path = bfs.path.build_path(**backend_aware_bucketfs_params, path='plugin_test2') + file_content = b'In God We Trust' + bfs_path.write(file_content) + data_back = b''.join(bfs_path.read()) + bfs_path.rm() + assert data_back == file_content + assert global_itde_calls <= 1 + assert global_saas_calls <= 1 + assert global_itde_calls + global_saas_calls > 0 -def test_backend_aware_bucketfs_params(backend_aware_bucketfs_params): - bfs_path = bfs.path.build_path(**backend_aware_bucketfs_params, path='plugin_test') +def test_backend_aware_bucketfs_params3(backend_aware_bucketfs_params, global_itde_calls, global_saas_calls): + bfs_path = bfs.path.build_path(**backend_aware_bucketfs_params, path='plugin_test3') file_content = b'In God We Trust' bfs_path.write(file_content) data_back = b''.join(bfs_path.read()) bfs_path.rm() assert data_back == file_content + assert global_itde_calls <= 1 + assert global_saas_calls <= 1 + assert global_itde_calls + global_saas_calls > 0 diff --git a/pytest-backend/test/integration/test2.py b/pytest-backend/test/integration/test2.py new file mode 100644 index 0000000..21bfbfd --- /dev/null +++ b/pytest-backend/test/integration/test2.py @@ -0,0 +1,67 @@ +import pyexasol +import exasol.bucketfs as bfs + +from exasol.pytest_backend import * + + +def test_backend_aware_database_params11(backend_aware_database_params, global_itde_calls, global_saas_calls): + conn = pyexasol.connect(**backend_aware_database_params) + res = conn.execute('SELECT SESSION_ID FROM SYS.EXA_ALL_SESSIONS;').fetchall() + assert res + assert global_itde_calls <= 1 + assert global_saas_calls <= 1 + assert global_itde_calls + global_saas_calls > 0 + + +def test_backend_aware_database_params12(backend_aware_database_params, global_itde_calls, global_saas_calls): + conn = pyexasol.connect(**backend_aware_database_params) + res = conn.execute('SELECT SESSION_ID FROM SYS.EXA_ALL_SESSIONS;').fetchall() + assert res + assert global_itde_calls <= 1 + assert global_saas_calls <= 1 + assert global_itde_calls + global_saas_calls > 0 + + +def test_backend_aware_database_params13(backend_aware_database_params, global_itde_calls, global_saas_calls): + conn = pyexasol.connect(**backend_aware_database_params) + res = conn.execute('SELECT SESSION_ID FROM SYS.EXA_ALL_SESSIONS;').fetchall() + assert res + assert global_itde_calls <= 1 + assert global_saas_calls <= 1 + assert global_itde_calls + global_saas_calls > 0 + + +def test_backend_aware_bucketfs_params11(backend_aware_bucketfs_params, global_itde_calls, global_saas_calls): + bfs_path = bfs.path.build_path(**backend_aware_bucketfs_params, path='plugin_test1') + file_content = b'In God We Trust' + bfs_path.write(file_content) + data_back = b''.join(bfs_path.read()) + bfs_path.rm() + assert data_back == file_content + assert global_itde_calls <= 1 + assert global_saas_calls <= 1 + assert global_itde_calls + global_saas_calls > 0 + + +def test_backend_aware_bucketfs_params12(backend_aware_bucketfs_params, global_itde_calls, global_saas_calls): + bfs_path = bfs.path.build_path(**backend_aware_bucketfs_params, path='plugin_test2') + file_content = b'In God We Trust' + bfs_path.write(file_content) + data_back = b''.join(bfs_path.read()) + bfs_path.rm() + assert data_back == file_content + assert global_itde_calls <= 1 + assert global_saas_calls <= 1 + assert global_itde_calls + global_saas_calls > 0 + + +def test_backend_aware_bucketfs_params13(backend_aware_bucketfs_params, global_itde_calls, global_saas_calls): + bfs_path = bfs.path.build_path(**backend_aware_bucketfs_params, path='plugin_test3') + file_content = b'In God We Trust' + bfs_path.write(file_content) + data_back = b''.join(bfs_path.read()) + bfs_path.rm() + assert data_back == file_content + assert global_itde_calls <= 1 + assert global_saas_calls <= 1 + assert global_itde_calls + global_saas_calls > 0