Skip to content

Commit cd69e1a

Browse files
committed
fix
1 parent ef06e1e commit cd69e1a

1 file changed

Lines changed: 22 additions & 16 deletions

File tree

Coder-Desktop/VPNLibTests/TunnelDaemonTests.swift

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,21 @@ struct TunnelDaemonTests {
2222
let executableURL = try createTempExecutable(content: longRunningScript)
2323
defer { try? FileManager.default.removeItem(at: executableURL) }
2424

25-
var failureCalled = false
26-
let daemon = try await TunnelDaemon(binaryPath: executableURL) { _ in
27-
failureCalled = true
25+
let (errors, continuation) = AsyncStream.makeStream(of: TunnelDaemonError.self)
26+
let daemon = try await TunnelDaemon(binaryPath: executableURL) { error in
27+
continuation.yield(error)
2828
}
2929

3030
await #expect(daemon.state.isRunning)
31-
#expect(!failureCalled)
3231
await #expect(daemon.readHandle.fileDescriptor >= 0)
3332
await #expect(daemon.writeHandle.fileDescriptor >= 0)
3433

3534
try await daemon.close()
3635
await #expect(daemon.state.isStopped)
36+
37+
continuation.finish()
38+
let failure = await errors.first(where: { _ in true })
39+
#expect(failure == nil, "onFail should not have been called")
3740
}
3841

3942
@Test func daemonHandlesFailure() async throws {
@@ -45,14 +48,16 @@ struct TunnelDaemonTests {
4548
let executableURL = try createTempExecutable(content: immediateExitScript)
4649
defer { try? FileManager.default.removeItem(at: executableURL) }
4750

48-
var capturedError: TunnelDaemonError?
51+
let (errors, continuation) = AsyncStream.makeStream(of: TunnelDaemonError.self)
4952
let daemon = try await TunnelDaemon(binaryPath: executableURL) { error in
50-
capturedError = error
53+
continuation.yield(error)
5154
}
55+
_ = daemon // ensure daemon stays alive
5256

53-
#expect(await eventually(timeout: .milliseconds(500), interval: .milliseconds(10)) { @MainActor in
54-
capturedError != nil
55-
})
57+
guard let capturedError = await errors.first(where: { _ in true }) else {
58+
Issue.record("onFail was never called")
59+
return
60+
}
5661

5762
if case let .terminated(termination) = capturedError {
5863
if case let .exited(status) = termination {
@@ -61,7 +66,7 @@ struct TunnelDaemonTests {
6166
Issue.record("Expected exited termination, got \(termination)")
6267
}
6368
} else {
64-
Issue.record("Expected terminated error, got \(String(describing: capturedError))")
69+
Issue.record("Expected terminated error, got \(capturedError)")
6570
}
6671

6772
await #expect(daemon.state.isFailed)
@@ -77,9 +82,9 @@ struct TunnelDaemonTests {
7782
let executableURL = try createTempExecutable(content: script)
7883
defer { try? FileManager.default.removeItem(at: executableURL) }
7984

80-
var capturedError: TunnelDaemonError?
85+
let (errors, continuation) = AsyncStream.makeStream(of: TunnelDaemonError.self)
8186
let daemon = try await TunnelDaemon(binaryPath: executableURL) { error in
82-
capturedError = error
87+
continuation.yield(error)
8388
}
8489

8590
await #expect(daemon.state.isRunning)
@@ -91,9 +96,10 @@ struct TunnelDaemonTests {
9196

9297
kill(pid, SIGKILL)
9398

94-
#expect(await eventually(timeout: .milliseconds(500), interval: .milliseconds(10)) { @MainActor in
95-
capturedError != nil
96-
})
99+
guard let capturedError = await errors.first(where: { _ in true }) else {
100+
Issue.record("onFail was never called")
101+
return
102+
}
97103

98104
if case let .terminated(termination) = capturedError {
99105
if case let .unhandledException(status) = termination {
@@ -102,7 +108,7 @@ struct TunnelDaemonTests {
102108
Issue.record("Expected unhandledException termination, got \(termination)")
103109
}
104110
} else {
105-
Issue.record("Expected terminated error, got \(String(describing: capturedError))")
111+
Issue.record("Expected terminated error, got \(capturedError)")
106112
}
107113
}
108114

0 commit comments

Comments
 (0)