|
|
@@ -21,37 +21,41 @@ import NIOConcurrencyHelpers
|
|
|
import XCTest
|
|
|
|
|
|
final class ServerOnCloseTests: GRPCTestCase {
|
|
|
- private let group = MultiThreadedEventLoopGroup(numberOfThreads: System.coreCount)
|
|
|
- private var server: Server!
|
|
|
- private var client: ClientConnection!
|
|
|
+ private var group: EventLoopGroup?
|
|
|
+ private var server: Server?
|
|
|
+ private var client: ClientConnection?
|
|
|
private var echo: Echo_EchoClient!
|
|
|
|
|
|
private var eventLoop: EventLoop {
|
|
|
- return self.group.next()
|
|
|
+ return self.group!.next()
|
|
|
}
|
|
|
|
|
|
override func tearDown() {
|
|
|
// Some tests shut down the client/server so we tolerate errors here.
|
|
|
- try? self.client.close().wait()
|
|
|
- try? self.server.close().wait()
|
|
|
- XCTAssertNoThrow(try self.group.syncShutdownGracefully())
|
|
|
+ try? self.client?.close().wait()
|
|
|
+ try? self.server?.close().wait()
|
|
|
+ XCTAssertNoThrow(try self.group?.syncShutdownGracefully())
|
|
|
+ super.tearDown()
|
|
|
+ }
|
|
|
+
|
|
|
+ override func setUp() {
|
|
|
+ super.setUp()
|
|
|
+ self.group = MultiThreadedEventLoopGroup(numberOfThreads: System.coreCount)
|
|
|
}
|
|
|
|
|
|
private func setUp(provider: Echo_EchoProvider) throws {
|
|
|
- self.server = try Server.insecure(group: self.group)
|
|
|
+ self.server = try Server.insecure(group: self.group!)
|
|
|
.withLogger(self.serverLogger)
|
|
|
.withServiceProviders([provider])
|
|
|
.bind(host: "localhost", port: 0)
|
|
|
.wait()
|
|
|
|
|
|
- print(self.server.channel.localAddress!.port!)
|
|
|
-
|
|
|
- self.client = ClientConnection.insecure(group: self.group)
|
|
|
+ self.client = ClientConnection.insecure(group: self.group!)
|
|
|
.withBackgroundActivityLogger(self.clientLogger)
|
|
|
- .connect(host: "localhost", port: self.server.channel.localAddress!.port!)
|
|
|
+ .connect(host: "localhost", port: self.server!.channel.localAddress!.port!)
|
|
|
|
|
|
self.echo = Echo_EchoClient(
|
|
|
- channel: self.client,
|
|
|
+ channel: self.client!,
|
|
|
defaultCallOptions: CallOptions(logger: self.clientLogger)
|
|
|
)
|
|
|
}
|
|
|
@@ -94,7 +98,7 @@ final class ServerOnCloseTests: GRPCTestCase {
|
|
|
|
|
|
// We want to wait until the client has sent the request parts before closing. We'll grab the
|
|
|
// promise for sending end.
|
|
|
- let endSent = self.client.eventLoop.makePromise(of: Void.self)
|
|
|
+ let endSent = self.client!.eventLoop.makePromise(of: Void.self)
|
|
|
self.echo.interceptors = DelegatingEchoClientInterceptorFactory { part, promise, context in
|
|
|
switch part {
|
|
|
case .metadata, .message:
|
|
|
@@ -108,7 +112,7 @@ final class ServerOnCloseTests: GRPCTestCase {
|
|
|
_ = self.echo.get(.with { $0.text = "" })
|
|
|
// Make sure end has been sent before closing the connection.
|
|
|
XCTAssertNoThrow(try endSent.futureResult.wait())
|
|
|
- XCTAssertNoThrow(try self.client.close().wait())
|
|
|
+ XCTAssertNoThrow(try self.client!.close().wait())
|
|
|
XCTAssertNoThrow(try promise.futureResult.wait())
|
|
|
}
|
|
|
|
|
|
@@ -147,7 +151,7 @@ final class ServerOnCloseTests: GRPCTestCase {
|
|
|
|
|
|
let collect = self.echo.collect()
|
|
|
XCTAssertNoThrow(try collect.sendMessage(.with { $0.text = "" }).wait())
|
|
|
- XCTAssertNoThrow(try self.client.close().wait())
|
|
|
+ XCTAssertNoThrow(try self.client!.close().wait())
|
|
|
XCTAssertNoThrow(try promise.futureResult.wait())
|
|
|
}
|
|
|
|
|
|
@@ -184,7 +188,7 @@ final class ServerOnCloseTests: GRPCTestCase {
|
|
|
|
|
|
// We want to wait until the client has sent the request parts before closing. We'll grab the
|
|
|
// promise for sending end.
|
|
|
- let endSent = self.client.eventLoop.makePromise(of: Void.self)
|
|
|
+ let endSent = self.client!.eventLoop.makePromise(of: Void.self)
|
|
|
self.echo.interceptors = DelegatingEchoClientInterceptorFactory { part, promise, context in
|
|
|
switch part {
|
|
|
case .metadata, .message:
|
|
|
@@ -198,7 +202,7 @@ final class ServerOnCloseTests: GRPCTestCase {
|
|
|
_ = self.echo.expand(.with { $0.text = "1 2 3" }) { _ in /* ignore responses */ }
|
|
|
// Make sure end has been sent before closing the connection.
|
|
|
XCTAssertNoThrow(try endSent.futureResult.wait())
|
|
|
- XCTAssertNoThrow(try self.client.close().wait())
|
|
|
+ XCTAssertNoThrow(try self.client!.close().wait())
|
|
|
XCTAssertNoThrow(try promise.futureResult.wait())
|
|
|
}
|
|
|
|
|
|
@@ -223,10 +227,11 @@ final class ServerOnCloseTests: GRPCTestCase {
|
|
|
}
|
|
|
|
|
|
func testBidirectionalStreamingOnCloseAfterUserFunctionFails() throws {
|
|
|
- self.doTestBidirectionalStreaming(
|
|
|
- echoProvider: FailingEchoProvider(),
|
|
|
- completesWithStatus: .internalError
|
|
|
- )
|
|
|
+ // TODO: https://github.com/grpc/grpc-swift/issues/1215
|
|
|
+ // self.doTestBidirectionalStreaming(
|
|
|
+ // echoProvider: FailingEchoProvider(),
|
|
|
+ // completesWithStatus: .internalError
|
|
|
+ // )
|
|
|
}
|
|
|
|
|
|
func testBidirectionalStreamingOnCloseAfterClientKilled() throws {
|
|
|
@@ -237,7 +242,7 @@ final class ServerOnCloseTests: GRPCTestCase {
|
|
|
|
|
|
let update = self.echo.update { _ in /* ignored */ }
|
|
|
XCTAssertNoThrow(try update.sendMessage(.with { $0.text = "" }).wait())
|
|
|
- XCTAssertNoThrow(try self.client.close().wait())
|
|
|
+ XCTAssertNoThrow(try self.client!.close().wait())
|
|
|
XCTAssertNoThrow(try promise.futureResult.wait())
|
|
|
}
|
|
|
}
|