| 1 | #!/usr/bin/env python3 |
| 2 | """Verify loading/populated/empty/failure/retry against delayed HTTP responses.""" |
| 3 | import http.server |
| 4 | import json |
| 5 | import os |
| 6 | from pathlib import Path |
| 7 | import subprocess |
| 8 | import threading |
| 9 | import time |
| 10 | |
| 11 | APP = "Docs" |
| 12 | root = Path(__file__).resolve().parents[2] |
| 13 | class Handler(http.server.BaseHTTPRequestHandler): |
| 14 | count = 0 |
| 15 | def do_GET(self): |
| 16 | type(self).count += 1 |
| 17 | number = type(self).count |
| 18 | time.sleep(0.2) |
| 19 | item = ({"sqid": "fixture", "title": "Fixture"} if APP == "Docs" else |
| 20 | {"ID": 1, "Title": "Fixture", "TabID": 1, "TabName": "Sheet1"}) |
| 21 | items = [] if number == 2 else [item] |
| 22 | payload = {"documents": items, "can_create": True} if APP == "Docs" else {"Sheets": items} |
| 23 | data = json.dumps(payload).encode() |
| 24 | self.send_response(503 if number == 3 else 200) |
| 25 | self.send_header("Content-Length", str(len(data))) |
| 26 | self.end_headers() |
| 27 | self.wfile.write(data) |
| 28 | def log_message(self, *_): |
| 29 | pass |
| 30 | with http.server.ThreadingHTTPServer(("127.0.0.1", 0), Handler) as server: |
| 31 | threading.Thread(target=server.serve_forever, daemon=True).start() |
| 32 | result = subprocess.run(["swift", "test", "--package-path", str(root / "native/apple"), |
| 33 | "--filter", "HomeLoadingTests"], |
| 34 | env=dict(os.environ, HOME_LOADING_TEST_ORIGIN=f"http://127.0.0.1:{server.server_port}"), timeout=180) |
| 35 | server.shutdown() |
| 36 | raise SystemExit(result.returncode) |
| 37 | |