test(acceptance): assert vev ls lists the created remote sessions
- commit
- d6a1b892aaa8dcd425fa3357545f57b6f9aaeb17
- author
- brice · · 2026-09-23 03:23 UTC
- parent
- 1744d68
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
1 file · +18 -2
M scripts/demo/sandbox_acceptance.py +18 -2
| @@ -91,6 +91,21 @@ def scenario(container, endpoint=None): | |||
| 91 | 91 | print(f"PASS ui endpoint={endpoint or 'local'} session={name} lifecycle={context['session']['lifecycle_id']}") | |
| 92 | 92 | finally: | |
| 93 | 93 | driver.close() | |
| 94 | + | return name | |
| 95 | + | ||
| 96 | + | ||
| 97 | + | def await_remote_listing(container, endpoint, name, timeout=10.0): | |
| 98 | + | """Poll `vev ls ENDPOINT` until the broker's observation lists NAME.""" | |
| 99 | + | deadline = time.monotonic() + timeout | |
| 100 | + | listing = "" | |
| 101 | + | while True: | |
| 102 | + | listing = run("docker", "exec", container, "vev", "ls", endpoint, timeout=15, check=False).stdout | |
| 103 | + | if any(line.split()[:1] == [f"{name}@{endpoint}"] for line in listing.splitlines()): | |
| 104 | + | print(f"PASS ls endpoint={endpoint} session={name}") | |
| 105 | + | return | |
| 106 | + | if time.monotonic() >= deadline: | |
| 107 | + | raise RuntimeError(f"`vev ls {endpoint}` never listed {name} within {timeout}s:\n{listing}") | |
| 108 | + | time.sleep(0.5) | |
| 94 | 109 | ||
| 95 | 110 | ||
| 96 | 111 | def main(): | |
| @@ -104,8 +119,9 @@ def main(): | |||
| 104 | 119 | catalog = run("docker", "exec", client, "vev", "ls", endpoint, timeout=30) | |
| 105 | 120 | print(f"PASS cli endpoint={endpoint} catalog_lines={len(catalog.stdout.splitlines())}") | |
| 106 | 121 | scenario(client) | |
| 107 | - | scenario(client, "remote-a") | |
| 108 | - | scenario(client, "remote-b") | |
| 122 | + | created = {endpoint: scenario(client, endpoint) for endpoint in ("remote-a", "remote-b")} | |
| 123 | + | for endpoint, name in created.items(): | |
| 124 | + | await_remote_listing(client, endpoint, name) | |
| 109 | 125 | ||
| 110 | 126 | ||
| 111 | 127 | if __name__ == "__main__": | |
| @@ -91,6 +91,21 @@ def scenario(container, endpoint=None): | |||||
| 91 | print(f"PASS ui endpoint={endpoint or 'local'} session={name} lifecycle={context['session']['lifecycle_id']}") | 91 | print(f"PASS ui endpoint={endpoint or 'local'} session={name} lifecycle={context['session']['lifecycle_id']}") | ||
| 92 | finally: | 92 | finally: | ||
| 93 | driver.close() | 93 | driver.close() | ||
| 94 | + | return name | |||
| 95 | + | ||||
| 96 | + | ||||
| 97 | + | def await_remote_listing(container, endpoint, name, timeout=10.0): | |||
| 98 | + | """Poll `vev ls ENDPOINT` until the broker's observation lists NAME.""" | |||
| 99 | + | deadline = time.monotonic() + timeout | |||
| 100 | + | listing = "" | |||
| 101 | + | while True: | |||
| 102 | + | listing = run("docker", "exec", container, "vev", "ls", endpoint, timeout=15, check=False).stdout | |||
| 103 | + | if any(line.split()[:1] == [f"{name}@{endpoint}"] for line in listing.splitlines()): | |||
| 104 | + | print(f"PASS ls endpoint={endpoint} session={name}") | |||
| 105 | + | return | |||
| 106 | + | if time.monotonic() >= deadline: | |||
| 107 | + | raise RuntimeError(f"`vev ls {endpoint}` never listed {name} within {timeout}s:\n{listing}") | |||
| 108 | + | time.sleep(0.5) | |||
| 94 | 109 | ||||
| 95 | 110 | ||||
| 96 | def main(): | 111 | def main(): | ||
| @@ -104,8 +119,9 @@ def main(): | |||||
| 104 | catalog = run("docker", "exec", client, "vev", "ls", endpoint, timeout=30) | 119 | catalog = run("docker", "exec", client, "vev", "ls", endpoint, timeout=30) | ||
| 105 | print(f"PASS cli endpoint={endpoint} catalog_lines={len(catalog.stdout.splitlines())}") | 120 | print(f"PASS cli endpoint={endpoint} catalog_lines={len(catalog.stdout.splitlines())}") | ||
| 106 | scenario(client) | 121 | scenario(client) | ||
| 107 | - | scenario(client, "remote-a") | 122 | + | created = {endpoint: scenario(client, endpoint) for endpoint in ("remote-a", "remote-b")} |
| 108 | - | scenario(client, "remote-b") | 123 | + | for endpoint, name in created.items(): |
| 124 | + | await_remote_listing(client, endpoint, name) | |||
| 109 | 125 | ||||
| 110 | 126 | ||||
| 111 | if __name__ == "__main__": | 127 | if __name__ == "__main__": | ||