diff --git a/Sources/ApolloWebSocket/WebSocketTransport.swift b/Sources/ApolloWebSocket/WebSocketTransport.swift index 051d9afb7b..117b5e40fb 100644 --- a/Sources/ApolloWebSocket/WebSocketTransport.swift +++ b/Sources/ApolloWebSocket/WebSocketTransport.swift @@ -224,12 +224,13 @@ public class WebSocketTransport { } public func initServer() { - self.acked = false + processingQueue.async { + self.acked = false - if let str = OperationMessage(payload: self.connectingPayload, type: .connectionInit).rawMessage { - write(str, force:true) + if let str = OperationMessage(payload: self.connectingPayload, type: .connectionInit).rawMessage { + self.write(str, force:true) + } } - } public func closeConnection() { diff --git a/Tests/ApolloTests/WebSocket/WebSocketTransportTests.swift b/Tests/ApolloTests/WebSocket/WebSocketTransportTests.swift index e635944c10..0d9f2a9315 100644 --- a/Tests/ApolloTests/WebSocket/WebSocketTransportTests.swift +++ b/Tests/ApolloTests/WebSocket/WebSocketTransportTests.swift @@ -48,6 +48,23 @@ class WebSocketTransportTests: XCTestCase { waitForExpectations(timeout: 3, handler: nil) } + + func testCloseConnectionAndInit() { + WebSocketTransport.provider = MockWebSocket.self + + self.webSocketTransport = WebSocketTransport(request: URLRequest(url: TestURL.mockServer.url), + connectingPayload: ["Authorization": "OldToken"]) + self.webSocketTransport.closeConnection() + self.webSocketTransport.updateConnectingPayload(["Authorization": "UpdatedToken"]) + self.webSocketTransport.initServer() + + let exp = expectation(description: "Wait") + let result = XCTWaiter.wait(for: [exp], timeout: 1.0) + if result == XCTWaiter.Result.timedOut { + } else { + XCTFail("Delay interrupted") + } + } } private final class MockWebSocketDelegate: WebSocketDelegate {