Using CPython 3.14.6 interpreter at: /usr/local/bin/python3 Creating virtual environment at: .venv Resolved 32 packages in 7.35s Building slices-monitor-test-runner @ file:///app Built slices-monitor-test-runner @ file:///app Prepared 1 package in 398ms 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 1.11s + 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.3.post1 + 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-singlenode-login 2026-07-26 13:10:43.705151 UTC - Installing Slices CLI (latest stable version). 2026-07-26 13:10:43.705371 UTC - Run: /usr/local/bin/uv pip install --index=https://doc.slices-ri.eu/pypi/ slices-cli 2026-07-26 13:10:49.669034 UTC - Slices CLI installed. 2026-07-26 13:10:49.669212 UTC - PATH: {'PATH': '/app/.venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.local/bin/:/root/slices-cli-venv/bin', 'COLUMNS': '200'} 2026-07-26 13:10:49.670836 UTC - ls -a /root/ /scripts/ (error 2): None b"ls: cannot access '/scripts/': No such file or directory\n/root/:\n.\n..\n.cache\n.local\n.slices\nrun_test_runner.sh\nslices-cli-venv\n" 2026-07-26 13:10:49.671678 UTC - which slices: b'/app/.venv/bin/slices\n' 2026-07-26 13:10:49.671804 UTC - OS release: PRETTY_NAME="Debian GNU/Linux 13 (trixie)" NAME="Debian GNU/Linux" VERSION_ID="13" VERSION="13 (trixie)" VERSION_CODENAME=trixie DEBIAN_VERSION_FULL=13.5 ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/" 2026-07-26 13:10:49.671834 UTC - Slices CLI exe: 'slices' 2026-07-26 13:10:49.671851 UTC - Slices CLI venv path: '/root/slices-cli-venv/' 2026-07-26 13:10:49.671967 UTC - Run: slices --version 2026-07-26 13:10:55.459121 UTC - version: Slices CLI v2026.1.2 Slices CLI core v1.2.4 Slices CLI ai v1.1.0 Slices CLI bi v2.2.0 Slices clientlib bi v6.1.1 Slices clientlib ai v1.0.0 Slices clientlib core v5.5.1 2026-07-26 13:10:55.459623 UTC - Run: slices pubkey list --format text 2026-07-26 13:10:58.117750 UTC - Pubkey already registered 2026-07-26 13:10:58.117996 UTC - Run: slices bi infrastructure list --format csv --all --refresh 2026-07-26 13:11:00.392111 UTC - Content of log file '/test_dir/step_Prepareinfralist_command_1.txt': slices bi infrastructure list --format csv --all --refresh 2026-07-26 13:11:00.392275 UTC - Content of log file '/test_dir/infra_list_STDERR.txt': /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/base/config.py:282: UserWarning: Problem reading config cache from /root/.slices/cache/cache_slices-central-config.json. Reverting to online version return load_default_central_api_clients_config(_no_auth_client_maker) ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /app/.venv/lib/python3.14/site-packages/slices_cli_bi/main.py:157 in initialize_api_clients │ │ │ │ 154 │ # This will automatically load the auth token from the cache, and refresh it if needed. │ │ 155 │ # This also automatically supports external auth token providers that use SLICES_AUTH_TOKEN_PROVIDER. │ │ 156 │ try: │ │ ❱ 157 │ │ auth_token, user_info = load_auth_token_and_user() │ │ 158 │ except CredentialsBrokenError as e: │ │ 159 │ │ err_console.print(f"[bold red]{e} :x:") │ │ 160 │ │ err_console.print("[red]Please log in again") │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/base/auth.py:188 in load_auth_token_and_user │ │ │ │ 185 │ │ │ 186 │ try: │ │ 187 │ │ auth_token = load_auth_token() │ │ ❱ 188 │ │ user_info = parse_auth_token(auth_token) if auth_token else None │ │ 189 │ except (AuthlibBaseError, PyJWTError): │ │ 190 │ │ try: │ │ 191 │ │ │ delete_auth_token() │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/base/auth.py:71 in parse_auth_token │ │ │ │ 68 def parse_auth_token(auth_token: OAuthToken) -> AuthJWT: │ │ 69 │ """Parse auth token into an AuthJWT object.""" │ │ 70 │ jwt_token = auth_token.access_token │ │ ❱ 71 │ signing_key = _get_jwks_client().get_signing_key_from_jwt(jwt_token) │ │ 72 │ │ │ 73 │ return jwt.decode( │ │ 74 │ │ jwt_token, │ │ │ │ /app/.venv/lib/python3.14/site-packages/jwt/jwks_client.py:226 in get_signing_key_from_jwt │ │ │ │ 223 │ │ """ │ │ 224 │ │ unverified = decode_token(token, options={"verify_signature": False}) │ │ 225 │ │ header = unverified["header"] │ │ ❱ 226 │ │ return self.get_signing_key(header.get("kid")) │ │ 227 │ │ │ 228 │ @staticmethod │ │ 229 │ def match_kid(signing_keys: list[PyJWK], kid: str) -> PyJWK | None: │ │ │ │ /app/.venv/lib/python3.14/site-packages/jwt/jwks_client.py:198 in get_signing_key │ │ │ │ 195 │ │ :raises PyJWKClientError: If no matching key is found after │ │ 196 │ │ │ refreshing. │ │ 197 │ │ """ │ │ ❱ 198 │ │ signing_keys = self.get_signing_keys() │ │ 199 │ │ signing_key = self.match_kid(signing_keys, kid) │ │ 200 │ │ │ │ 201 │ │ if not signing_key: │ │ │ │ /app/.venv/lib/python3.14/site-packages/jwt/jwks_client.py:173 in get_signing_keys │ │ │ │ 170 │ │ :rtype: list[PyJWK] │ │ 171 │ │ :raises PyJWKClientError: If no signing keys are found. │ │ 172 │ │ """ │ │ ❱ 173 │ │ jwk_set = self.get_jwk_set(refresh) │ │ 174 │ │ signing_keys = [ │ │ 175 │ │ │ jwk_set_key │ │ 176 │ │ │ for jwk_set_key in jwk_set.keys │ │ │ │ /app/.venv/lib/python3.14/site-packages/jwt/jwks_client.py:153 in get_jwk_set │ │ │ │ 150 │ │ │ data = self.jwk_set_cache.get() │ │ 151 │ │ │ │ 152 │ │ if data is None: │ │ ❱ 153 │ │ │ data = self.fetch_data() │ │ 154 │ │ │ │ 155 │ │ if not isinstance(data, dict): │ │ 156 │ │ │ raise PyJWKClientError("The JWKS endpoint did not return a JSON object") │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/base/jwk_cache.py:49 in fetch_data │ │ │ │ 46 │ │ cache_entry = load_cache_entry("jwk", uri_b64, timedelta(hours=6)) │ │ 47 │ │ if cache_entry: │ │ 48 │ │ │ try: │ │ ❱ 49 │ │ │ │ return json.loads(cache_entry.content) │ │ 50 │ │ │ except json.JSONDecodeError: │ │ 51 │ │ │ │ clear_cache_entry("jwk", uri_b64) │ │ 52 │ │ │ │ raise │ │ │ │ /usr/local/lib/python3.14/json/__init__.py:352 in loads │ │ │ │ 349 │ if (cls is None and object_hook is None and │ │ 350 │ │ │ parse_int is None and parse_float is None and │ │ 351 │ │ │ parse_constant is None and object_pairs_hook is None and not kw): │ │ ❱ 352 │ │ return _default_decoder.decode(s) │ │ 353 │ if cls is None: │ │ 354 │ │ cls = JSONDecoder │ │ 355 │ if object_hook is not None: │ │ │ │ /usr/local/lib/python3.14/json/decoder.py:345 in decode │ │ │ │ 342 │ │ containing a JSON document). │ │ 343 │ │ │ │ 344 │ │ """ │ │ ❱ 345 │ │ obj, end = self.raw_decode(s, idx=_w(s, 0).end()) │ │ 346 │ │ end = _w(s, end).end() │ │ 347 │ │ if end != len(s): │ │ 348 │ │ │ raise JSONDecodeError("Extra data", s, end) │ │ │ │ /usr/local/lib/python3.14/json/decoder.py:363 in raw_decode │ │ │ │ 360 │ │ try: │ │ 361 │ │ │ obj, end = self.scan_once(s, idx) │ │ 362 │ │ except StopIteration as err: │ │ ❱ 363 │ │ │ raise JSONDecodeError("Expecting value", s, err.value) from None │ │ 364 │ │ return obj, end │ │ 365 │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ JSONDecodeError: Expecting value: line 1 column 1 (char 0) 2026-07-26 13:11:00.392349 UTC - Error in test step 'Prepare infra list': "slices bi infrastructure list" failed ERROR:slices_monitor_test_runner.main:Test BLOCKED 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_singlenode_login.py", line 1557, in run self._list_infras(refresh=True) ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^ File "/app/src/slices_monitor_test_runner/test_runners/slices_singlenode_login.py", line 511, in _list_infras raise SlicesTestFailure('"slices bi infrastructure list" failed') slices_monitor_test_runner.exceptions.SlicesTestFailure: "slices bi infrastructure list" failed 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_singlenode_login.py", line 1551, in run with self.step( ~~~~~~~~~^ "Prepare infra list", ^^^^^^^^^^^^^^^^^^^^^ ...<2 lines>... blocked_msg="Failed to prepare for login test (refresh infra list)", ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ): ^ 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 208, in step raise SlicesTestBlocked( ...<3 lines>... ) from e slices_monitor_test_runner.exceptions.SlicesTestBlocked: Step 'Prepare infra list' BLOCKED