Repository navigation
iOS CI: decisions-guides shard: races on a slow runner, the first web view, and failure cascades - #1820
Merged
Conversation
…class's recording no longer hangs the next The shard runs M3 first on a fresh runner, slower than the old single job. DecisionsProofTests tapped Back while the decision sheet was still sliding away (its Cancel is then the first bar button, run 38010716662) and read the New message sheet as closed 3 s after Send (run 37973911538). It now waits for each sheet to close, and is a ProofCase (cold install at setUp, reset on failure) like the other classes. A class that failed before /video/stop left simctl recording; the next class's recorder exited at once (Host recording is already in progress) and /video/stop waited on that exit forever, so GuideProofTests (and RelayPushTests in pair-and-push) failed on a 120 s request timeout. stopVideo() returns when the recorder has exited, /video/start stops a running one, and a failed ProofCase stops its own recording. The pairing waits print the screen when they fail.
…e's first surface waits as an opening screen Run 38017849289 attempt 2: M3 passed; M4's guide cover showed only its spinner for 30 s. M4 is the first class in this shard to open a web view, so WebKit's first start on the simulator is paid there (AttachmentProofTests paid it before the split); that one wait uses ProofWait.opening, as Attachment's surface waits do. After that failure the test body kept tapping while XCTest ran its tearDown, and the job hung until the 45 min timeout (as on d5d5f54). An async test does not stop at an XCTFail. The pairing waits, the guide's waits and M3's sheet waits now throw (require), so the body ends before tearDown.
…ill-running test Run 38023662529: M3 failed at the largest text size (Reply instead read as not hittable before the swipe settled) and the job hung until the timeout, the third hang after a ProofCase failure. An async test runs on past a failure, so ProofCase's failure tearDown terminated and reinstalled the app under the test body. The reset at the next class's setUp already gives the cold install; RelayPushTests, the one class after a ProofCase that did not reset itself, now resets at setUp too. A leftover recording is stopped by the next /video/start. Reply instead is read once hittable.
… they close Run 38027139806 attempt 2: the 8.1 menu did not close on the first tap outside within 10 s (DecisionsProofTests.swift:212). M4 passed after it and the job ended without a hang. Up to three taps, 5 s apart, for the 8.1 menu and the 8.3 words.
1 task
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Cause
Since the split, the
decisions-guidesshard runs M3 first, straight after the warm-up, on its own runner. That runner is slower than the old single job: M3 took 386 to 524 s there, against 338 s on 046a3a5. Main's code passes locally 3 of 3 times. The failures are races that only a slow runner hits, plus one real ordering dependency. Each failure then spread to the next class, and in three runs to a hung job.DecisionsProofTests.swift:132: XCTAssertFalse failed - the sheet closes once delivered. The text field still existed at t=275, 277 and 279 s after the Send tap at t=272 s.the guide's title not found, with the screen printed). Before the split, AttachmentProofTests paid WebKit's start-up cost on the simulator first.simctl io recordVideoexits at once withHost recording is already in progress(exit 16, reproduced locally)./video/stopthen waited for an exit that had already happened, so the next class failed onNSURLErrorDomain Code=-1001 "The request timed out.". This happened to M4 in 37973911538 and 38010716662, and to RelayPushTests in pair-and-push in 37958261402 and 37987495244.Tear Down, thenTerminate, then the body'sTap Button (Element at index 0), then a secondTear Down, then nothing for 30 min.Fix (proof code only; every class still runs)
ProofCase: cold install at setUp, shared helpers, duplicates removed.ProofWait.opening, like AttachmentProofTests' surface waits. This is the one bound that changed. It is where WebKit's first start is paid in this shard.require): the pairing waits, the guide's waits and M3's sheet waits end the test body when they fail. The pairing waits print the screen when they fail. Two older pairing failures had nothing to read: 38013707345 (the cover did not open) and d5d5f54 (no list after the code).stopVideo()returns when the recorder has already exited, and/video/startstops one that is still running.Runs
proof.ts --prebuilt --only DecisionsProofTests,GuideProofTests:"Try Again", the same failure as dependabot run 37987495244 before this PR. RelayPushTests passed after it, so the reset at setUp works. Not addressed here.