Skip to content

Commit 95446b1

Browse files
committed
A bit of tests update
1 parent a6bc6c6 commit 95446b1

File tree

4 files changed

+58
-47
lines changed

4 files changed

+58
-47
lines changed

Tests/SWIMNIOExampleTests/SWIMNIOClusteredTests.swift

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ final class SWIMNIOClusteredTests: RealClusteredXCTestCase {
2727
// MARK: Black box tests, we let the nodes run and inspect their state via logs
2828

2929
func test_real_peers_2_connect() async throws {
30-
let (firstHandler, _) = self.makeClusterNode()
30+
let (firstHandler, _) = try await self.makeClusterNode()
3131

32-
let (secondHandler, _) = self.makeClusterNode() { settings in
32+
let (secondHandler, _) = try await self.makeClusterNode() { settings in
3333
settings.swim.initialContactPoints = [firstHandler.shell.node]
3434
}
3535

@@ -40,12 +40,12 @@ final class SWIMNIOClusteredTests: RealClusteredXCTestCase {
4040
}
4141

4242
func test_real_peers_2_connect_first_terminates() async throws {
43-
let (firstHandler, firstChannel) = self.makeClusterNode() { settings in
43+
let (firstHandler, firstChannel) = try await self.makeClusterNode() { settings in
4444
settings.swim.pingTimeout = .milliseconds(100)
4545
settings.swim.probeInterval = .milliseconds(500)
4646
}
4747

48-
let (secondHandler, _) = self.makeClusterNode() { settings in
48+
let (secondHandler, _) = try await self.makeClusterNode() { settings in
4949
settings.swim.initialContactPoints = [firstHandler.shell.node]
5050

5151
settings.swim.pingTimeout = .milliseconds(100)
@@ -67,12 +67,12 @@ final class SWIMNIOClusteredTests: RealClusteredXCTestCase {
6767
}
6868

6969
func test_real_peers_2_connect_peerCountNeverExceeds2() async throws {
70-
let (firstHandler, _) = self.makeClusterNode() { settings in
70+
let (firstHandler, _) = try await self.makeClusterNode() { settings in
7171
settings.swim.pingTimeout = .milliseconds(100)
7272
settings.swim.probeInterval = .milliseconds(500)
7373
}
7474

75-
let (secondHandler, _) = self.makeClusterNode() { settings in
75+
let (secondHandler, _) = try await self.makeClusterNode() { settings in
7676
settings.swim.initialContactPoints = [firstHandler.shell.node]
7777

7878
settings.swim.pingTimeout = .milliseconds(100)
@@ -82,7 +82,7 @@ final class SWIMNIOClusteredTests: RealClusteredXCTestCase {
8282
try await self.capturedLogs(of: firstHandler.shell.node)
8383
.log(grep: #""swim/members/count": 2"#)
8484

85-
sleep(5)
85+
try await Task.sleep(for: .seconds(5))
8686

8787
do {
8888
let found = try await self.capturedLogs(of: secondHandler.shell.node)
@@ -95,22 +95,22 @@ final class SWIMNIOClusteredTests: RealClusteredXCTestCase {
9595
}
9696

9797
func test_real_peers_5_connect() async throws {
98-
let (first, _) = self.makeClusterNode() { settings in
98+
let (first, _) = try await self.makeClusterNode() { settings in
9999
settings.swim.probeInterval = .milliseconds(200)
100100
}
101-
let (second, _) = self.makeClusterNode() { settings in
101+
let (second, _) = try await self.makeClusterNode() { settings in
102102
settings.swim.probeInterval = .milliseconds(200)
103103
settings.swim.initialContactPoints = [first.shell.node]
104104
}
105-
let (third, _) = self.makeClusterNode() { settings in
105+
let (third, _) = try await self.makeClusterNode() { settings in
106106
settings.swim.probeInterval = .milliseconds(200)
107107
settings.swim.initialContactPoints = [second.shell.node]
108108
}
109-
let (fourth, _) = self.makeClusterNode() { settings in
109+
let (fourth, _) = try await self.makeClusterNode() { settings in
110110
settings.swim.probeInterval = .milliseconds(200)
111111
settings.swim.initialContactPoints = [third.shell.node]
112112
}
113-
let (fifth, _) = self.makeClusterNode() { settings in
113+
let (fifth, _) = try await self.makeClusterNode() { settings in
114114
settings.swim.probeInterval = .milliseconds(200)
115115
settings.swim.initialContactPoints = [fourth.shell.node]
116116
}
@@ -130,30 +130,31 @@ final class SWIMNIOClusteredTests: RealClusteredXCTestCase {
130130
}
131131

132132
func test_real_peers_5_connect_butSlowly() async throws {
133-
let (first, _) = self.makeClusterNode() { settings in
133+
let (first, _) = try await self.makeClusterNode() { settings in
134134
settings.swim.pingTimeout = .milliseconds(100)
135135
settings.swim.probeInterval = .milliseconds(500)
136136
}
137-
let (second, _) = self.makeClusterNode() { settings in
137+
let (second, _) = try await self.makeClusterNode() { settings in
138138
settings.swim.initialContactPoints = [first.shell.node]
139139
settings.swim.pingTimeout = .milliseconds(100)
140140
settings.swim.probeInterval = .milliseconds(500)
141141
}
142142
// we sleep in order to ensure we exhaust the "gossip at most ... times" logic
143-
sleep(4)
144-
let (third, _) = self.makeClusterNode() { settings in
143+
try await Task.sleep(for: .seconds(4))
144+
145+
let (third, _) = try await self.makeClusterNode() { settings in
145146
settings.swim.initialContactPoints = [second.shell.node]
146147
settings.swim.pingTimeout = .milliseconds(100)
147148
settings.swim.probeInterval = .milliseconds(500)
148149
}
149-
let (fourth, _) = self.makeClusterNode() { settings in
150+
let (fourth, _) = try await self.makeClusterNode() { settings in
150151
settings.swim.initialContactPoints = [third.shell.node]
151152
settings.swim.pingTimeout = .milliseconds(100)
152153
settings.swim.probeInterval = .milliseconds(500)
153154
}
154155
// after joining two more, we sleep again to make sure they all exhaust their gossip message counts
155-
sleep(2)
156-
let (fifth, _) = self.makeClusterNode() { settings in
156+
try await Task.sleep(for: .seconds(2))
157+
let (fifth, _) = try await self.makeClusterNode() { settings in
157158
// we connect fir the first, they should exchange all information
158159
settings.swim.initialContactPoints = [
159160
first.shell.node,
@@ -175,26 +176,26 @@ final class SWIMNIOClusteredTests: RealClusteredXCTestCase {
175176
}
176177

177178
func test_real_peers_5_then1Dies_becomesSuspect() async throws {
178-
let (first, firstChannel) = self.makeClusterNode() { settings in
179+
let (first, firstChannel) = try await self.makeClusterNode() { settings in
179180
settings.swim.pingTimeout = .milliseconds(100)
180181
settings.swim.probeInterval = .milliseconds(500)
181182
}
182-
let (second, _) = self.makeClusterNode() { settings in
183+
let (second, _) = try await self.makeClusterNode() { settings in
183184
settings.swim.initialContactPoints = [first.shell.node]
184185
settings.swim.pingTimeout = .milliseconds(100)
185186
settings.swim.probeInterval = .milliseconds(500)
186187
}
187-
let (third, _) = self.makeClusterNode() { settings in
188+
let (third, _) = try await self.makeClusterNode() { settings in
188189
settings.swim.initialContactPoints = [second.shell.node]
189190
settings.swim.pingTimeout = .milliseconds(100)
190191
settings.swim.probeInterval = .milliseconds(500)
191192
}
192-
let (fourth, _) = self.makeClusterNode() { settings in
193+
let (fourth, _) = try await self.makeClusterNode() { settings in
193194
settings.swim.initialContactPoints = [third.shell.node]
194195
settings.swim.pingTimeout = .milliseconds(100)
195196
settings.swim.probeInterval = .milliseconds(500)
196197
}
197-
let (fifth, _) = self.makeClusterNode() { settings in
198+
let (fifth, _) = try await self.makeClusterNode() { settings in
198199
settings.swim.initialContactPoints = [fourth.shell.node]
199200
settings.swim.pingTimeout = .milliseconds(100)
200201
settings.swim.probeInterval = .milliseconds(500)
@@ -231,11 +232,11 @@ final class SWIMNIOClusteredTests: RealClusteredXCTestCase {
231232
// MARK: nack tests
232233

233234
func test_real_pingRequestsGetSent_nacksArriveBack() async throws {
234-
let (firstHandler, _) = self.makeClusterNode()
235-
let (secondHandler, _) = self.makeClusterNode() { settings in
235+
let (firstHandler, _) = try await self.makeClusterNode()
236+
let (secondHandler, _) = try await self.makeClusterNode() { settings in
236237
settings.swim.initialContactPoints = [firstHandler.shell.node]
237238
}
238-
let (thirdHandler, thirdChannel) = self.makeClusterNode() { settings in
239+
let (thirdHandler, thirdChannel) = try await self.makeClusterNode() { settings in
239240
settings.swim.initialContactPoints = [firstHandler.shell.node, secondHandler.shell.node]
240241
}
241242

Tests/SWIMNIOExampleTests/SWIMNIOEventClusteredTests.swift

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,33 +43,33 @@ final class SWIMNIOEventClusteredTests: EmbeddedClusteredXCTestCase {
4343
super.tearDown()
4444
}
4545

46-
func test_memberStatusChange_alive_emittedForMyself() throws {
46+
func test_memberStatusChange_alive_emittedForMyself() async throws {
4747
let firstProbe = ProbeEventHandler(loop: group.next())
4848

49-
let first = try bindShell(probe: firstProbe) { settings in
49+
let first = try await bindShell(probe: firstProbe) { settings in
5050
settings.node = self.myselfNode
5151
}
52-
defer { try! first.close().wait() }
5352

5453
try firstProbe.expectEvent(SWIM.MemberStatusChangedEvent(previousStatus: nil, member: self.myselfMemberAliveInitial))
54+
55+
try await first.close().get()
5556
}
5657

57-
func test_memberStatusChange_suspect_emittedForDyingNode() throws {
58+
func test_memberStatusChange_suspect_emittedForDyingNode() async throws {
5859
let firstProbe = ProbeEventHandler(loop: group.next())
5960
let secondProbe = ProbeEventHandler(loop: group.next())
6061

6162
let secondNodePort = 7002
6263
let secondNode = Node(protocol: "udp", host: "127.0.0.1", port: secondNodePort, uid: 222_222)
6364

64-
let second = try bindShell(probe: secondProbe) { settings in
65+
let second = try await bindShell(probe: secondProbe) { settings in
6566
settings.node = secondNode
6667
}
6768

68-
let first = try bindShell(probe: firstProbe) { settings in
69+
let first = try await bindShell(probe: firstProbe) { settings in
6970
settings.node = self.myselfNode
7071
settings.swim.initialContactPoints = [secondNode.withoutUID]
7172
}
72-
defer { try! first.close().wait() }
7373

7474
// wait for second probe to become alive:
7575
try secondProbe.expectEvent(
@@ -79,8 +79,8 @@ final class SWIMNIOEventClusteredTests: EmbeddedClusteredXCTestCase {
7979
)
8080
)
8181

82-
sleep(5) // let them discover each other, since the nodes are slow at retrying and we didn't configure it yet a sleep is here meh
83-
try! second.close().wait()
82+
try await Task.sleep(for: .seconds(5)) // let them discover each other, since the nodes are slow at retrying and we didn't configure it yet a sleep is here meh
83+
try await second.close().get()
8484

8585
try firstProbe.expectEvent(SWIM.MemberStatusChangedEvent(previousStatus: nil, member: self.myselfMemberAliveInitial))
8686

@@ -93,22 +93,28 @@ final class SWIMNIOEventClusteredTests: EmbeddedClusteredXCTestCase {
9393
XCTAssertTrue(secondDeadEvent.isReachabilityChange)
9494
XCTAssertTrue(secondDeadEvent.status.isDead)
9595
XCTAssertEqual(secondDeadEvent.member.node.withoutUID, secondNode.withoutUID)
96+
97+
try await first.close().get()
9698
}
9799

98-
private func bindShell(probe probeHandler: ProbeEventHandler, configure: (inout SWIMNIO.Settings) -> Void = { _ in () }) throws -> Channel {
100+
private func bindShell(
101+
probe probeHandler: ProbeEventHandler,
102+
configure: (inout SWIMNIO.Settings) -> Void = { _ in () }
103+
) async throws -> Channel {
99104
var settings = self.settings
100105
configure(&settings)
101106
self.makeLogCapture(name: "swim-\(settings.node!.port)", settings: &settings)
102107

103108
self._nodes.append(settings.node!)
104-
return try DatagramBootstrap(group: self.group)
109+
return try await DatagramBootstrap(group: self.group)
105110
.channelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1)
106111
.channelInitializer { [settings] channel in
107112
let swimHandler = SWIMNIOHandler(settings: settings)
108113
return channel.pipeline.addHandler(swimHandler).flatMap { _ in
109114
channel.pipeline.addHandler(probeHandler)
110115
}
111-
}.bind(host: settings.node!.host, port: settings.node!.port).wait()
116+
}.bind(host: settings.node!.host, port: settings.node!.port)
117+
.get()
112118
}
113119
}
114120

@@ -135,6 +141,7 @@ final class ProbeEventHandler: ChannelInboundHandler, Sendable {
135141
typealias InboundIn = SWIM.MemberStatusChangedEvent<SWIM.NIOPeer>
136142

137143
let events: Mutex<[SWIM.MemberStatusChangedEvent<SWIM.NIOPeer>]> = .init([])
144+
// FIXME: Move to Swift Concurrency
138145
let waitingPromise: Mutex<EventLoopPromise<SWIM.MemberStatusChangedEvent<SWIM.NIOPeer>>?> = .init(.none)
139146
let loop: Mutex<EventLoop>
140147

Tests/SWIMNIOExampleTests/SWIMNIOMetricsTests.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,23 +39,23 @@ final class SWIMNIOMetricsTests: RealClusteredXCTestCase {
3939
// ==== ------------------------------------------------------------------------------------------------------------
4040
// MARK: Metrics tests
4141

42-
func test_metrics_emittedByNIOImplementation() throws {
43-
let (firstHandler, _) = self.makeClusterNode() { settings in
42+
func test_metrics_emittedByNIOImplementation() async throws {
43+
let (firstHandler, _) = try await self.makeClusterNode() { settings in
4444
settings.swim.metrics.labelPrefix = "first"
4545
settings.swim.probeInterval = .milliseconds(100)
4646
}
47-
_ = self.makeClusterNode() { settings in
47+
_ = try await self.makeClusterNode() { settings in
4848
settings.swim.metrics.labelPrefix = "second"
4949
settings.swim.probeInterval = .milliseconds(100)
5050
settings.swim.initialContactPoints = [firstHandler.shell.node]
5151
}
52-
let (_, thirdChannel) = self.makeClusterNode() { settings in
52+
let (_, thirdChannel) = try await self.makeClusterNode() { settings in
5353
settings.swim.metrics.labelPrefix = "third"
5454
settings.swim.probeInterval = .milliseconds(100)
5555
settings.swim.initialContactPoints = [firstHandler.shell.node]
5656
}
5757

58-
sleep(1) // giving it some extra time to report a few metrics (a few round-trip times etc).
58+
try await Task.sleep(for: .seconds(1)) // giving it some extra time to report a few metrics (a few round-trip times etc).
5959

6060
let m: SWIM.Metrics.ShellMetrics = firstHandler.metrics!
6161

@@ -80,7 +80,7 @@ final class SWIMNIOMetricsTests: RealClusteredXCTestCase {
8080
XCTAssertGreaterThan(messageOutboundBytes.lastValue!, 0)
8181

8282
thirdChannel.close(promise: nil)
83-
sleep(2)
83+
try await Task.sleep(for: .seconds(2))
8484

8585
let pingRequestResponseTimeAll = try! self.testMetrics.expectTimer(m.pingRequestResponseTimeAll)
8686
print(" pingRequestResponseTimeAll = \(pingRequestResponseTimeAll.lastValue!)")

Tests/SWIMNIOExampleTests/Utils/BaseXCTestCases.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ class RealClusteredXCTestCase: BaseClusteredXCTestCase {
4545
self.loop = nil
4646
}
4747

48-
func makeClusterNode(name: String? = nil, configure configureSettings: (inout SWIMNIO.Settings) -> Void = { _ in () }) -> (SWIMNIOHandler, Channel) {
48+
func makeClusterNode(
49+
name: String? = nil,
50+
configure configureSettings: (inout SWIMNIO.Settings) -> Void = { _ in () }
51+
) async throws -> (SWIMNIOHandler, Channel) {
4952
let port = self.nextPort()
5053
let name = name ?? "swim-\(port)"
5154
var settings = SWIMNIO.Settings()
@@ -60,7 +63,7 @@ class RealClusteredXCTestCase: BaseClusteredXCTestCase {
6063
.channelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1)
6164
.channelInitializer { channel in channel.pipeline.addHandler(handler) }
6265

63-
let channel = try! bootstrap.bind(host: "127.0.0.1", port: port).wait()
66+
let channel = try await bootstrap.bind(host: "127.0.0.1", port: port).get()
6467

6568
self._shells.append(handler.shell)
6669
self._nodes.append(handler.shell.node)

0 commit comments

Comments
 (0)