gh-130292: Allow for empty simulator list when running iOS testbed (#130388)

Adds error handling when there are no pre-existing test simulators.
This commit is contained in:
Russell Keith-Magee 2025-02-25 14:49:05 +08:00 committed by GitHub
parent 56e337d32b
commit 99088ab081
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 24 additions and 12 deletions

View file

@ -82,19 +82,29 @@ async def async_check_output(*args, **kwargs):
# Return a list of UDIDs associated with booted simulators
async def list_devices():
# List the testing simulators, in JSON format
raw_json = await async_check_output(
"xcrun", "simctl", "--set", "testing", "list", "-j"
)
json_data = json.loads(raw_json)
try:
# List the testing simulators, in JSON format
raw_json = await async_check_output(
"xcrun", "simctl", "--set", "testing", "list", "-j"
)
json_data = json.loads(raw_json)
# Filter out the booted iOS simulators
return [
simulator["udid"]
for runtime, simulators in json_data["devices"].items()
for simulator in simulators
if runtime.split(".")[-1].startswith("iOS") and simulator["state"] == "Booted"
]
# Filter out the booted iOS simulators
return [
simulator["udid"]
for runtime, simulators in json_data["devices"].items()
for simulator in simulators
if runtime.split(".")[-1].startswith("iOS") and simulator["state"] == "Booted"
]
except subprocess.CalledProcessError as e:
# If there's no ~/Library/Developer/XCTestDevices folder (which is the
# case on fresh installs, and in some CI environments), `simctl list`
# returns error code 1, rather than an empty list. Handle that case,
# but raise all other errors.
if e.returncode == 1:
return []
else:
raise
async def find_device(initial_devices):