Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions Apple/iOS/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,17 @@ Once you have a built an XCframework, you can test that framework by running:

$ python Apple test iOS

This test will attempt to find an "SE-class" simulator (i.e., an iPhone SE, or
iPhone 16e, or similar), and run the test suite on the most recent version of
iOS that is available. You can specify a simulator using the `--simulator`
command line argument, providing the name of the simulator (e.g., `--simulator
'iPhone 16 Pro'`). You can also use this argument to control the OS version used
for testing; `--simulator 'iPhone 16 Pro,OS=18.2'` would attempt to run the
tests on an iPhone 16 Pro running iOS 18.2.

If the test runner is executed on GitHub Actions, the `GITHUB_ACTIONS`
environment variable will be exposed to the iOS process at runtime.

### Testing a single-architecture framework

The `Apple/testbed` folder that contains an Xcode project that is able to run
Expand Down
3 changes: 3 additions & 0 deletions Apple/testbed/TestbedTests/TestbedTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ - (void)testPython {
setenv("NO_COLOR", "1", true);
setenv("PYTHON_COLORS", "0", true);

if (getenv("GITHUB_ACTIONS")) {
NSLog(@"Running in a GitHub Actions environment");
}
// Arguments to pass into the test suite runner.
// argv[0] must identify the process; any subsequent arg
// will be handled as if it were an argument to `python -m test`
Expand Down
9 changes: 9 additions & 0 deletions Apple/testbed/__main__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import argparse
import json
import os
import re
import shutil
import subprocess
Expand Down Expand Up @@ -78,13 +79,21 @@ def xcode_test(location: Path, platform: str, simulator: str, verbose: bool):
check=True,
)

# Any environment variable prefixed with TEST_RUNNER_ is exposed into the
# test runner environment. There are some variables (like those identifying
# CI platforms) that can be useful to have access to.
test_env = os.environ.copy()
if "GITHUB_ACTIONS" in os.environ:
test_env["TEST_RUNNER_GITHUB_ACTIONS"] = os.environ["GITHUB_ACTIONS"]

print("Running test project...")
# Test execution *can't* be run -quiet; verbose mode
# is how we see the output of the test output.
process = subprocess.Popen(
["xcodebuild", "test-without-building"] + args,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
env=test_env,
)
while line := (process.stdout.readline()).decode(*DECODE_ARGS):
# Strip the timestamp/process prefix from each log line
Expand Down
3 changes: 2 additions & 1 deletion Lib/test/support/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
"BrokenIter",
"in_systemd_nspawn_sync_suppressed",
"run_no_yield_async_fn", "run_yielding_async_fn", "async_yield",
"reset_code",
"reset_code", "on_github_actions"
]


Expand Down Expand Up @@ -1369,6 +1369,7 @@ def reset_code(f: types.FunctionType) -> types.FunctionType:
f.__code__ = f.__code__.replace()
return f

on_github_actions = "GITHUB_ACTIONS" in os.environ

#=======================================================================
# Check for the presence of docstrings.
Expand Down
4 changes: 4 additions & 0 deletions Lib/test/test_socketserver.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,12 +223,16 @@ def test_ForkingUDPServer(self):
self.dgram_examine)

@requires_unix_sockets
@unittest.skipIf(test.support.is_apple_mobile and test.support.on_github_actions,
"gh-140702: Test fails regularly on iOS simulator on GitHub Actions")
def test_UnixDatagramServer(self):
self.run_server(socketserver.UnixDatagramServer,
socketserver.DatagramRequestHandler,
self.dgram_examine)

@requires_unix_sockets
@unittest.skipIf(test.support.is_apple_mobile and test.support.on_github_actions,
"gh-140702: Test fails regularly on iOS simulator on GitHub Actions")
def test_ThreadingUnixDatagramServer(self):
self.run_server(socketserver.ThreadingUnixDatagramServer,
socketserver.DatagramRequestHandler,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
The iOS testbed app will now expose the ``GITHUB_ACTIONS`` environment
variable to iOS apps being tested.
Loading