Skip to content

Commit 36f3657

Browse files
committed
more work
1 parent 1f90147 commit 36f3657

File tree

1 file changed

+21
-16
lines changed

1 file changed

+21
-16
lines changed

Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func withMockServer<Result>(
2828
) async throws -> Result {
2929
let eventLoopGroup = NIOSingletons.posixEventLoopGroup
3030
let server = MockLambdaServer(behavior: behaviour, port: port, keepAlive: keepAlive, eventLoopGroup: eventLoopGroup)
31-
let port = try await server.start().get()
31+
let port = try await server.start()
3232

3333
let result: Swift.Result<Result, any Error>
3434
do {
@@ -41,19 +41,19 @@ func withMockServer<Result>(
4141
return try result.get()
4242
}
4343

44-
final class MockLambdaServer {
44+
final class MockLambdaServer<Behavior: LambdaServerBehavior> {
4545
private let logger = Logger(label: "MockLambdaServer")
46-
private let behavior: LambdaServerBehavior
46+
private let behavior: Behavior
4747
private let host: String
4848
private let port: Int
4949
private let keepAlive: Bool
5050
private let group: EventLoopGroup
5151

5252
private var channel: Channel?
53-
private var shutdown = false
53+
private var shutdown = false, n,m
5454

5555
init(
56-
behavior: LambdaServerBehavior,
56+
behavior: Behavior,
5757
host: String = "127.0.0.1",
5858
port: Int = 7000,
5959
keepAlive: Bool = true,
@@ -70,28 +70,33 @@ final class MockLambdaServer {
7070
assert(shutdown)
7171
}
7272

73-
func start() -> EventLoopFuture<Int> {
74-
let bootstrap = ServerBootstrap(group: group)
73+
func start() async throws -> Int {
74+
let logger = self.logger
75+
let keepAlive = self.keepAlive
76+
let behavior = self.behavior
77+
78+
let channel = try await ServerBootstrap(group: group)
7579
.serverChannelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1)
7680
.childChannelInitializer { channel in
7781
do {
7882
try channel.pipeline.syncOperations.configureHTTPServerPipeline(withErrorHandling: true)
7983
try channel.pipeline.syncOperations.addHandler(
80-
HTTPHandler(logger: self.logger, keepAlive: self.keepAlive, behavior: self.behavior)
84+
HTTPHandler(logger: logger, keepAlive: keepAlive, behavior: behavior)
8185
)
8286
return channel.eventLoop.makeSucceededVoidFuture()
8387
} catch {
8488
return channel.eventLoop.makeFailedFuture(error)
8589
}
8690
}
87-
return bootstrap.bind(host: self.host, port: self.port).flatMap { channel in
88-
self.channel = channel
89-
guard let localAddress = channel.localAddress else {
90-
return channel.eventLoop.makeFailedFuture(ServerError.cantBind)
91-
}
92-
self.logger.info("\(self) started and listening on \(localAddress)")
93-
return channel.eventLoop.makeSucceededFuture(localAddress.port!)
91+
.bind(host: self.host, port: self.port)
92+
.get()
93+
94+
self.channel = channel
95+
guard let localAddress = channel.localAddress else {
96+
throw ServerError.cantBind
9497
}
98+
self.logger.info("\(self) started and listening on \(localAddress)")
99+
return localAddress.port!
95100
}
96101

97102
func stop() -> EventLoopFuture<Void> {
@@ -255,7 +260,7 @@ final class HTTPHandler: ChannelInboundHandler {
255260
}
256261
}
257262

258-
protocol LambdaServerBehavior {
263+
protocol LambdaServerBehavior: Sendable {
259264
func getInvocation() -> GetInvocationResult
260265
func processResponse(requestId: String, response: String?) -> Result<Void, ProcessResponseError>
261266
func processError(requestId: String, error: ErrorResponse) -> Result<Void, ProcessErrorError>

0 commit comments

Comments
 (0)