Using CPython 3.14.6 interpreter at: /usr/local/bin/python3 Creating virtual environment at: .venv Resolved 32 packages in 5.77s Building slices-monitor-test-runner @ file:///app Built slices-monitor-test-runner @ file:///app Prepared 1 package in 204ms warning: Failed to hardlink files; falling back to full copy. This may lead to degraded performance. If the cache and target directories are on different filesystems, hardlinking may not be supported. If this is intentional, set `export UV_LINK_MODE=copy` or use `--link-mode=copy` to suppress this warning. Installed 32 packages in 715ms + annotated-types==0.8.0 + anyio==4.14.2 + authlib==1.7.2 + bcrypt==5.0.0 + certifi==2026.7.22 + cffi==2.1.0 + cryptography==49.0.0 + dnspython==2.8.0 + h11==0.16.0 + httpcore==1.0.9 + httpx==0.28.1 + httpx-oauth==0.17.0 + idna==3.18 + invoke==3.0.3 + joserfc==1.7.4 + msgspec==0.21.1 + packaging==26.2 + paramiko==4.0.0 + pycparser==3.0 + pydantic==2.13.4 + pydantic-core==2.46.4 + pyjwt==2.13.0 + pynacl==1.6.2 + pytz==2026.2 + pyyaml==6.0.3 + slices-clientlib-bi==5.1.2 + slices-clientlib-core==5.6.0 + slices-monitor-test-runner==0.1.dev187+g005dd054e (from file:///app) + tomli-w==1.2.0 + tomlkit==0.15.1 + typing-extensions==4.16.0 + typing-inspection==0.4.2 Run Test: slices-bi-health-check 2026-07-24 15:12:12.385893 UTC - Check DNS 2026-07-24 15:12:12.386650 UTC - Checking system DNS for API host bi.theblueprintfactory.org 2026-07-24 15:12:12.387161 UTC - Resolved to 138.96.245.100 2026-07-24 15:12:12.387229 UTC - Checking direct DNS for API host bi.theblueprintfactory.org using DNS server 8.8.8.8 2026-07-24 15:12:12.394751 UTC - Resolved to 138.96.245.100 2026-07-24 15:12:12.394802 UTC - Checking direct DNS for API host bi.theblueprintfactory.org using DNS server 1.1.1.1 2026-07-24 15:12:12.399055 UTC - Resolved to 138.96.245.100 2026-07-24 15:12:12.399152 UTC - Check Basic Connectivity 2026-07-24 15:12:12.399192 UTC - Checking basic connectivity to BI API of infra fr-sophia2-bi-vm1 at https://bi.theblueprintfactory.org/vm/1 2026-07-24 15:12:12.399222 UTC - Connecting to: https://bi.theblueprintfactory.org/vm/1 2026-07-24 15:12:12.500925 UTC - HTTP connection works. HTTP response code: 400 2026-07-24 15:12:12.501035 UTC - Check List Flavors Failed to exchange token due to HTTP_400_BAD_REQUEST. DEBUG INFO: now: 2026-07-24T15:12:12.524618+00:00 data sent: { "grant_type": "urn:ietf:params:oauth:grant-type:token-exchange", "subject_token": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImVjMSJ9.eyJpc3MiOiJodHRwczovL2FjY291bnQuaWxhYnQuaW1lYy5iZSIsImF1ZCI6Imh0dHBzOi8vY2xpLnNsaWNlcy1yaS5ldSIsImlhdCI6MTc4NDkwNDM0OCwiZXhwIjoxNzg0OTA3OTQ4LCJhdXRoX3RpbWUiOjE3ODQ5MDQzNDgsInN1YiI6InVzZXJfYWNjb3VudC5pbGFidC5pbWVjLmJlXzRuNGt3NzlicmM5OXZhNTlqa2E2dGpxZDhmIiwic2NvcGUiOiJvcGVuaWQgdXNlcmluZm8gcHJvamVjdHMiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ3dmRlbWVlciIsImp0aSI6IlIybmdoRnM0eFJIOXlIQmIxYWdzMUk1VmZLcURxRE9qIn0.8YNykagB4t4Uj9CMGp5h61TkEoettGLZgqWjtNt0SLcXY_dC4cJmy00F7FMLqejfamkjahxQcIfUsDSCWPRUfQ", "subject_token_type": "urn:ietf:params:oauth:token-type:access_token", "client_id": "IH56QyF0MWbhCPA8IIef7MTm", "client_secret": "rEn14uIa0JEBfWMjJdvj5py0xaKHEfQJ6TNHYPrULLnwRczo", "requested_token_type": "urn:ietf:params:oauth:token-type:access_token", "audience": "https://cli.slices-ri.eu", "scope": "openid userinfo projects" } response: b'{"error": "invalid_grant", "error_description": "Could not validate subject token"}' 2026-07-24 15:12:12.527922 UTC - Error in test step 'List Flavors': Client error '400 BAD REQUEST' for url 'https://portal.slices-ri.eu/oauth/token' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400 2026-07-24 15:12:12.528047 UTC - Response content: {"error": "invalid_grant", "error_description": "Could not validate subject token"} ERROR:slices_monitor_test_runner.main:Test Failed with exception Traceback (most recent call last): File "/app/src/slices_monitor_test_runner/test_runners/test_runner_base.py", line 170, in step yield File "/app/src/slices_monitor_test_runner/test_runners/slices_bi_health_check.py", line 96, in run self._check_flavors() ~~~~~~~~~~~~~~~~~~~^^ File "/app/src/slices_monitor_test_runner/test_runners/slices_bi_health_check.py", line 51, in _check_flavors flavors = list(self._bi_client().flavor.list()) ~~~~~~~~~~~~~~~^^ File "/app/src/slices_monitor_test_runner/test_runners/test_runner_base.py", line 74, in _bi_client project_id = self._client().project.list()[0].id ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^ File "/app/.venv/lib/python3.14/site-packages/slices_clientlib_core/project.py", line 101, in list response = self._client.get(self.API_BASE_PATH, params=params) File "/app/.venv/lib/python3.14/site-packages/httpx/_client.py", line 1053, in get return self.request( ~~~~~~~~~~~~^ "GET", ^^^^^^ ...<7 lines>... extensions=extensions, ^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/httpx/_client.py", line 825, in request return self.send(request, auth=auth, follow_redirects=follow_redirects) ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/httpx/_client.py", line 914, in send response = self._send_handling_auth( request, ...<2 lines>... history=[], ) File "/app/.venv/lib/python3.14/site-packages/httpx/_client.py", line 939, in _send_handling_auth request = next(auth_flow) File "/app/.venv/lib/python3.14/site-packages/httpx/_auth.py", line 75, in sync_auth_flow request = next(flow) File "/app/.venv/lib/python3.14/site-packages/slices_clientlib_core/client.py", line 96, in auth_flow self._token_for_audience = get_access_token_for_audience(auth_token, self.target_audience, self.project_id) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/slices_clientlib_core/oauth2/token_exchange.py", line 116, in get_access_token_for_audience response.raise_for_status() ~~~~~~~~~~~~~~~~~~~~~~~~~^^ File "/app/.venv/lib/python3.14/site-packages/httpx/_models.py", line 829, in raise_for_status raise HTTPStatusError(message, request=request, response=self) httpx.HTTPStatusError: Client error '400 BAD REQUEST' for url 'https://portal.slices-ri.eu/oauth/token' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/src/slices_monitor_test_runner/main.py", line 76, in run_test return _get_test_by_test_spec(steps, test_dir, test_spec).run() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^ File "/app/src/slices_monitor_test_runner/test_runners/slices_bi_health_check.py", line 92, in run with self.step( ~~~~~~~~~^ "List Flavors", ^^^^^^^^^^^^^^^ description="Requesting flavors using Slices BI API", ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ): ^ File "/usr/local/lib/python3.14/contextlib.py", line 162, in __exit__ self.gen.throw(value) ~~~~~~~~~~~~~~^^^^^^^ File "/app/src/slices_monitor_test_runner/test_runners/test_runner_base.py", line 214, in step raise SlicesTestFailure(f"Step {name!r} {retry_suffix2} failed") from e slices_monitor_test_runner.exceptions.SlicesTestFailure: Step 'List Flavors' failed