From ca46dabcd8e8ca609dd385a0c30da70b839cb26d Mon Sep 17 00:00:00 2001 From: Marion Deveaud Date: Mon, 22 Jun 2026 12:41:53 +0200 Subject: [PATCH 1/4] chore: update release version in documentation, fix variable name for semantic release --- docs-source/conf.py | 2 +- pyproject.toml | 2 +- tests/files/base-files_11.tar.xz | Bin 65368 -> 0 bytes .../zlib_1.2.11.dfsg-0ubuntu2.debian.tar.xz | Bin 18344 -> 0 bytes 4 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 tests/files/base-files_11.tar.xz delete mode 100644 tests/files/zlib_1.2.11.dfsg-0ubuntu2.debian.tar.xz diff --git a/docs-source/conf.py b/docs-source/conf.py index 4899add..653c5f1 100644 --- a/docs-source/conf.py +++ b/docs-source/conf.py @@ -22,7 +22,7 @@ copyright = "2021, Siemens AG" # The full version, including major/minor/patch tags -release = "3.5.0" +release = "3.6.0" # -- General configuration --------------------------------------------------- diff --git a/pyproject.toml b/pyproject.toml index 47f1434..fd220ef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ version_toml = [ "pyproject.toml:tool.poetry.version", ] version_variables = [ - "docs-source/conf.py:version", + "docs-source/conf.py:release", ] [tool.poetry.dependencies] diff --git a/tests/files/base-files_11.tar.xz b/tests/files/base-files_11.tar.xz deleted file mode 100644 index 1fd74ba2555a4f2c36e86b317ba461825ae1ac6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65368 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

LG7UnFve}3P0H?(o?-rsQszth72jha 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 D|BQ@P From 8f8ab5515cf2ac397f40bea2b17856373aa2c997 Mon Sep 17 00:00:00 2001 From: Marion Deveaud Date: Mon, 22 Jun 2026 12:43:34 +0200 Subject: [PATCH 2/4] docs: extend contributions guidelines with expected test strategy --- README.rst | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index f7fb2f4..04ce3be 100644 --- a/README.rst +++ b/README.rst @@ -148,7 +148,7 @@ Fossology Python also offers a command line interface to simplify interactions w .. code:: bash - $ foss_cli -vv upload_file tests/files/zlib_1.2.11.dfsg-0ubuntu2.debian.tar.xz \ + $ foss_cli -vv upload_file tests/files/base-files_10.3-debian10-test.tar.bz2 \ --folder_name FossFolder --access_level public @@ -200,6 +200,25 @@ Develop To avoid running the whole testsuite during development of a new branch with changing only touching the code related to the CLI, name your branch ``feat/cli-{something}`` and only the ``test_foss_cli_*`` will run in the pull request context. +**Testing Requirements for New Code** + + When contributing new features or API extensions, ensure comprehensive test coverage using these guidelines: + + - **Unit Tests with Responses Framework**: Use the `responses `_ library + to mock HTTP requests and provide unit test coverage for all code paths. This allows fast, isolated testing without + requiring a running Fossology instance. See existing tests in ``tests/`` directory for examples of the + ``@responses.activate`` decorator pattern. + + - **Integration Tests**: Provide at least one generic integration test that runs against an actual Fossology instance. + These tests validate real API behavior and can be executed: + + - **Locally**: Run against a Fossology Docker container (see the Test section below for setup instructions) + - **In CI/CD**: Tests automatically run via GitHub Actions in the `API Tests job + `_ + + - **Coverage Requirements**: All new code paths must be covered by tests. Pull requests without adequate test + coverage will not be accepted. Use ``poetry run coverage`` to verify coverage locally. + **AI-Assisted Contributions** AI coding agents are active in this repository. If you are an AI agent or using AI-assisted tooling, @@ -275,7 +294,8 @@ The testsuite available in this project expects a running Fossology instance und .. code:: shell docker pull fossology/fossology - tar xJf tests/files/base-files_11.tar.xz -C /tmp + tar xvf tests/files/base-files_10.3-debian10-test.tar.bz2 -C /tmp + chmod a+r /tmp/base-files-10.3 docker run --mount src="/tmp",dst=/tmp,type=bind --name fossology -p 80:80 fossology/fossology - Start the complete test suite or a specific test case (and generate coverage report): From a3d7b4a833c75122808a1204295a9ccfd2c38d67 Mon Sep 17 00:00:00 2001 From: Marion Deveaud Date: Mon, 22 Jun 2026 12:44:27 +0200 Subject: [PATCH 3/4] tests: only use one input file for all tests --- .github/workflows/foss_cli_tests.yml | 4 ++-- .github/workflows/fossologytests.yml | 4 ++-- docs-source/sample_workflow.rst | 4 ++-- tests/conftest.py | 15 ++------------- tests/test_foss_cli_flow_cmds.py | 8 ++++---- tests/test_foss_cli_start_workflow.py | 24 ++++++++++++------------ tests/test_upload_from.py | 8 ++++---- tests/test_upload_licenses_copyrights.py | 4 ++-- tests/test_uploads.py | 20 ++++++++++---------- 9 files changed, 40 insertions(+), 51 deletions(-) diff --git a/.github/workflows/foss_cli_tests.yml b/.github/workflows/foss_cli_tests.yml index f58964b..509ad23 100644 --- a/.github/workflows/foss_cli_tests.yml +++ b/.github/workflows/foss_cli_tests.yml @@ -28,7 +28,7 @@ jobs: - name: Install host dependencies run: | apt-get -qq update - apt-get install -qq gcc git nmap xz-utils + apt-get install -qq bzip2 gcc git nmap xz-utils rm -rf /var/lib/apt/lists/* - name: Install Python dependencies run: | @@ -36,7 +36,7 @@ jobs: poetry install --with=dev - name: Install files in shared volume run: | - tar xJf tests/files/base-files_11.tar.xz -C /tmp + tar xvf tests/files/base-files_10.3-debian10-test.tar.bz2 -C /tmp - name: Check services run: nmap fossology -p 80 - name: Run tests diff --git a/.github/workflows/fossologytests.yml b/.github/workflows/fossologytests.yml index 1495ab7..830c88f 100644 --- a/.github/workflows/fossologytests.yml +++ b/.github/workflows/fossologytests.yml @@ -28,7 +28,7 @@ jobs: - name: Install host dependencies run: | apt-get -qq update - apt-get install -qq gcc git nmap xz-utils + apt-get install -qq bzip2 gcc git nmap xz-utils rm -rf /var/lib/apt/lists/* - name: Install Python dependencies run: | @@ -36,7 +36,7 @@ jobs: poetry install --with=dev - name: Install files in shared volume run: | - tar xJf tests/files/base-files_11.tar.xz -C /tmp + tar xvf tests/files/base-files_10.3-debian10-test.tar.bz2 -C /tmp - name: Check services run: nmap fossology -p 80 - name: Run tests diff --git a/docs-source/sample_workflow.rst b/docs-source/sample_workflow.rst index 3c0fc34..dc4d197 100644 --- a/docs-source/sample_workflow.rst +++ b/docs-source/sample_workflow.rst @@ -111,10 +111,10 @@ We first get an example file from our github repository test environment and the upload it to the server. ->>> filename = "my_base-files_11.tar.xz" +>>> filename = "my_base-files_10.3-debian10-test.tar.bz2" >>> path_to_upload_file = pathlib.Path.cwd() / filename >>> if not path_to_upload_file.exists(): -... url = "https://github.com/fossology/fossology-python/blob/master/tests/files/base-files_11.tar.xz" +... url = "https://github.com/fossology/fossology-python/blob/master/tests/files/base-files_10.3-debian10-test.tar.bz2" ... r = requests.get(url) ... with open(path_to_upload_file, "wb") as fp: ... len = fp.write(r.content) diff --git a/tests/conftest.py b/tests/conftest.py index d042dd7..c75ad10 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -185,11 +185,6 @@ def foss_v2(foss_server: str, foss_token: str, foss_agents: Agents): foss.close() -@pytest.fixture(scope="session") -def test_file_path() -> str: - return "tests/files/base-files_11.tar.xz" - - @pytest.fixture(scope="session") def upload_folder(foss: fossology.Fossology) -> Generator: name = "UploadFolderTest" @@ -275,15 +270,9 @@ def created_foss_user(foss: fossology.Fossology, foss_user: dict) -> Generator: foss.delete_user(user) -# foss_cli specific @pytest.fixture(scope="session") -def click_test_file_path() -> str: - return "tests/files" - - -@pytest.fixture(scope="session") -def click_test_file() -> str: - return "zlib_1.2.11.dfsg-0ubuntu2.debian.tar.xz" +def test_file_path() -> str: + return "tests/files/base-files_10.3-debian10-test.tar.bz2" @pytest.fixture(scope="session") diff --git a/tests/test_foss_cli_flow_cmds.py b/tests/test_foss_cli_flow_cmds.py index ac1d6dd..62c5daf 100644 --- a/tests/test_foss_cli_flow_cmds.py +++ b/tests/test_foss_cli_flow_cmds.py @@ -10,10 +10,10 @@ from fossology import foss_cli -def test_upload_file(runner, click_test_file_path, click_test_file, click_test_dict): +def test_upload_file(runner, test_file_path, click_test_dict): """Test the CLI.""" d = click_test_dict - q_path = PurePath(click_test_file_path, click_test_file) + q_path = PurePath(test_file_path) result = runner.invoke( foss_cli.cli, [ @@ -30,7 +30,7 @@ def test_upload_file(runner, click_test_file_path, click_test_file, click_test_d assert result.exit_code == 0 assert d["VERBOSE"] == 2 assert d["DEBUG"] - assert d["UPLOAD"].uploadname == click_test_file + assert d["UPLOAD"].uploadname == q_path.name assert "Summary of upload" in result.output time.sleep(2) result = runner.invoke( @@ -38,7 +38,7 @@ def test_upload_file(runner, click_test_file_path, click_test_file, click_test_d [ "-vv", "delete_upload", - click_test_file, + q_path.name, ], obj=d, catch_exceptions=False, diff --git a/tests/test_foss_cli_start_workflow.py b/tests/test_foss_cli_start_workflow.py index 2a14445..e356b5f 100644 --- a/tests/test_foss_cli_start_workflow.py +++ b/tests/test_foss_cli_start_workflow.py @@ -9,10 +9,10 @@ def test_start_workflow_calling_with_wrong_report_format_exits_with_1( - runner, click_test_file_path, click_test_file, click_test_dict + runner, test_file_path, click_test_dict ): d = click_test_dict - q_path = PurePath(click_test_file_path, click_test_file) + q_path = PurePath(test_file_path) result = runner.invoke( foss_cli.cli, ["-vv", "start_workflow", str(q_path), "--report_format", "imp"], @@ -24,10 +24,10 @@ def test_start_workflow_calling_with_wrong_report_format_exits_with_1( def test_start_workflow_calling_with_wrong_access_level_exits_with_1( - runner, click_test_file_path, click_test_file, click_test_dict + runner, test_file_path, click_test_dict ): d = click_test_dict - q_path = PurePath(click_test_file_path, click_test_file) + q_path = PurePath(test_file_path) result = runner.invoke( foss_cli.cli, ["-vv", "start_workflow", str(q_path), "--access_level", "imp"], @@ -39,10 +39,10 @@ def test_start_workflow_calling_with_wrong_access_level_exits_with_1( def test_start_workflow_a_dry_run_without_reuse_newest_upload_always_exits_with_1( - runner, click_test_file_path, click_test_file, click_test_dict + runner, test_file_path, click_test_dict ): d = click_test_dict - q_path = PurePath(click_test_file_path, click_test_file) + q_path = PurePath(test_file_path) result = runner.invoke( foss_cli.cli, [ @@ -63,13 +63,13 @@ def test_start_workflow_a_dry_run_without_reuse_newest_upload_always_exits_with_ def test_start_workflow_reuse_newest_job( - runner, click_test_file_path, click_test_file, click_test_dict + runner, test_file_path, click_test_dict ): d = click_test_dict # first upload is the initial one # - it uploads # - it triggers a job on the upload - q_path = PurePath(click_test_file_path, click_test_file) + q_path = PurePath(test_file_path) result = runner.invoke( foss_cli.cli, [ @@ -108,8 +108,8 @@ def test_start_workflow_reuse_newest_job( obj=d, catch_exceptions=False, ) - assert f"Can reuse upload for {click_test_file}" in result.output - assert f"Can reuse old job on Upload {click_test_file}" in result.output + assert f"Can reuse upload for {q_path.name}" in result.output + assert f"Can reuse old job on Upload {q_path.name}" in result.output assert "Generated report" in result.output assert "Report downloaded" in result.output assert "Report written to file: " in result.output @@ -117,7 +117,7 @@ def test_start_workflow_reuse_newest_job( @pytest.fixture(scope="module", autouse=True) -def cleanup_module(runner, click_test_file, click_test_dict): +def cleanup_module(runner, test_file_path, click_test_dict): # Setup code (if any) yield # Teardown code: this runs after all tests in the module @@ -126,7 +126,7 @@ def cleanup_module(runner, click_test_file, click_test_dict): [ "-vv", "delete_upload", - click_test_file, + PurePath(test_file_path).name, ], obj=click_test_dict, catch_exceptions=False, diff --git a/tests/test_upload_from.py b/tests/test_upload_from.py index d643f85..118785e 100644 --- a/tests/test_upload_from.py +++ b/tests/test_upload_from.py @@ -112,8 +112,8 @@ def test_upload_from_url_v2(foss_v2: Fossology): def test_upload_from_server(foss: Fossology): server = { - "path": "/tmp/base-files-11", - "name": "base-files-11", + "path": "/tmp/base-files-10.3", + "name": "base-files-10.3", } server_upload = foss.upload_file( foss.rootFolder, @@ -132,8 +132,8 @@ def test_upload_from_server(foss: Fossology): @pytest.mark.xfail def test_upload_from_server_v2(foss_v2: Fossology): server = { - "path": "/tmp/base-files-11", - "name": "base-files-11", + "path": "/tmp/base-files_10.3-debian10-test", + "name": "base-files_10.3-debian10-test", } server_upload = foss_v2.upload_file( foss_v2.rootFolder, diff --git a/tests/test_upload_licenses_copyrights.py b/tests/test_upload_licenses_copyrights.py index 448349d..9c889e5 100644 --- a/tests/test_upload_licenses_copyrights.py +++ b/tests/test_upload_licenses_copyrights.py @@ -23,12 +23,12 @@ def test_upload_licenses_with_containers(foss: Fossology, upload_with_jobs: Uplo def test_upload_licenses_agent_ojo(foss: Fossology, upload_with_jobs: Upload): licenses = foss.upload_licenses(upload_with_jobs, agent="ojo") - assert len(licenses) == 9 # type: ignore + assert len(licenses) == 10 # type: ignore def test_upload_licenses_agent_monk(foss: Fossology, upload_with_jobs: Upload): licenses = foss.upload_licenses(upload_with_jobs, agent="monk") - assert len(licenses) == 22 # type: ignore + assert len(licenses) == 23 # type: ignore def test_upload_licenses_and_copyrights(foss: Fossology, upload_with_jobs: Upload): diff --git a/tests/test_uploads.py b/tests/test_uploads.py index 2c741c6..79b245c 100644 --- a/tests/test_uploads.py +++ b/tests/test_uploads.py @@ -52,8 +52,8 @@ def test_upload_assignee_fields_are_not_wrapped_in_tuples(): def test_upload_sha1(upload: Upload): - assert upload.uploadname == "base-files_11.tar.xz" - assert upload.hash.sha1 == "D4D663FC2877084362FB2297337BE05684869B00" + assert upload.uploadname == "base-files_10.3-debian10-test.tar.bz2" + assert upload.hash.sha1 == "7A36310AB05CD8401A1CC16B934D998ED491EB12" assert str(upload) == ( f"Upload '{upload.uploadname}' ({upload.id}, {upload.hash.size}B, {upload.hash.sha1}) " f"in folder {upload.foldername} ({upload.folderid})" @@ -65,8 +65,8 @@ def test_upload_sha1(upload: Upload): def test_upload(upload: Upload): - assert upload.uploadname == "base-files_11.tar.xz" - assert upload.hash.sha1 == "D4D663FC2877084362FB2297337BE05684869B00" + assert upload.uploadname == "base-files_10.3-debian10-test.tar.bz2" + assert upload.hash.sha1 == "7A36310AB05CD8401A1CC16B934D998ED491EB12" assert str(upload) == ( f"Upload '{upload.uploadname}' ({upload.id}, {upload.hash.size}B, {upload.hash.sha1}) " f"in folder {upload.foldername} ({upload.folderid})" @@ -90,9 +90,9 @@ def test_upload_for_group(foss: Fossology, test_file_path: str): wait_time=5, ) if upload: - assert upload.uploadname == "base-files_11.tar.xz" + assert upload.uploadname == "base-files_10.3-debian10-test.tar.bz2" uploads = foss.list_uploads(group="upload_access") - assert uploads[0][0].uploadname == "base-files_11.tar.xz" + assert uploads[0][0].uploadname == "base-files_10.3-debian10-test.tar.bz2" foss.delete_upload(upload) foss.delete_group(group_access.id) @@ -111,16 +111,16 @@ def test_upload_for_group_v2(foss_v2: Fossology, test_file_path: str): wait_time=5, ) if upload: - assert upload.uploadname == "base-files_11.tar.xz" + assert upload.uploadname == "base-files_10.3-debian10-test.tar.bz2" uploads = foss_v2.list_uploads(group="upload_access") - assert uploads[0][0].uploadname == "base-files_11.tar.xz" + assert uploads[0][0].uploadname == "base-files_10.3-debian10-test.tar.bz2" foss_v2.delete_upload(upload) foss_v2.delete_group(group_access.id) @pytest.mark.xfail def test_upload_v2(upload_v2: Upload): - assert upload_v2.uploadname == "base-files_11.tar.xz" + assert upload_v2.uploadname == "base-files_10.3-debian10-test.tar.bz2" assert upload_v2.hash.sha1 == "D4D663FC2877084362FB2297337BE05684869B00" assert str(upload_v2) == ( f"Upload '{upload_v2.uploadname}' ({upload_v2.id}, {upload_v2.hash.size}B, {upload_v2.hash.sha1}) " @@ -392,7 +392,7 @@ def test_download_upload(foss: Fossology, upload: Upload): filetype = mimetypes.guess_type(download_path / upload_filename) upload_stat = os.stat(download_path / upload_filename) assert upload_stat.st_size > 0 - assert filetype == ("application/x-tar", "xz") + assert filetype == ("application/x-tar", "bzip2") Path(download_path / upload_filename).unlink() From d0511eebbbb35a95eb6cf8266a73ae4504c8a6f1 Mon Sep 17 00:00:00 2001 From: Marion Deveaud Date: Mon, 22 Jun 2026 15:22:04 +0200 Subject: [PATCH 4/4] fix: make sure the scheduler has started Verify API availalibily before starting the test session. --- .github/workflows/fossologytests.yml | 19 ++++++++++++++++--- tests/conftest.py | 24 ++++++------------------ tests/test_jobs.py | 2 +- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/.github/workflows/fossologytests.yml b/.github/workflows/fossologytests.yml index 830c88f..9bb8942 100644 --- a/.github/workflows/fossologytests.yml +++ b/.github/workflows/fossologytests.yml @@ -28,7 +28,7 @@ jobs: - name: Install host dependencies run: | apt-get -qq update - apt-get install -qq bzip2 gcc git nmap xz-utils + apt-get install -qq bzip2 curl gcc git nmap xz-utils rm -rf /var/lib/apt/lists/* - name: Install Python dependencies run: | @@ -38,10 +38,23 @@ jobs: run: | tar xvf tests/files/base-files_10.3-debian10-test.tar.bz2 -C /tmp - name: Check services - run: nmap fossology -p 80 + run: | + nmap fossology -p 80 + for i in $(seq 1 60); do + if curl --fail --silent --show-error http://fossology/repo/api/v1/info > /dev/null; then + echo "Fossology API is up" + break + fi + if [ "$i" -eq 60 ]; then + echo "Fossology API did not become ready in time" >&2 + exit 1 + fi + echo "Waiting for Fossology API... attempt $i/60" + sleep 5 + done - name: Run tests run: | - poetry run coverage run --source=fossology -m pytest + poetry run coverage run --source=fossology -m pytest --ignore-glob="tests/test_foss_cli*.py" poetry run coverage report -m - name: upload codecoverage results only if the PR originates from the upstream repository if: ${{ github.event.pull_request.head.repo.full_name == github.repository }} diff --git a/tests/conftest.py b/tests/conftest.py index c75ad10..94e3cdf 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -222,7 +222,7 @@ def upload( time.sleep(5) -@pytest.fixture(scope="function") +@pytest.fixture(scope="session") def upload_v2( foss_v2: fossology.Fossology, test_file_path: str, @@ -243,23 +243,11 @@ def upload_v2( @pytest.fixture(scope="session") def upload_with_jobs( - foss: fossology.Fossology, test_file_path: str, foss_schedule_agents: dict -) -> Generator: - upload = foss.upload_file( - foss.rootFolder, - file=test_file_path, - description="Test upload_with_jobs via fossology-python lib", - access_level=AccessLevel.PUBLIC, - wait_time=5, - ) - if upload: - jobs_lookup(foss, upload) - foss.schedule_jobs(foss.rootFolder, upload, foss_schedule_agents) - jobs_lookup(foss, upload) - yield upload - foss.delete_upload(upload) - time.sleep(5) - + foss: fossology.Fossology, upload: Upload, foss_schedule_agents: dict +): + foss.schedule_jobs(foss.rootFolder, upload, foss_schedule_agents) + jobs_lookup(foss, upload) + return upload @pytest.fixture(scope="session") def created_foss_user(foss: fossology.Fossology, foss_user: dict) -> Generator: diff --git a/tests/test_jobs.py b/tests/test_jobs.py index aeb7b32..dda8544 100644 --- a/tests/test_jobs.py +++ b/tests/test_jobs.py @@ -16,7 +16,7 @@ def test_unpack_jobs(foss: Fossology, upload: Upload): jobs, _ = foss.list_jobs(upload=upload) - assert len(jobs) == 1 + assert len(jobs) == 3 def test_nogroup_jobs(foss: Fossology, upload: Upload, foss_schedule_agents: Dict):