Skip to content

Commit 3f849a0

Browse files
committed
Add AsyncLambdaHandler tests
1 parent bb65408 commit 3f849a0

File tree

3 files changed

+76
-2
lines changed

3 files changed

+76
-2
lines changed

Sources/AWSLambdaRuntimeCore/LambdaHandler.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ extension AsyncLambdaHandler {
108108

109109
@asyncHandler private func _run(context: Lambda.Context, event: In, promise: EventLoopPromise<Out>) {
110110
do {
111-
let result = try await handle(context: context, event: event)
111+
let result = try await self.handle(context: context, event: event)
112112
promise.succeed(result)
113113
} catch {
114114
promise.fail(error)

Tests/AWSLambdaRuntimeCoreTests/Lambda+StringTest.swift renamed to Tests/AWSLambdaRuntimeCoreTests/LambdaHandlerTest.swift

+70-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616
import NIO
1717
import XCTest
1818

19-
class StringLambdaTest: XCTestCase {
19+
class LambdaHandlerTest: XCTestCase {
20+
// MARK: Callback
21+
2022
func testCallbackSuccess() {
2123
let server = MockLambdaServer(behavior: Behavior())
2224
XCTAssertNoThrow(try server.start().wait())
@@ -77,6 +79,71 @@ class StringLambdaTest: XCTestCase {
7779
assertLambdaLifecycleResult(result, shoudHaveRun: maxTimes)
7880
}
7981

82+
#if compiler(>=5.5) && $AsyncAwait
83+
84+
// MARK: AsyncLambdaHandler
85+
86+
func testAsyncHandlerSuccess() {
87+
let server = MockLambdaServer(behavior: Behavior())
88+
XCTAssertNoThrow(try server.start().wait())
89+
defer { XCTAssertNoThrow(try server.stop().wait()) }
90+
91+
struct Handler: AsyncLambdaHandler {
92+
typealias In = String
93+
typealias Out = String
94+
95+
func handle(context: Lambda.Context, event: String) async throws -> String {
96+
event
97+
}
98+
}
99+
100+
let maxTimes = Int.random(in: 1 ... 10)
101+
let configuration = Lambda.Configuration(lifecycle: .init(maxTimes: maxTimes))
102+
let result = Lambda.run(configuration: configuration, handler: Handler())
103+
assertLambdaLifecycleResult(result, shoudHaveRun: maxTimes)
104+
}
105+
106+
func testVoidAsyncHandlerSuccess() {
107+
let server = MockLambdaServer(behavior: Behavior(result: .success(nil)))
108+
XCTAssertNoThrow(try server.start().wait())
109+
defer { XCTAssertNoThrow(try server.stop().wait()) }
110+
111+
struct Handler: AsyncLambdaHandler {
112+
typealias In = String
113+
typealias Out = Void
114+
115+
func handle(context: Lambda.Context, event: String) async throws {}
116+
}
117+
118+
let maxTimes = Int.random(in: 1 ... 10)
119+
let configuration = Lambda.Configuration(lifecycle: .init(maxTimes: maxTimes))
120+
let result = Lambda.run(configuration: configuration, handler: Handler())
121+
assertLambdaLifecycleResult(result, shoudHaveRun: maxTimes)
122+
}
123+
124+
func testAsyncHandlerFailure() {
125+
let server = MockLambdaServer(behavior: Behavior(result: .failure(TestError("boom"))))
126+
XCTAssertNoThrow(try server.start().wait())
127+
defer { XCTAssertNoThrow(try server.stop().wait()) }
128+
129+
struct Handler: AsyncLambdaHandler {
130+
typealias In = String
131+
typealias Out = String
132+
133+
func handle(context: Lambda.Context, event: String) async throws -> String {
134+
throw TestError("boom")
135+
}
136+
}
137+
138+
let maxTimes = Int.random(in: 1 ... 10)
139+
let configuration = Lambda.Configuration(lifecycle: .init(maxTimes: maxTimes))
140+
let result = Lambda.run(configuration: configuration, handler: Handler())
141+
assertLambdaLifecycleResult(result, shoudHaveRun: maxTimes)
142+
}
143+
#endif
144+
145+
// MARK: EventLoop
146+
80147
func testEventLoopSuccess() {
81148
let server = MockLambdaServer(behavior: Behavior())
82149
XCTAssertNoThrow(try server.start().wait())
@@ -137,6 +204,8 @@ class StringLambdaTest: XCTestCase {
137204
assertLambdaLifecycleResult(result, shoudHaveRun: maxTimes)
138205
}
139206

207+
// MARK: Closure
208+
140209
func testClosureSuccess() {
141210
let server = MockLambdaServer(behavior: Behavior())
142211
XCTAssertNoThrow(try server.start().wait())

docker/docker-compose.al2.main.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,14 @@ services:
1010

1111
test:
1212
image: swift-aws-lambda:al2-main
13+
command: /bin/bash -cl "swift test --enable-test-discovery -Xswiftc -warnings-as-errors $${SANITIZER_ARG-} -Xswiftc -Xfrontend -Xswiftc -enable-experimental-concurrency"
1314

1415
test-samples:
1516
image: swift-aws-lambda:al2-main
17+
command: >-
18+
/bin/bash -clx "
19+
swift build -Xswiftc -Xfrontend -Xswiftc -enable-experimental-concurrency --package-path Examples/LambdaFunctions &&
20+
swift build -Xswiftc -Xfrontend -Xswiftc -enable-experimental-concurrency --package-path Examples/LocalDebugging/MyLambda"
1621
1722
shell:
1823
image: swift-aws-lambda:al2-main

0 commit comments

Comments
 (0)