From bf0132704f329e3abc94fca9d48687564c9b3ccf Mon Sep 17 00:00:00 2001 From: Tim Condon <0xTim@users.noreply.github.com> Date: Wed, 18 Aug 2021 16:29:33 +0100 Subject: [PATCH] Migrate to localhost tests (#100) * Migrate to localhost tests * Use automatic port picking --- .../WebSocketKitTests/WebSocketKitTests.swift | 80 ++++++++++++------- 1 file changed, 49 insertions(+), 31 deletions(-) diff --git a/Tests/WebSocketKitTests/WebSocketKitTests.swift b/Tests/WebSocketKitTests/WebSocketKitTests.swift index a6936d1f..94c2f5bd 100644 --- a/Tests/WebSocketKitTests/WebSocketKitTests.swift +++ b/Tests/WebSocketKitTests/WebSocketKitTests.swift @@ -6,9 +6,20 @@ import NIOWebSocket final class WebSocketKitTests: XCTestCase { func testWebSocketEcho() throws { + let server = try ServerBootstrap.webSocket(on: self.elg) { req, ws in + ws.onText { ws, text in + ws.send(text) + } + }.bind(host: "localhost", port: 0).wait() + + guard let port = server.localAddress?.port else { + XCTFail("couldn't get port from \(server.localAddress.debugDescription)") + return + } + let promise = elg.next().makePromise(of: String.self) let closePromise = elg.next().makePromise(of: Void.self) - WebSocket.connect(to: "ws://echo.websocket.org", on: elg) { ws in + WebSocket.connect(to: "ws://localhost:\(port)", on: elg) { ws in ws.send("hello") ws.onText { ws, string in promise.succeed(string) @@ -17,18 +28,7 @@ final class WebSocketKitTests: XCTestCase { }.cascadeFailure(to: promise) try XCTAssertEqual(promise.futureResult.wait(), "hello") XCTAssertNoThrow(try closePromise.futureResult.wait()) - } - - func testWebSocketWithTLSEcho() throws { - let promise = elg.next().makePromise(of: String.self) - WebSocket.connect(to: "wss://echo.websocket.org", on: elg) { ws in - ws.send("hello") - ws.onText { ws, string in - promise.succeed(string) - ws.close(promise: nil) - } - }.cascadeFailure(to: promise) - try XCTAssertEqual(promise.futureResult.wait(), "hello") + try server.close(mode: .all).wait() } func testBadHost() throws { @@ -36,8 +36,6 @@ final class WebSocketKitTests: XCTestCase { } func testServerClose() throws { - let port = Int.random(in: 8000..<9000) - let sendPromise = self.elg.next().makePromise(of: Void.self) let serverClose = self.elg.next().makePromise(of: Void.self) let clientClose = self.elg.next().makePromise(of: Void.self) @@ -47,7 +45,12 @@ final class WebSocketKitTests: XCTestCase { ws.close(promise: serverClose) } } - }.bind(host: "localhost", port: port).wait() + }.bind(host: "localhost", port: 0).wait() + + guard let port = server.localAddress?.port else { + XCTFail("couldn't get port from \(server.localAddress.debugDescription)") + return + } WebSocket.connect(to: "ws://localhost:\(port)", on: self.elg) { ws in ws.send("close", promise: sendPromise) @@ -61,8 +64,6 @@ final class WebSocketKitTests: XCTestCase { } func testClientClose() throws { - let port = Int.random(in: 8000..<9000) - let sendPromise = self.elg.next().makePromise(of: Void.self) let serverClose = self.elg.next().makePromise(of: Void.self) let clientClose = self.elg.next().makePromise(of: Void.self) @@ -71,7 +72,12 @@ final class WebSocketKitTests: XCTestCase { ws.send(text) } ws.onClose.cascade(to: serverClose) - }.bind(host: "localhost", port: port).wait() + }.bind(host: "localhost", port: 0).wait() + + guard let port = server.localAddress?.port else { + XCTFail("couldn't get port from \(server.localAddress.debugDescription)") + return + } WebSocket.connect(to: "ws://localhost:\(port)", on: self.elg) { ws in ws.send("close", promise: sendPromise) @@ -89,8 +95,6 @@ final class WebSocketKitTests: XCTestCase { } func testImmediateSend() throws { - let port = Int.random(in: 8000..<9000) - let promise = self.elg.next().makePromise(of: String.self) let server = try ServerBootstrap.webSocket(on: self.elg) { req, ws in ws.send("hello") @@ -98,7 +102,12 @@ final class WebSocketKitTests: XCTestCase { promise.succeed(string) ws.close(promise: nil) } - }.bind(host: "localhost", port: port).wait() + }.bind(host: "localhost", port: 0).wait() + + guard let port = server.localAddress?.port else { + XCTFail("couldn't get port from \(server.localAddress.debugDescription)") + return + } WebSocket.connect(to: "ws://localhost:\(port)", on: self.elg) { ws in ws.onText { ws, string in @@ -112,14 +121,17 @@ final class WebSocketKitTests: XCTestCase { } func testWebSocketPong() throws { - let port = Int.random(in: 8000..<9000) - let pongPromise = self.elg.next().makePromise(of: String.self) let server = try ServerBootstrap.webSocket(on: self.elg) { req, ws in ws.onPing { ws in ws.close(promise: nil) } - }.bind(host: "localhost", port: port).wait() + }.bind(host: "localhost", port: 0).wait() + + guard let port = server.localAddress?.port else { + XCTFail("couldn't get port from \(server.localAddress.debugDescription)") + return + } WebSocket.connect(to: "ws://localhost:\(port)", on: self.elg) { ws in ws.send(raw: Data(), opcode: .ping) @@ -134,13 +146,16 @@ final class WebSocketKitTests: XCTestCase { } func testErrorCode() throws { - let port = Int.random(in: 8000..<9000) - let promise = self.elg.next().makePromise(of: WebSocketErrorCode.self) let server = try ServerBootstrap.webSocket(on: self.elg) { req, ws in ws.close(code: .normalClosure, promise: nil) - }.bind(host: "localhost", port: port).wait() + }.bind(host: "localhost", port: 0).wait() + + guard let port = server.localAddress?.port else { + XCTFail("couldn't get port from \(server.localAddress.debugDescription)") + return + } WebSocket.connect(to: "ws://localhost:\(port)", on: self.elg) { ws in ws.onText { ws, string in @@ -157,14 +172,17 @@ final class WebSocketKitTests: XCTestCase { } func testHeadersAreSent() throws { - let port = Int.random(in: 8000..<9000) - let promise = self.elg.next().makePromise(of: String.self) let server = try ServerBootstrap.webSocket(on: self.elg) { req, ws in promise.succeed(req.headers.first(name: "Auth")!) ws.close(promise: nil) - }.bind(host: "localhost", port: port).wait() + }.bind(host: "localhost", port: 0).wait() + + guard let port = server.localAddress?.port else { + XCTFail("couldn't get port from \(server.localAddress.debugDescription)") + return + } WebSocket.connect( to: "ws://localhost:\(port)",