diff --git a/kcidev/libs/common.py b/kcidev/libs/common.py index 6d15902..668f483 100644 --- a/kcidev/libs/common.py +++ b/kcidev/libs/common.py @@ -4,6 +4,7 @@ import json import logging import os +import platform import sys from importlib.metadata import PackageNotFoundError, version @@ -20,8 +21,20 @@ except PackageNotFoundError: kcidev_version = "unknown" + +def client_os_family() -> str: + system = platform.system() + if system == "Darwin": + return "macOS" + if system == "Linux" or system == "Windows": + return system + return "unknown" + + kcidev_session = requests.Session() -kcidev_session.headers["User-Agent"] = f"kci-dev/{kcidev_version}" +kcidev_session.headers["User-Agent"] = ( + f"kci-dev/{kcidev_version} ({client_os_family()})" +) # Default connect and read timeouts for HTTP operations. HTTP_TIMEOUT = (10, 60) diff --git a/tests/test_kcidev.py b/tests/test_kcidev.py index 72b3ee2..7b3b978 100644 --- a/tests/test_kcidev.py +++ b/tests/test_kcidev.py @@ -6,7 +6,7 @@ import git import pytest -from kcidev.libs.common import kcidev_session, kcidev_version +from kcidev.libs.common import client_os_family, kcidev_session, kcidev_version from kcidev.subcommands.config import add_config @@ -869,9 +869,27 @@ def test_kcidev_results_build_with_real_id(): pass +@pytest.mark.parametrize( + ("system", "expected"), + [ + ("Linux", "Linux"), + ("Darwin", "macOS"), + ("Windows", "Windows"), + ("", "unknown"), + ("FreeBSD", "unknown"), + ], +) +def test_client_os_family(monkeypatch, system, expected): + monkeypatch.setattr("kcidev.libs.common.platform.system", lambda: system) + assert client_os_family() == expected + + def test_kcidev_session_user_agent(): ua = kcidev_session.headers["User-Agent"] - assert ua == f"kci-dev/{kcidev_version}" + assert re.fullmatch( + rf"kci-dev/{re.escape(kcidev_version)} \((Linux|macOS|Windows|unknown)\)", + ua, + ) def test_kcidev_version_from_metadata():