76 lines
4.1 KiB
Python
76 lines
4.1 KiB
Python
#!/usr/bin/env python3
|
|
"""Deterministic runner fixture for test-preflight contract tests."""
|
|
|
|
import json
|
|
import os
|
|
import sys
|
|
|
|
request = json.load(sys.stdin)
|
|
scenario = os.environ.get("PREFLIGHT_RUNNER_SCENARIO", "ready")
|
|
operation = request.get("operation")
|
|
|
|
if operation in {"deployment", "prepare"}:
|
|
print(json.dumps({"status": "ready", "observed": "mock test deploy receipt"}))
|
|
elif operation == "platform_probe":
|
|
platform = request.get("platform")
|
|
if scenario == "android-unauthorized" and platform == "android":
|
|
print(json.dumps({"status": "environment-fail", "checks": {
|
|
"adb": {"status": "ready", "observed": "adb 35", "expected": "adb responds"},
|
|
"device": {"status": "environment-fail", "observed": "emulator-5554 unauthorized", "expected": "authorized device", "remediation": "accept RSA authorization"},
|
|
"boot": {"status": "environment-fail", "observed": "unknown", "expected": "boot complete"},
|
|
}}))
|
|
elif scenario == "mac-unavailable" and platform == "ios":
|
|
print(json.dumps({"status": "environment-fail", "checks": {
|
|
"macos": {"status": "environment-fail", "observed": "Mac unavailable", "expected": "Darwin tester node", "remediation": "restore tester.ios Mac"},
|
|
}}))
|
|
else:
|
|
print(json.dumps({"status": "ready", "checks": {
|
|
"adb": {"status": "ready", "observed": "adb 35", "expected": "adb responds"},
|
|
"device": {"status": "ready", "observed": "authorized", "expected": "authorized device"},
|
|
"boot": {"status": "ready", "observed": "boot complete", "expected": "boot complete"},
|
|
"macos": {"status": "ready", "observed": "Darwin", "expected": "Darwin"},
|
|
"xcrun": {"status": "ready", "observed": "xcrun", "expected": "xcrun"},
|
|
"simctl": {"status": "ready", "observed": "available", "expected": "simctl"},
|
|
}}))
|
|
elif operation == "network_probe":
|
|
if scenario == "host-unreachable":
|
|
print(json.dumps({"status": "environment-fail", "checks": {
|
|
"dns": {"status": "ready", "observed": "10.0.0.2", "expected": "DNS resolves"},
|
|
"tcp": {"status": "environment-fail", "observed": "connection refused", "expected": "TCP reachable", "remediation": "check HOST route"},
|
|
}}))
|
|
elif scenario == "http-failure":
|
|
print(json.dumps({"status": "environment-fail", "checks": {
|
|
"dns": {"status": "ready", "observed": "10.0.0.2", "expected": "DNS resolves"},
|
|
"tcp": {"status": "ready", "observed": "443 open", "expected": "TCP reachable"},
|
|
"http": {"status": "environment-fail", "observed": 503, "expected": "HTTP 2xx-4xx", "remediation": "check service health"},
|
|
}}))
|
|
else:
|
|
print(json.dumps({"status": "ready", "checks": {
|
|
"dns": {"status": "ready", "observed": "10.0.0.2", "expected": "DNS resolves"},
|
|
"tcp": {"status": "ready", "observed": "443 open", "expected": "TCP reachable"},
|
|
"http": {"status": "ready", "observed": 200, "expected": "HTTP 2xx-4xx"},
|
|
}}))
|
|
elif operation == "capability_probe":
|
|
capability = request.get("capability")
|
|
checks = {
|
|
"album_picker": {
|
|
"picker": {"status": "ready", "observed": "real picker opened and returned image-001"},
|
|
},
|
|
"photo_permission": {
|
|
"permission": {"status": "ready", "observed": "permission state checked on device"},
|
|
"test_image": {"status": "ready", "observed": "image-001 available in test album"},
|
|
},
|
|
"ime_pinyin": {
|
|
"composition": {"status": "ready", "observed": "nihao composed in Chinese IME"},
|
|
"candidates": {"status": "ready", "observed": "你好 candidate selected"},
|
|
},
|
|
}
|
|
if scenario == "capability-missing" and capability == "album_picker":
|
|
print(json.dumps({"status": "ready", "checks": {}}))
|
|
else:
|
|
print(json.dumps({"status": "ready", "checks": checks.get(capability, {})}))
|
|
elif operation in {"install", "start"}:
|
|
print(json.dumps({"status": "ready", "observed": operation + "ed mock artifact"}))
|
|
else:
|
|
print(json.dumps({"status": "environment-fail", "observed": "unknown operation"}))
|