Using CPython 3.14.6 interpreter at: /usr/local/bin/python3 Creating virtual environment at: .venv Resolved 32 packages in 3.58s Building slices-monitor-test-runner @ file:///app Built slices-monitor-test-runner @ file:///app Prepared 1 package in 599ms 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.48s + annotated-types==0.7.0 + anyio==4.14.2 + authlib==1.7.2 + bcrypt==5.0.0 + certifi==2026.6.17 + 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.3 + 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-singlenode-login 2026-07-18 04:15:32.609355 UTC - Installing Slices CLI (latest stable version). 2026-07-18 04:15:32.611558 UTC - Run: /usr/local/bin/uv pip install --index=https://doc.slices-ri.eu/pypi/ slices-cli 2026-07-18 04:15:43.618086 UTC - Slices CLI installed. 2026-07-18 04:15:43.621696 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-18 04:15:43.624222 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-18 04:15:43.625227 UTC - which slices: b'/app/.venv/bin/slices\n' 2026-07-18 04:15:43.625512 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-18 04:15:43.625544 UTC - Slices CLI exe: 'slices' 2026-07-18 04:15:43.625561 UTC - Slices CLI venv path: '/root/slices-cli-venv/' 2026-07-18 04:15:43.625674 UTC - Run: slices --version 2026-07-18 04:15:50.438688 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-18 04:15:50.442286 UTC - Run: slices pubkey list --format text 2026-07-18 04:15:53.097390 UTC - Pubkey already registered 2026-07-18 04:15:53.097611 UTC - Run: slices bi infrastructure list --format csv --all --refresh 2026-07-18 04:15:55.163671 UTC - Refreshed infrastructure list. Total: 24 entries. 2026-07-18 04:15:55.163946 UTC - Check List Flavors 2026-07-18 04:15:55.164147 UTC - Run: slices bi --infra be-gent1-bi-vm1 flavor list -f json 2026-07-18 04:15:57.902503 UTC - Check List DiskImages 2026-07-18 04:15:57.902892 UTC - Run: slices bi --infra be-gent1-bi-vm1 diskimage list -f json 2026-07-18 04:15:59.347181 UTC - Requesting resources 2026-07-18 04:15:59.347944 UTC - Run: slices bi --infra be-gent1-bi-vm1 create tst --image 'Ubuntu 24.04.3' --flavor tiny --duration 2h --experiment tst-9a136b48 --public-ipv4 2026-07-18 04:16:03.691449 UTC - Resource ID: r_be-gent1-bi-vm1_01kxsq0fdafgfrcnpn0hw1gh2m 2026-07-18 04:16:03.691761 UTC - Waiting until resource ready 2026-07-18 04:16:05.692105 UTC - Run: slices bi --infra be-gent1-bi-vm1 list-resources --format json --experiment tst-9a136b48 tst 2026-07-18 04:16:07.065811 UTC - Status: IMAGING 2026-07-18 04:16:09.921020 UTC - Status: IMAGING 2026-07-18 04:16:12.937145 UTC - Status: IMAGING 2026-07-18 04:16:16.062155 UTC - Status: BOOTING 2026-07-18 04:16:19.194603 UTC - Status: BOOTING 2026-07-18 04:16:22.447799 UTC - Status: BOOTING 2026-07-18 04:16:26.017514 UTC - Status: INITIALIZING 2026-07-18 04:16:29.931870 UTC - Status: UP 2026-07-18 04:16:29.932125 UTC - Experiment ID: exp_expauth.ilabt.imec.be_01kxsq0e8me3hskr120a7krtem 2026-07-18 04:16:29.932191 UTC - Validate resources 2026-07-18 04:16:32.036989 UTC - The fields of the created resource were validated. 2026-07-18 04:16:32.037100 UTC - Check if resources are registered in experiment 2026-07-18 04:16:32.037242 UTC - Run: slices experiment list-resources --format json tst-9a136b48 2026-07-18 04:16:33.585924 UTC - Status (on expauth): UP 2026-07-18 04:16:33.586086 UTC - Testing extend expires_at (all resources in experiment) 2026-07-18 04:16:33.586227 UTC - Run: slices bi --infra be-gent1-bi-vm1 extend --duration 3h --experiment tst-9a136b48 2026-07-18 04:16:46.013243 UTC - Run: slices bi --infra be-gent1-bi-vm1 list-resources --format json --experiment tst-9a136b48 tst 2026-07-18 04:16:47.697082 UTC - Run: slices experiment list-resources --format json tst-9a136b48 2026-07-18 04:16:48.882552 UTC - expires_at (on expauth): 2026-07-18T07:16:00Z (correctly extended) 2026-07-18 04:16:48.886656 UTC - Testing extend expires_at (single resource in experiment) 2026-07-18 04:16:48.886867 UTC - Run: slices bi --infra be-gent1-bi-vm1 extend tst --duration 4h --experiment tst-9a136b48 2026-07-18 04:18:12.856827 UTC - Content of log file '/test_dir/step_Checkextendexpire_command_1.txt': slices bi --infra be-gent1-bi-vm1 extend --duration 3h --experiment tst-9a136b48 2026-07-18 04:18:12.857143 UTC - Content of log file '/test_dir/experiment-extend-all.txt': Extending Experiment container from 2026-07-18 06:16 UTC to 2026-07-18 07:16 UTC... Extending the resources only on infrastructure be-gent1-bi-vm1. Use slices bi experiment list-resources to verify other infrastructures. 10.0% / task starting ♻ Resources on infrastructure be-gent1-bi-vm1 now expire on 2026-07-18 07:16 UTC. Overview of extended resources in experiment tst-9a136b48 ┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Friendly Name ┃ Infra ┃ Type ┃ Status ┃ Description ┃ Created At ┃ Expires At ┃ ┡━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━┩ │ tst │ be-gent1-bi-vm1 │ vm │ up │ Minimal VM │ 2026-07-18 04:16 UTC │ 2026-07-18 07:16 UTC │ └───────────────┴─────────────────┴──────┴────────┴─────────────┴──────────────────────┴──────────────────────┘ 2026-07-18 04:18:12.857362 UTC - Content of log file '/test_dir/step_Checkextendexpire_command_2.txt': slices bi --infra be-gent1-bi-vm1 list-resources --format json --experiment tst-9a136b48 tst 2026-07-18 04:18:12.857570 UTC - Content of log file '/test_dir/list-bi-resources-after-extend_json.txt': [ { "cluster_id": "default", "created_at": "2026-07-18T04:16:03.489231Z", "disk_image_id": "image_be-gent1-bi-vm1_1nercx939p9jrs9eagt0pa5az9", "experiment_id": "exp_expauth.ilabt.imec.be_01kxsq0e8me3hskr120a7krtem", "expires_at": "2026-07-18T07:16:00Z", "flavor_id": "flavor_be-gent1-bi-vm1_01hz4zw0nmf2ytgck5k0e9mj52", "friendly_name": "tst", "id": "r_be-gent1-bi-vm1_01kxsq0fdafgfrcnpn0hw1gh2m", "network_interfaces": [], "private_ipv4": null, "private_ipv6": null, "public_ipv4": "193.191.169.45", "public_ipv6": null, "ssh_authorized_keys": [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINNiZPtQkfCEsc1x2QSwNWekfhWwWZbOvpE8hE0dH253 Wim (ftester) Van de Meerssche" ], "ssh_logins": [ { "host": "193.191.169.45", "port": 22, "username": "ubuntu", "host_keys": [ "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDBUg/yWydevdIikRu6VdQbbc5MyjrBpcXjUxugKKb8JppmbKbpXaK6hx86+a/S8de7wY0f8LBSBKvM0KbgYYSnHWFxFQHGBfbag7qmvJmGKNkNBYZ++qDpnhXYdrCN0cE0jwhZVzatwU1ReUdZmJqLYi0g72oTx7Lj5CXHiaU4VIi0gzQoPyjSBzIVmJKwIQYyfEJkIBJZtwDGHdaszXjfEf/A4zlPBZH6GhwqZpjWo6dAzkAN4RVxbL7UlNun5wkaflOEBRGk/dmsqbd6REu3hdhb9h4nVYPcti3koZDT30h1tZoS2ILCuPcWBvZpXNiIuXEGHgmQBYdeNpTbzXHiaR4JLb3HmQRGnbMnP8EOIWereTZEUhIO1UF7Ogq6xOPGJZUrHaXfhhA5Z05Q17/jZ6CdyUgefQU+5gIXrvI10p4f4x+lh8vq3Pw+0lUzwWmmRjDQaZvQK6BTNCe3EZg2pg4MIWWR+psWRIS9jsSlHEKYymRaS4rHRn0TvTlf4fM= root@tst\n", "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJgojG4h82TMiOuufBFHOCEZTuXl7n7x3qwfUtJYW2oQ3/x5SHZmo8iY7kxfGcgMHghvUgUXX5QPtQ/ztNkLEtA= root@tst\n", "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPrLuGMeoTMmIuFUuFfGhuoDLRW8aisTnMASFktkkr7M root@tst\n" ], "description": null, "jump_proxy": null } ], "status": "up", "terminated_at": null, "userdata": null, "console_url": "https://console-gent1.slices-be.eu/exp_expauth.ilabt.imec.be_01kxsq0e8me3hskr120a7krtem/r_be-gent1-bi-vm1_01kxsq0fdafgfrcnpn0hw1gh2m/", "machine_id": null, "failure_reason": null, "infra_id": "be-gent1-bi-vm1", "machine_name": null } ] 2026-07-18 04:18:12.857783 UTC - Content of log file '/test_dir/step_Checkextendexpire_command_3.txt': slices experiment list-resources --format json tst-9a136b48 2026-07-18 04:18:12.857870 UTC - Content of log file '/test_dir/experiment-list-resources-after-extend.txt': [ { "id": "r_be-gent1-bi-vm1_01kxsq0fdafgfrcnpn0hw1gh2m", "created_at": "2026-07-18T04:16:03.489231Z", "created_by": "user_account.ilabt.imec.be_1c3x2sxhmv8dqtmkxh9392sa0g", "experiment_id": "exp_expauth.ilabt.imec.be_01kxsq0e8me3hskr120a7krtem", "friendly_name": "tst", "project_id": "proj_account.ilabt.imec.be_5pzabws7n79ydsagfg3vntg590", "service_id": "bi", "infra_id": "be-gent1-bi-vm1", "status": "up", "type": "vm", "description": "Minimal VM", "expires_at": "2026-07-18T07:16:00Z", "terminated_at": null, "terminated_by": null } ] 2026-07-18 04:18:12.857934 UTC - Content of log file '/test_dir/step_Checkextendexpire_command_4.txt': slices bi --infra be-gent1-bi-vm1 extend tst --duration 4h --experiment tst-9a136b48 2026-07-18 04:18:12.858193 UTC - Content of log file '/test_dir/experiment-extend-resource.txt': Extending Experiment container from 2026-07-18 07:16 UTC to 2026-07-18 08:16 UTC... ╭───────────────────────────────────────────────────────────────────────────────── 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:103 in handle_request │ │ │ │ 100 │ │ │ self._connect_failed = True │ │ 101 │ │ │ raise exc │ │ 102 │ │ │ │ ❱ 103 │ │ return self._connection.handle_request(request) │ │ 104 │ │ │ 105 │ def _connect(self, request: Request) -> NetworkStream: │ │ 106 │ │ timeouts = request.extensions.get("timeout", {}) │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpcore/_sync/http11.py:136 in handle_request │ │ │ │ 133 │ │ │ with ShieldCancellation(): │ │ 134 │ │ │ │ with Trace("response_closed", logger, request) as trace: │ │ 135 │ │ │ │ │ self._response_closed() │ │ ❱ 136 │ │ │ raise exc │ │ 137 │ │ │ 138 │ # Sending the request... │ │ 139 │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpcore/_sync/http11.py:106 in handle_request │ │ │ │ 103 │ │ │ │ │ reason_phrase, │ │ 104 │ │ │ │ │ headers, │ │ 105 │ │ │ │ │ trailing_data, │ │ ❱ 106 │ │ │ │ ) = self._receive_response_headers(**kwargs) │ │ 107 │ │ │ │ trace.return_value = ( │ │ 108 │ │ │ │ │ http_version, │ │ 109 │ │ │ │ │ status, │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpcore/_sync/http11.py:177 in _receive_response_headers │ │ │ │ 174 │ │ timeout = timeouts.get("read", None) │ │ 175 │ │ │ │ 176 │ │ while True: │ │ ❱ 177 │ │ │ event = self._receive_event(timeout=timeout) │ │ 178 │ │ │ if isinstance(event, h11.Response): │ │ 179 │ │ │ │ break │ │ 180 │ │ │ if ( │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpcore/_sync/http11.py:217 in _receive_event │ │ │ │ 214 │ │ │ │ event = self._h11_state.next_event() │ │ 215 │ │ │ │ │ 216 │ │ │ if event is h11.NEED_DATA: │ │ ❱ 217 │ │ │ │ data = self._network_stream.read( │ │ 218 │ │ │ │ │ self.READ_NUM_BYTES, timeout=timeout │ │ 219 │ │ │ │ ) │ │ 220 │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpcore/_backends/sync.py:126 in read │ │ │ │ 123 │ │ │ 124 │ def read(self, max_bytes: int, timeout: float | None = None) -> bytes: │ │ 125 │ │ exc_map: ExceptionMapping = {socket.timeout: ReadTimeout, OSError: ReadError} │ │ ❱ 126 │ │ with map_exceptions(exc_map): │ │ 127 │ │ │ self._sock.settimeout(timeout) │ │ 128 │ │ │ return self._sock.recv(max_bytes) │ │ 129 │ │ │ │ /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 │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ReadTimeout: The read operation timed out 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_helpers.py:83 in wrapper_handle_some_exceptions │ │ │ │ 80 │ def wrapper_handle_some_exceptions(*args, **kwargs): │ │ 81 │ │ """Function wrapper for handle_some_exceptions.""" # noqa: D401 │ │ 82 │ │ try: │ │ ❱ 83 │ │ │ return func(*args, **kwargs) │ │ 84 │ │ except ApiResponseError as e: │ │ 85 │ │ │ if e._httpx_status_error.response.status_code in ( │ │ 86 │ │ │ │ 502, │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_cli_bi/commands/bi.py:1989 in extend_resource │ │ │ │ 1986 │ │ │ f"Extending Experiment container from {friendly_datetime(exp.expires_at)} " │ │ 1987 │ │ │ f"to {friendly_datetime(new_expires_at)}..." │ │ 1988 │ │ ) │ │ ❱ 1989 │ │ ctx.obj.api.experiment.update( │ │ 1990 │ │ │ exp.id, │ │ 1991 │ │ │ exp.project_id, │ │ 1992 │ │ │ expires_at=new_expires_at, │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/experiment.py:202 in update │ │ │ │ 199 │ │ │ if field_value is not None │ │ 200 │ │ } │ │ 201 │ │ │ │ ❱ 202 │ │ update_data["project_token"] = self._project_client.get_jwt(project_id) │ │ 203 │ │ │ │ 204 │ │ response = self._client.put( │ │ 205 │ │ │ f"{self.API_BASE_PATH}{experiment_id}", │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/project.py:76 in get_jwt │ │ │ │ 73 │ │ │ 74 │ def get_jwt(self, id: str) -> str: │ │ 75 │ │ """Get project JWT.""" │ │ ❱ 76 │ │ response = self._client.get(f"{self.API_BASE_PATH}{id}", headers={"Accept": "application/jwt"}) │ │ 77 │ │ │ │ 78 │ │ try: │ │ 79 │ │ │ response.raise_for_status() │ │ │ │ /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): │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ReadTimeout: The read operation timed out 2026-07-18 04:18:12.858324 UTC - Error in test step 'Check extend expire': "slices bi extend" failed 2026-07-18 04:18:12.858382 UTC - Step 'Check extend expire' took 99.27 seconds, which is longer than the warning threshold of 40 seconds 2026-07-18 04:18:12.858424 UTC - Testing ssh login 2026-07-18 04:18:12.880910 UTC - Run: slices bi --infra be-gent1-bi-vm1 ssh --no-exec --proxy on --show ssh_config --experiment tst-9a136b48 tst 2026-07-18 04:18:32.890668 UTC - Content of log file '/test_dir/step_Sshinfossh_config_command_1.txt': slices bi --infra be-gent1-bi-vm1 ssh --no-exec --proxy on --show ssh_config --experiment tst-9a136b48 tst 2026-07-18 04:18:32.890785 UTC - Content of log file '/test_dir/bi_ssh_STDERR.txt': ***Terminating process due to timeout*** ***Process terminated*** 2026-07-18 04:18:32.890818 UTC - Error in test step 'Ssh info ssh_config': "slices bi ssh --show ssh_config" failed 2026-07-18 04:18:32.890880 UTC - Step 'Ssh info ssh_config' took 20.01 seconds, which is longer than the warning threshold of 5 seconds 2026-07-18 04:18:32.898309 UTC - Destroying tst-9a136b48 tst 2026-07-18 04:18:32.898523 UTC - Run: slices bi --infra be-gent1-bi-vm1 destroy --experiment tst-9a136b48 tst 2026-07-18 04:19:06.644315 UTC - Content of log file '/test_dir/step_Destroy_command_1.txt': slices bi --infra be-gent1-bi-vm1 destroy --experiment tst-9a136b48 tst 2026-07-18 04:19:06.644465 UTC - Content of log file '/test_dir/destroy.txt': ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/util/pagination.py:90 in __init__ │ │ │ │ 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) │ │ 92 │ │ except HTTPError as err: │ │ 93 │ │ │ raise from_httpx_exception(err) from err │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpx/_models.py:829 in raise_for_status │ │ │ │ 826 │ │ } │ │ 827 │ │ error_type = error_types.get(status_class, "Invalid status code") │ │ 828 │ │ message = message.format(self, error_type=error_type) │ │ ❱ 829 │ │ raise HTTPStatusError(message, request=request, response=self) │ │ 830 │ │ │ 831 │ def json(self, **kwargs: typing.Any) -> typing.Any: │ │ 832 │ │ return jsonlib.loads(self.content, **kwargs) │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ HTTPStatusError: Server error '500 Internal Server Error' for url 'https://expauth.ilabt.imec.be/apis/exp.slices-ri.eu/v1/experiments/?include_expired=true&include_archived=true&project_id=proj_account.ilabt.imec.be_5pzabws7n79ydsagfg3vntg590&friendly_name=tst-9a136 b48' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500 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_helpers.py:83 in wrapper_handle_some_exceptions │ │ │ │ 80 │ def wrapper_handle_some_exceptions(*args, **kwargs): │ │ 81 │ │ """Function wrapper for handle_some_exceptions.""" # noqa: D401 │ │ 82 │ │ try: │ │ ❱ 83 │ │ │ return func(*args, **kwargs) │ │ 84 │ │ except ApiResponseError as e: │ │ 85 │ │ │ if e._httpx_status_error.response.status_code in ( │ │ 86 │ │ │ │ 502, │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_cli_bi/commands/bi.py:1287 in destroy_resource │ │ │ │ 1284 │ If no resources are given and an explicit --yes-all-of-them, then destroy all resources in the experiment. │ │ 1285 │ Ask for confirmation for each resource, unless --force is used. │ │ 1286 │ """ │ │ ❱ 1287 │ exp = bi_get_experiment(ctx, experiment) │ │ 1288 │ │ │ 1289 │ resources_to_delete: Collection[ComputeResource] = _get_requested_bi_resources( │ │ 1290 │ │ ctx, exp, resources, include_expired=False, include_terminated=False │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_cli_bi/commands/bi_helpers.py:114 in bi_get_experiment │ │ │ │ 111 │ if is_type_id(experiment_id, type="exp"): │ │ 112 │ │ exp_obj = ctx.obj.api.experiment.get(experiment_id) │ │ 113 │ else: │ │ ❱ 114 │ │ exp_obj = ctx.obj.api.get_experiment(experiment_id, project_id=ctx.obj.require_project_id()) │ │ 115 │ │ │ 116 │ if not exp_obj: │ │ 117 │ │ err_console.print(f"Could not retrieve experiment {experiment_id} :x:") │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_cli_bi/core/api.py:153 in get_experiment │ │ │ │ 150 │ │ """Get experiment by name.""" │ │ 151 │ │ return next( │ │ 152 │ │ │ iter( │ │ ❱ 153 │ │ │ │ self.experiment.list( │ │ 154 │ │ │ │ │ friendly_name=experiment_name, │ │ 155 │ │ │ │ │ project_id=project_id, │ │ 156 │ │ │ │ │ include_archived=not must_be_active, │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/experiment.py:238 in list │ │ │ │ 235 │ │ │ if param_value is not None │ │ 236 │ │ } │ │ 237 │ │ │ │ ❱ 238 │ │ return PagedCollection("experiment", Experiment, self.API_BASE_PATH, self._client, params=params) │ │ 239 │ │ │ 240 │ def list_resources( │ │ 241 │ │ self, experiment_id: str, *, include_expired: bool | None = None, include_terminated: bool | None = None │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/util/pagination.py:93 in __init__ │ │ │ │ 90 │ │ │ response.raise_for_status() │ │ 91 │ │ │ self._first_page = self._decoder.decode(response.content) │ │ 92 │ │ except HTTPError as err: │ │ ❱ 93 │ │ │ raise from_httpx_exception(err) from err │ │ 94 │ │ │ 95 │ def __iter__(self) -> Iterator[T]: │ │ 96 │ │ """Create iterator over items.""" │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ServiceException: ServiceException (for GET https://expauth.ilabt.imec.be/apis/exp.slices-ri.eu/v1/experiments/?include_expired=true&include_archived=true&project_id=proj_account.ilabt.imec.be_5pzabws7n79ydsagfg3vntg590&friendly_name=tst-9a136b 48): Internal Server Error 2026-07-18 04:19:06.644528 UTC - Error in test step 'Destroy': "slices bi destroy" failed (return value is 1) 2026-07-18 04:19:06.644571 UTC - Step 'Destroy' took 33.75 seconds, which is longer than the warning threshold of 15 seconds 2026-07-18 04:19:06.644607 UTC - Wait 2s before retry 2026-07-18 04:19:44.750351 UTC - Content of log file '/test_dir/step_DestroyRetry1_retry1_command_1.txt': slices bi --infra be-gent1-bi-vm1 destroy --experiment tst-9a136b48 tst 2026-07-18 04:19:44.750508 UTC - Content of log file '/test_dir/destroy_retry1.txt': ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/util/pagination.py:90 in __init__ │ │ │ │ 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) │ │ 92 │ │ except HTTPError as err: │ │ 93 │ │ │ raise from_httpx_exception(err) from err │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpx/_models.py:829 in raise_for_status │ │ │ │ 826 │ │ } │ │ 827 │ │ error_type = error_types.get(status_class, "Invalid status code") │ │ 828 │ │ message = message.format(self, error_type=error_type) │ │ ❱ 829 │ │ raise HTTPStatusError(message, request=request, response=self) │ │ 830 │ │ │ 831 │ def json(self, **kwargs: typing.Any) -> typing.Any: │ │ 832 │ │ return jsonlib.loads(self.content, **kwargs) │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ HTTPStatusError: Server error '500 Internal Server Error' for url 'https://expauth.ilabt.imec.be/apis/exp.slices-ri.eu/v1/experiments/?include_expired=true&include_archived=true&project_id=proj_account.ilabt.imec.be_5pzabws7n79ydsagfg3vntg590&friendly_name=tst-9a136 b48' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500 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_helpers.py:83 in wrapper_handle_some_exceptions │ │ │ │ 80 │ def wrapper_handle_some_exceptions(*args, **kwargs): │ │ 81 │ │ """Function wrapper for handle_some_exceptions.""" # noqa: D401 │ │ 82 │ │ try: │ │ ❱ 83 │ │ │ return func(*args, **kwargs) │ │ 84 │ │ except ApiResponseError as e: │ │ 85 │ │ │ if e._httpx_status_error.response.status_code in ( │ │ 86 │ │ │ │ 502, │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_cli_bi/commands/bi.py:1287 in destroy_resource │ │ │ │ 1284 │ If no resources are given and an explicit --yes-all-of-them, then destroy all resources in the experiment. │ │ 1285 │ Ask for confirmation for each resource, unless --force is used. │ │ 1286 │ """ │ │ ❱ 1287 │ exp = bi_get_experiment(ctx, experiment) │ │ 1288 │ │ │ 1289 │ resources_to_delete: Collection[ComputeResource] = _get_requested_bi_resources( │ │ 1290 │ │ ctx, exp, resources, include_expired=False, include_terminated=False │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_cli_bi/commands/bi_helpers.py:114 in bi_get_experiment │ │ │ │ 111 │ if is_type_id(experiment_id, type="exp"): │ │ 112 │ │ exp_obj = ctx.obj.api.experiment.get(experiment_id) │ │ 113 │ else: │ │ ❱ 114 │ │ exp_obj = ctx.obj.api.get_experiment(experiment_id, project_id=ctx.obj.require_project_id()) │ │ 115 │ │ │ 116 │ if not exp_obj: │ │ 117 │ │ err_console.print(f"Could not retrieve experiment {experiment_id} :x:") │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_cli_bi/core/api.py:153 in get_experiment │ │ │ │ 150 │ │ """Get experiment by name.""" │ │ 151 │ │ return next( │ │ 152 │ │ │ iter( │ │ ❱ 153 │ │ │ │ self.experiment.list( │ │ 154 │ │ │ │ │ friendly_name=experiment_name, │ │ 155 │ │ │ │ │ project_id=project_id, │ │ 156 │ │ │ │ │ include_archived=not must_be_active, │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/experiment.py:238 in list │ │ │ │ 235 │ │ │ if param_value is not None │ │ 236 │ │ } │ │ 237 │ │ │ │ ❱ 238 │ │ return PagedCollection("experiment", Experiment, self.API_BASE_PATH, self._client, params=params) │ │ 239 │ │ │ 240 │ def list_resources( │ │ 241 │ │ self, experiment_id: str, *, include_expired: bool | None = None, include_terminated: bool | None = None │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/util/pagination.py:93 in __init__ │ │ │ │ 90 │ │ │ response.raise_for_status() │ │ 91 │ │ │ self._first_page = self._decoder.decode(response.content) │ │ 92 │ │ except HTTPError as err: │ │ ❱ 93 │ │ │ raise from_httpx_exception(err) from err │ │ 94 │ │ │ 95 │ def __iter__(self) -> Iterator[T]: │ │ 96 │ │ """Create iterator over items.""" │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ServiceException: ServiceException (for GET https://expauth.ilabt.imec.be/apis/exp.slices-ri.eu/v1/experiments/?include_expired=true&include_archived=true&project_id=proj_account.ilabt.imec.be_5pzabws7n79ydsagfg3vntg590&friendly_name=tst-9a136b 48): Internal Server Error 2026-07-18 04:19:44.750574 UTC - Error in test step 'Destroy (Retry 1)': "slices bi destroy" failed (return value is 1) 2026-07-18 04:19:44.750623 UTC - Step 'Destroy' took 36.11 seconds, which is longer than the warning threshold of 15 seconds 2026-07-18 04:19:44.750661 UTC - Wait 2s before retry 2026-07-18 04:20:17.750887 UTC - Content of log file '/test_dir/step_DestroyRetry2_retry2_command_1.txt': slices bi --infra be-gent1-bi-vm1 destroy --experiment tst-9a136b48 tst 2026-07-18 04:20:17.751066 UTC - Content of log file '/test_dir/destroy_retry2.txt': ╭───────────────────────────────────────────────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────────────────────────────────────────────╮ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/util/pagination.py:90 in __init__ │ │ │ │ 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) │ │ 92 │ │ except HTTPError as err: │ │ 93 │ │ │ raise from_httpx_exception(err) from err │ │ │ │ /app/.venv/lib/python3.14/site-packages/httpx/_models.py:829 in raise_for_status │ │ │ │ 826 │ │ } │ │ 827 │ │ error_type = error_types.get(status_class, "Invalid status code") │ │ 828 │ │ message = message.format(self, error_type=error_type) │ │ ❱ 829 │ │ raise HTTPStatusError(message, request=request, response=self) │ │ 830 │ │ │ 831 │ def json(self, **kwargs: typing.Any) -> typing.Any: │ │ 832 │ │ return jsonlib.loads(self.content, **kwargs) │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ HTTPStatusError: Server error '500 Internal Server Error' for url 'https://expauth.ilabt.imec.be/apis/exp.slices-ri.eu/v1/experiments/?include_expired=true&include_archived=true&project_id=proj_account.ilabt.imec.be_5pzabws7n79ydsagfg3vntg590&friendly_name=tst-9a136 b48' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500 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_helpers.py:83 in wrapper_handle_some_exceptions │ │ │ │ 80 │ def wrapper_handle_some_exceptions(*args, **kwargs): │ │ 81 │ │ """Function wrapper for handle_some_exceptions.""" # noqa: D401 │ │ 82 │ │ try: │ │ ❱ 83 │ │ │ return func(*args, **kwargs) │ │ 84 │ │ except ApiResponseError as e: │ │ 85 │ │ │ if e._httpx_status_error.response.status_code in ( │ │ 86 │ │ │ │ 502, │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_cli_bi/commands/bi.py:1287 in destroy_resource │ │ │ │ 1284 │ If no resources are given and an explicit --yes-all-of-them, then destroy all resources in the experiment. │ │ 1285 │ Ask for confirmation for each resource, unless --force is used. │ │ 1286 │ """ │ │ ❱ 1287 │ exp = bi_get_experiment(ctx, experiment) │ │ 1288 │ │ │ 1289 │ resources_to_delete: Collection[ComputeResource] = _get_requested_bi_resources( │ │ 1290 │ │ ctx, exp, resources, include_expired=False, include_terminated=False │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_cli_bi/commands/bi_helpers.py:114 in bi_get_experiment │ │ │ │ 111 │ if is_type_id(experiment_id, type="exp"): │ │ 112 │ │ exp_obj = ctx.obj.api.experiment.get(experiment_id) │ │ 113 │ else: │ │ ❱ 114 │ │ exp_obj = ctx.obj.api.get_experiment(experiment_id, project_id=ctx.obj.require_project_id()) │ │ 115 │ │ │ 116 │ if not exp_obj: │ │ 117 │ │ err_console.print(f"Could not retrieve experiment {experiment_id} :x:") │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_cli_bi/core/api.py:153 in get_experiment │ │ │ │ 150 │ │ """Get experiment by name.""" │ │ 151 │ │ return next( │ │ 152 │ │ │ iter( │ │ ❱ 153 │ │ │ │ self.experiment.list( │ │ 154 │ │ │ │ │ friendly_name=experiment_name, │ │ 155 │ │ │ │ │ project_id=project_id, │ │ 156 │ │ │ │ │ include_archived=not must_be_active, │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/experiment.py:238 in list │ │ │ │ 235 │ │ │ if param_value is not None │ │ 236 │ │ } │ │ 237 │ │ │ │ ❱ 238 │ │ return PagedCollection("experiment", Experiment, self.API_BASE_PATH, self._client, params=params) │ │ 239 │ │ │ 240 │ def list_resources( │ │ 241 │ │ self, experiment_id: str, *, include_expired: bool | None = None, include_terminated: bool | None = None │ │ │ │ /app/.venv/lib/python3.14/site-packages/slices_clientlib_core/util/pagination.py:93 in __init__ │ │ │ │ 90 │ │ │ response.raise_for_status() │ │ 91 │ │ │ self._first_page = self._decoder.decode(response.content) │ │ 92 │ │ except HTTPError as err: │ │ ❱ 93 │ │ │ raise from_httpx_exception(err) from err │ │ 94 │ │ │ 95 │ def __iter__(self) -> Iterator[T]: │ │ 96 │ │ """Create iterator over items.""" │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ServiceException: ServiceException (for GET https://expauth.ilabt.imec.be/apis/exp.slices-ri.eu/v1/experiments/?include_expired=true&include_archived=true&project_id=proj_account.ilabt.imec.be_5pzabws7n79ydsagfg3vntg590&friendly_name=tst-9a136b 48): Internal Server Error 2026-07-18 04:20:17.751139 UTC - Error in test step 'Destroy (Retry 2)': "slices bi destroy" failed (return value is 1) 2026-07-18 04:20:17.751183 UTC - Step 'Destroy' took 31.00 seconds, which is longer than the warning threshold of 15 seconds 2026-07-18 04:20:17.751216 UTC - Wait 2s before retry