commit bcf8ed3311af9c15d90cda212915d5309bcad347 parent 339625eb70c037193794dfef429b39569d070d2e Author: triesap <tyson@radroots.org> Date: Sun, 9 Aug 2026 20:23:45 +0000 ios: add physical lock recovery gate - Background Radroots before the governed physical lock window. - Reserve a bounded interval for externally verified device locking. - Reactivate the application after the user unlocks protected data. - Fail when the two-tab shell does not recover on the exact device. Diffstat:
| M | RadrootsUITests/RadrootsRemoteQualificationUITests.swift | | | 18 | ++++++++++++++++++ |
1 file changed, 18 insertions(+), 0 deletions(-)
diff --git a/RadrootsUITests/RadrootsRemoteQualificationUITests.swift b/RadrootsUITests/RadrootsRemoteQualificationUITests.swift @@ -222,6 +222,24 @@ final class RadrootsRemoteQualificationUITests: XCTestCase { } @MainActor + func testManualDeviceLockAndProtectedDataRecovery() throws { + let configuration = try QualificationConfiguration.environment() + let app = launchToRoot(configuration) + XCTAssertTrue(app.tabBars.firstMatch.waitForExistence(timeout: 20)) + + XCUIDevice.shared.press(.home) + Thread.sleep(forTimeInterval: 60) + + for _ in 0 ..< 24 { + app.activate() + if app.tabBars.firstMatch.waitForExistence(timeout: 5) { + return + } + } + XCTFail("Radroots did not recover after the physical device was unlocked") + } + + @MainActor private func launchToRoot(_ configuration: QualificationConfiguration) -> XCUIApplication { let app = XCUIApplication() app.launchEnvironment = configuration.launchEnvironment