Using CPython 3.14.6 interpreter at: /usr/local/bin/python3 Creating virtual environment at: .venv Resolved 32 packages in 4.32s Building slices-monitor-test-runner @ file:///app Built slices-monitor-test-runner @ file:///app Prepared 1 package in 612ms 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.23s + 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.dev189+g506e4860f (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-29 05:03:35.085338 UTC - Installing Slices CLI (latest stable version). 2026-07-29 05:03:35.085596 UTC - Run: /usr/local/bin/uv pip install --index=https://doc.slices-ri.eu/pypi/ slices-cli 2026-07-29 05:03:43.475190 UTC - Slices CLI installed. 2026-07-29 05:03:43.475631 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-29 05:03:43.477915 UTC - ls -a /root/ /scripts/ (error 2): None ls: cannot access '/scripts/': No such file or directory /root/: . .. .cache .local .slices run_test_runner.sh slices-cli-venv 2026-07-29 05:03:43.477984 UTC - env: {'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-29 05:03:43.478049 UTC - which slices: /app/.venv/bin/slices 2026-07-29 05:03:43.478069 UTC - Slices CLI exe: 'slices' 2026-07-29 05:03:43.478084 UTC - Slices CLI venv path: '/root/slices-cli-venv/' 2026-07-29 05:03:43.478218 UTC - Run: slices --version 2026-07-29 05:03:47.927064 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-29 05:03:47.927361 UTC - Run: slices pubkey list --format text 2026-07-29 05:03:49.153918 UTC - Pubkey already registered 2026-07-29 05:03:49.154159 UTC - Run: slices bi infrastructure list --format csv --all --refresh 2026-07-29 05:03:50.103459 UTC - Refreshed infrastructure list. Total: 24 entries. 2026-07-29 05:03:50.103606 UTC - Check List Flavors 2026-07-29 05:03:50.103799 UTC - Run: slices bi --infra fr-lyon1-bi-baremetal1 flavor list -f json 2026-07-29 05:03:52.295042 UTC - Content of log file '/test_dir/step_ListFlavors_command_1.txt': slices bi --infra fr-lyon1-bi-baremetal1 flavor list -f json 2026-07-29 05:03:52.295290 UTC - Content of log file '/test_dir/flavor-list_STDERR.txt': ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /app/.venv/lib/python3.14/site-packages/httpx/_transports/default.py:101 in map_httpcore_exceptions │ │ │ │ 98 │ if len(HTTPCORE_EXC_MAP) == 0: │ │ 99 │ │ HTTPCORE_EXC_MAP = _load_httpcore_exceptions() │ │ 100 │ try: │ │ ❱ 101 │ │ yield │ │ 102 │ except Exception as exc: │ │ 103 │ │ mapped_exc = None │ │ 104 │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpx/_transports/default.py:250 in handle_request │ │ │ │ 247 │ │ │ extensions=request.extensions, │ │ 248 │ │ ) │ │ 249 │ │ with map_httpcore_exceptions(): │ │ ❱ 250 │ │ │ resp = self._pool.handle_request(req) │ │ 251 │ │ │ │ 252 │ │ assert isinstance(resp.stream, typing.Iterable) │ │ 253 │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpcore/_sync/connection_pool.py:256 in handle_request │ │ │ │ 253 │ │ │ │ closing = self._assign_requests_to_connections() │ │ 254 │ │ │ │ │ 255 │ │ │ self._close_connections(closing) │ │ ❱ 256 │ │ │ raise exc from None │ │ 257 │ │ │ │ 258 │ │ # Return the response. Note that in this case we still have to manage │ │ 259 │ │ # the point at which the response is closed. │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpcore/_sync/connection_pool.py:236 in handle_request │ │ │ │ 233 │ │ │ │ │ │ 234 │ │ │ │ try: │ │ 235 │ │ │ │ │ # Send the request on the assigned connection. │ │ ❱ 236 │ │ │ │ │ response = connection.handle_request( │ │ 237 │ │ │ │ │ │ pool_request.request │ │ 238 │ │ │ │ │ ) │ │ 239 │ │ │ │ except ConnectionNotAvailable: │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpcore/_sync/connection.py:101 in handle_request │ │ │ │ 98 │ │ │ │ │ │ ) │ │ 99 │ │ except BaseException as exc: │ │ 100 │ │ │ self._connect_failed = True │ │ ❱ 101 │ │ │ raise exc │ │ 102 │ │ │ │ 103 │ │ return self._connection.handle_request(request) │ │ 104 │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpcore/_sync/connection.py:78 in handle_request │ │ │ │ 75 │ │ try: │ │ 76 │ │ │ with self._request_lock: │ │ 77 │ │ │ │ if self._connection is None: │ │ ❱ 78 │ │ │ │ │ stream = self._connect(request) │ │ 79 │ │ │ │ │ │ │ 80 │ │ │ │ │ ssl_object = stream.get_extra_info("ssl_object") │ │ 81 │ │ │ │ │ http2_negotiated = ( │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpcore/_sync/connection.py:156 in _connect │ │ │ │ 153 │ │ │ │ │ │ "timeout": timeout, │ │ 154 │ │ │ │ │ } │ │ 155 │ │ │ │ │ with Trace("start_tls", logger, request, kwargs) as trace: │ │ ❱ 156 │ │ │ │ │ │ stream = stream.start_tls(**kwargs) │ │ 157 │ │ │ │ │ │ trace.return_value = stream │ │ 158 │ │ │ │ return stream │ │ 159 │ │ │ except (ConnectError, ConnectTimeout): │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpcore/_backends/sync.py:154 in start_tls │ │ │ │ 151 │ │ │ socket.timeout: ConnectTimeout, │ │ 152 │ │ │ OSError: ConnectError, │ │ 153 │ │ } │ │ ❱ 154 │ │ with map_exceptions(exc_map): │ │ 155 │ │ │ try: │ │ 156 │ │ │ │ if isinstance(self._sock, ssl.SSLSocket): # pragma: no cover │ │ 157 │ │ │ │ │ # If the underlying socket has already been upgraded │ │ │ │ /usr/local/lib/python3.14/contextlib.py:162 in __exit__ │ │ │ │ 159 │ │ │ │ # tell if we get the same exception back │ │ 160 │ │ │ │ value = typ() │ │ 161 │ │ │ try: │ │ ❱ 162 │ │ │ │ self.gen.throw(value) │ │ 163 │ │ │ except StopIteration as exc: │ │ 164 │ │ │ │ # Suppress StopIteration *unless* it's the same exception that │ │ 165 │ │ │ │ # was passed to throw(). This prevents a StopIteration │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpcore/_exceptions.py:14 in map_exceptions │ │ │ │ 11 │ except Exception as exc: # noqa: PIE786 │ │ 12 │ │ for from_exc, to_exc in map.items(): │ │ 13 │ │ │ if isinstance(exc, from_exc): │ │ ❱ 14 │ │ │ │ raise to_exc(exc) from exc │ │ 15 │ │ raise # pragma: nocover │ │ 16 │ │ 17 │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ConnectError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1082) The above exception was the direct cause of the following exception: ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/util/pagination.py:84 in __init__ │ │ │ │ 81 │ │ self._client = client │ │ 82 │ │ self._params = params │ │ 83 │ │ try: │ │ ❱ 84 │ │ │ response = self._client.get(url, params=params) │ │ 85 │ │ except HttpCoreConnectError as err: │ │ 86 │ │ │ raise ApiConnectError(url) from err │ │ 87 │ │ except HttpxConnectError as err: │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpx/_client.py:1053 in get │ │ │ │ 1050 │ │ │ │ 1051 │ │ **Parameters**: See `httpx.request`. │ │ 1052 │ │ """ │ │ ❱ 1053 │ │ return self.request( │ │ 1054 │ │ │ "GET", │ │ 1055 │ │ │ url, │ │ 1056 │ │ │ params=params, │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpx/_client.py:825 in request │ │ │ │ 822 │ │ │ timeout=timeout, │ │ 823 │ │ │ extensions=extensions, │ │ 824 │ │ ) │ │ ❱ 825 │ │ return self.send(request, auth=auth, follow_redirects=follow_redirects) │ │ 826 │ │ │ 827 │ @contextmanager │ │ 828 │ def stream( │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpx/_client.py:914 in send │ │ │ │ 911 │ │ │ │ 912 │ │ auth = self._build_request_auth(request, auth) │ │ 913 │ │ │ │ ❱ 914 │ │ response = self._send_handling_auth( │ │ 915 │ │ │ request, │ │ 916 │ │ │ auth=auth, │ │ 917 │ │ │ follow_redirects=follow_redirects, │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpx/_client.py:942 in _send_handling_auth │ │ │ │ 939 │ │ │ request = next(auth_flow) │ │ 940 │ │ │ │ │ 941 │ │ │ while True: │ │ ❱ 942 │ │ │ │ response = self._send_handling_redirects( │ │ 943 │ │ │ │ │ request, │ │ 944 │ │ │ │ │ follow_redirects=follow_redirects, │ │ 945 │ │ │ │ │ history=history, │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpx/_client.py:979 in _send_handling_redirects │ │ │ │ 976 │ │ │ for hook in self._event_hooks["request"]: │ │ 977 │ │ │ │ hook(request) │ │ 978 │ │ │ │ │ ❱ 979 │ │ │ response = self._send_single_request(request) │ │ 980 │ │ │ try: │ │ 981 │ │ │ │ for hook in self._event_hooks["response"]: │ │ 982 │ │ │ │ │ hook(response) │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpx/_client.py:1014 in _send_single_request │ │ │ │ 1011 │ │ │ ) │ │ 1012 │ │ │ │ 1013 │ │ with request_context(request=request): │ │ ❱ 1014 │ │ │ response = transport.handle_request(request) │ │ 1015 │ │ │ │ 1016 │ │ assert isinstance(response.stream, SyncByteStream) │ │ 1017 │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpx/_transports/default.py:249 in handle_request │ │ │ │ 246 │ │ │ content=request.stream, │ │ 247 │ │ │ extensions=request.extensions, │ │ 248 │ │ ) │ │ ❱ 249 │ │ with map_httpcore_exceptions(): │ │ 250 │ │ │ resp = self._pool.handle_request(req) │ │ 251 │ │ │ │ 252 │ │ assert isinstance(resp.stream, typing.Iterable) │ │ │ │ /usr/local/lib/python3.14/contextlib.py:162 in __exit__ │ │ │ │ 159 │ │ │ │ # tell if we get the same exception back │ │ 160 │ │ │ │ value = typ() │ │ 161 │ │ │ try: │ │ ❱ 162 │ │ │ │ self.gen.throw(value) │ │ 163 │ │ │ except StopIteration as exc: │ │ 164 │ │ │ │ # Suppress StopIteration *unless* it's the same exception that │ │ 165 │ │ │ │ # was passed to throw(). This prevents a StopIteration │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpx/_transports/default.py:118 in map_httpcore_exceptions │ │ │ │ 115 │ │ │ raise │ │ 116 │ │ │ │ 117 │ │ message = str(exc) │ │ ❱ 118 │ │ raise mapped_exc(message) from exc │ │ 119 │ │ 120 │ │ 121 class ResponseStream(SyncByteStream): │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ConnectError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1082) The above exception was the direct cause of the following exception: ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /app/.venv/lib/python3.14/site-packages/slices_cli_bi/commands/bi_flavor.py:37 in wrapper_handle_some_exceptions │ │ │ │ 34 │ def wrapper_handle_some_exceptions(*args, **kwargs): │ │ 35 │ │ """Function wrapper for handle_some_exceptions.""" # noqa: D401 │ │ 36 │ │ try: │ │ ❱ 37 │ │ │ return func(*args, **kwargs) │ │ 38 │ │ except ServiceException as e: │ │ 39 │ │ │ err_console.print("[red]There was a connection problem. The service might be down. :zap:") │ │ 40 │ │ │ err_console.print(f"[red]Details: {get_api_error_detail(e)}") │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_cli_bi/commands/bi_flavor.py:360 in list_flavors │ │ │ │ 357 │ ] = "table", # type: ignore │ │ 358 ): │ │ 359 │ """List flavors.""" │ │ ❱ 360 │ flavors = ctx.obj.api.for_project(ctx.obj.require_project_id()).bi(ctx.obj.infra_id).flavor.list() │ │ 361 │ │ │ 362 │ # we need to run over the flavors twice, so we need to store them in a list │ │ 363 │ flavors = list(flavors) │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_bi/bi_flavor.py:208 in list │ │ │ │ 205 │ │ │ 206 │ def list(self) -> Iterable[AnyFlavor]: │ │ 207 │ │ """List all flavors.""" │ │ ❱ 208 │ │ return PagedCollection("flavor", AnyFlavor, f"{self._api_base_path}", self._client) # pyright: ignore [reportArgumentType] │ │ 209 │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/util/pagination.py:88 in __init__ │ │ │ │ 85 │ │ except HttpCoreConnectError as err: │ │ 86 │ │ │ raise ApiConnectError(url) from err │ │ 87 │ │ except HttpxConnectError as err: │ │ ❱ 88 │ │ │ raise ApiConnectError(url) from err │ │ 89 │ │ try: │ │ 90 │ │ │ response.raise_for_status() │ │ 91 │ │ │ self._first_page = self._decoder.decode(response.content) │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ApiConnectError: Connection Error connection to /apis/bi.slices.eu/v1/flavors/ 2026-07-29 05:03:52.295417 UTC - Error in test step 'List Flavors': "slices bi flavor list" failed 2026-07-29 05:03:52.295492 UTC - Destroying tst-6dc4a0f2 tst 2026-07-29 05:03:52.295656 UTC - Run: slices bi --infra fr-lyon1-bi-baremetal1 destroy --experiment tst-6dc4a0f2 tst 2026-07-29 05:03:53.316302 UTC - Content of log file '/test_dir/step_Destroy_command_1.txt': slices bi --infra fr-lyon1-bi-baremetal1 destroy --experiment tst-6dc4a0f2 tst 2026-07-29 05:03:53.316396 UTC - Content of log file '/test_dir/destroy.txt': Could not retrieve experiment tst-6dc4a0f2 ❌ 2026-07-29 05:03:53.316422 UTC - Error in test step 'Destroy': "slices bi destroy" failed (return value is 1) 2026-07-29 05:03:53.316484 UTC - Wait 2s before retry 2026-07-29 05:03:56.295896 UTC - Content of log file '/test_dir/step_DestroyRetry1_retry1_command_1.txt': slices bi --infra fr-lyon1-bi-baremetal1 destroy --experiment tst-6dc4a0f2 tst 2026-07-29 05:03:56.295981 UTC - Content of log file '/test_dir/destroy_retry1.txt': Could not retrieve experiment tst-6dc4a0f2 ❌ 2026-07-29 05:03:56.296004 UTC - Error in test step 'Destroy (Retry 1)': "slices bi destroy" failed (return value is 1) 2026-07-29 05:03:56.296055 UTC - Wait 2s before retry 2026-07-29 05:03:59.459335 UTC - Content of log file '/test_dir/step_DestroyRetry2_retry2_command_1.txt': slices bi --infra fr-lyon1-bi-baremetal1 destroy --experiment tst-6dc4a0f2 tst 2026-07-29 05:03:59.459418 UTC - Content of log file '/test_dir/destroy_retry2.txt': Could not retrieve experiment tst-6dc4a0f2 ❌ 2026-07-29 05:03:59.459455 UTC - Error in test step 'Destroy (Retry 2)': "slices bi destroy" failed (return value is 1) 2026-07-29 05:03:59.459508 UTC - Wait 2s before retry 2026-07-29 05:04:02.879047 UTC - Content of log file '/test_dir/step_DestroyRetry3_retry3_command_1.txt': slices bi --infra fr-lyon1-bi-baremetal1 destroy --experiment tst-6dc4a0f2 tst 2026-07-29 05:04:02.908926 UTC - Content of log file '/test_dir/destroy_retry3.txt': Could not retrieve experiment tst-6dc4a0f2 ❌ 2026-07-29 05:04:02.908993 UTC - Error in test step 'Destroy (Retry 3)': "slices bi destroy" failed (return value is 1)