Skip to content

Commit 6d2018c

Browse files
committed
Added simple tests
1 parent 1cf1045 commit 6d2018c

File tree

4 files changed

+49
-12
lines changed

4 files changed

+49
-12
lines changed

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ let package = Package(
3838
.testTarget(name: "AWSLambdaRuntimeTests", dependencies: [
3939
.byName(name: "AWSLambdaRuntimeCore"),
4040
.byName(name: "AWSLambdaRuntime"),
41-
]),
41+
], swiftSettings: [.unsafeFlags(["-Xfrontend", "-enable-experimental-concurrency"])]),
4242
.target(name: "AWSLambdaEvents", dependencies: []),
4343
.testTarget(name: "AWSLambdaEventsTests", dependencies: ["AWSLambdaEvents"]),
4444
// testing helper

Sources/AWSLambdaRuntime/Lambda+Codable.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ internal struct CodableVoidClosureWrapper<In: Decodable>: LambdaHandler {
8080

8181
// MARK: - Async
8282

83+
#if compiler(>=5.4) && $AsyncAwait
8384
extension Lambda {
8485

8586
/// An async Lambda Closure that takes a `In: Decodable` and returns an `Out: Encodable`
@@ -138,6 +139,7 @@ internal struct CodableVoidAsyncWrapper<In: Decodable>: AsyncLambdaHandler {
138139
try await self.closure(context, event)
139140
}
140141
}
142+
#endif
141143

142144
// MARK: - Codable support
143145

Sources/AWSLambdaRuntimeCore/LambdaHandler.swift

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ extension LambdaHandler {
8585

8686
// MARK: - AsyncLambdaHandler
8787

88+
#if compiler(>=5.4) && $AsyncAwait
8889
/// Strongly typed, processing protocol for a Lambda that takes a user defined `In` and returns a user defined `Out` async.
8990
public protocol AsyncLambdaHandler: EventLoopLambdaHandler {
9091

@@ -101,20 +102,21 @@ public protocol AsyncLambdaHandler: EventLoopLambdaHandler {
101102

102103
extension AsyncLambdaHandler {
103104
public func handle(context: Lambda.Context, event: In) -> EventLoopFuture<Out> {
104-
@asyncHandler func _run(context: Lambda.Context, event: In, promise: EventLoopPromise<Out>) {
105-
do {
106-
let result = try await handle(context: context, event: event)
107-
promise.succeed(result)
108-
} catch {
109-
promise.fail(error)
110-
}
111-
}
112-
113105
let promise = context.eventLoop.makePromise(of: Out.self)
114-
_run(context: context, event: event, promise: promise)
106+
self._run(context: context, event: event, promise: promise)
115107
return promise.futureResult
116108
}
109+
110+
@asyncHandler private func _run(context: Lambda.Context, event: In, promise: EventLoopPromise<Out>) {
111+
do {
112+
let result = try await handle(context: context, event: event)
113+
promise.succeed(result)
114+
} catch {
115+
promise.fail(error)
116+
}
117+
}
117118
}
119+
#endif
118120

119121
// MARK: - EventLoopLambdaHandler
120122

Tests/AWSLambdaRuntimeTests/Lambda+CodeableTest.swift

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class CodableLambdaTest: XCTestCase {
5353
var response: Response?
5454

5555
let closureWrapper = CodableClosureWrapper { (_, req: Request, completion: (Result<Response, Error>) -> Void) in
56-
XCTAssertEqual(request, request)
56+
XCTAssertEqual(request, req)
5757
completion(.success(Response(requestId: req.requestId)))
5858
}
5959

@@ -62,6 +62,39 @@ class CodableLambdaTest: XCTestCase {
6262
XCTAssertNoThrow(response = try JSONDecoder().decode(Response.self, from: XCTUnwrap(outputBuffer)))
6363
XCTAssertEqual(response?.requestId, request.requestId)
6464
}
65+
66+
#if compiler(>=5.4) && $AsyncAwait
67+
func testCodableVoidAsyncWrapper() {
68+
let request = Request(requestId: UUID().uuidString)
69+
var inputBuffer: ByteBuffer?
70+
var outputBuffer: ByteBuffer?
71+
72+
let closureWrapper = CodableVoidAsyncWrapper { (context, req: Request) in
73+
XCTAssertEqual(request, req)
74+
}
75+
76+
XCTAssertNoThrow(inputBuffer = try JSONEncoder().encode(request, using: self.allocator))
77+
XCTAssertNoThrow(outputBuffer = try closureWrapper.handle(context: self.newContext(), event: XCTUnwrap(inputBuffer)).wait())
78+
XCTAssertNil(outputBuffer)
79+
}
80+
81+
func testCodableAsyncWrapper() {
82+
let request = Request(requestId: UUID().uuidString)
83+
var inputBuffer: ByteBuffer?
84+
var outputBuffer: ByteBuffer?
85+
var response: Response?
86+
87+
let closureWrapper = CodableAsyncWrapper { (context, req: Request) -> Response in
88+
XCTAssertEqual(req, request)
89+
return Response(requestId: req.requestId)
90+
}
91+
92+
XCTAssertNoThrow(inputBuffer = try JSONEncoder().encode(request, using: self.allocator))
93+
XCTAssertNoThrow(outputBuffer = try closureWrapper.handle(context: self.newContext(), event: XCTUnwrap(inputBuffer)).wait())
94+
XCTAssertNoThrow(response = try JSONDecoder().decode(Response.self, from: XCTUnwrap(outputBuffer)))
95+
XCTAssertEqual(response?.requestId, request.requestId)
96+
}
97+
#endif
6598

6699
// convencience method
67100
func newContext() -> Lambda.Context {

0 commit comments

Comments
 (0)