Skip to content

Commit ed689e1

Browse files
committed
Some improvements
1 parent 6b8acb3 commit ed689e1

File tree

2 files changed

+47
-49
lines changed

2 files changed

+47
-49
lines changed

Sources/AWSLambdaTesting/Lambda+Testing.swift

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,42 +20,46 @@ import NIO
2020

2121
extension Lambda {
2222
public static func test(_ closure: @escaping StringLambdaClosure,
23-
with payload: String,
24-
_ body: @escaping (Result<String, Error>) -> Void) {
25-
Self.test(StringLambdaClosureWrapper(closure), with: payload, body)
23+
with payload: String) throws -> String {
24+
try Self.test(StringLambdaClosureWrapper(closure), with: payload)
2625
}
2726

2827
public static func test(_ closure: @escaping StringVoidLambdaClosure,
29-
with payload: String,
30-
_ body: @escaping (Result<Void, Error>) -> Void) {
31-
Self.test(StringVoidLambdaClosureWrapper(closure), with: payload, body)
28+
with payload: String) throws {
29+
_ = try Self.test(StringVoidLambdaClosureWrapper(closure), with: payload)
3230
}
3331

34-
public static func test<In: Decodable, Out: Encodable>(_ closure: @escaping CodableLambdaClosure<In, Out>,
35-
with payload: In,
36-
_ body: @escaping (Result<Out, Error>) -> Void) {
37-
Self.test(CodableLambdaClosureWrapper(closure), with: payload, body)
32+
public static func test<In: Decodable, Out: Encodable>(
33+
_ closure: @escaping CodableLambdaClosure<In, Out>,
34+
with payload: In
35+
) throws -> Out {
36+
try Self.test(CodableLambdaClosureWrapper(closure), with: payload)
3837
}
3938

4039
public static func test<In: Decodable>(_ closure: @escaping CodableVoidLambdaClosure<In>,
41-
with payload: In,
42-
_ body: @escaping (Result<Void, Error>) -> Void) {
43-
Self.test(CodableVoidLambdaClosureWrapper(closure), with: payload, body)
40+
with payload: In) throws {
41+
_ = try Self.test(CodableVoidLambdaClosureWrapper(closure), with: payload)
4442
}
4543

46-
public static func test<In, Out, Handler: EventLoopLambdaHandler>(_ handler: Handler,
47-
with payload: In,
48-
_ body: @escaping (Result<Out, Error>) -> Void) where Handler.In == In, Handler.Out == Out {
44+
public static func test<In, Out, Handler: EventLoopLambdaHandler>(
45+
_ handler: Handler,
46+
with payload: In
47+
) throws -> Out where Handler.In == In, Handler.Out == Out {
4948
let logger = Logger(label: "test")
5049
let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)
50+
let eventLoop = eventLoopGroup.next()
51+
5152
let context = Context(requestId: "\(DispatchTime.now().uptimeNanoseconds)",
5253
traceId: "Root=\(DispatchTime.now().uptimeNanoseconds);Parent=\(DispatchTime.now().uptimeNanoseconds);Sampled=1",
5354
invokedFunctionArn: "arn:aws:lambda:us-west-1:\(DispatchTime.now().uptimeNanoseconds):function:custom-runtime",
5455
deadline: .now() + 5,
5556
logger: logger,
56-
eventLoop: eventLoopGroup.next())
57-
handler.handle(context: context, payload: payload).whenComplete { result in
58-
body(result)
57+
eventLoop: eventLoop)
58+
59+
let future = eventLoop.flatSubmit {
60+
handler.handle(context: context, payload: payload)
5961
}
62+
63+
return try future.wait()
6064
}
6165
}

Tests/AWSLambdaTestingTests/Tests.swift

Lines changed: 24 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,9 @@ class LambdaTestingTests: XCTestCase {
3131
}
3232

3333
let request = Request(name: UUID().uuidString)
34-
Lambda.test(myLambda, with: request) { result in
35-
switch result {
36-
case .failure(let error):
37-
XCTFail("expected to succeed but failed with \(error)")
38-
case .success(let response):
39-
XCTAssertEqual(response.message, "echo" + request.name)
40-
}
41-
}
34+
var response: Response?
35+
XCTAssertNoThrow(response = try Lambda.test(myLambda, with: request))
36+
XCTAssertEqual(response?.message, "echo" + request.name)
4237
}
4338

4439
func testCodableVoidClosure() {
@@ -51,14 +46,7 @@ class LambdaTestingTests: XCTestCase {
5146
}
5247

5348
let request = Request(name: UUID().uuidString)
54-
Lambda.test(myLambda, with: request) { result in
55-
switch result {
56-
case .failure(let error):
57-
XCTFail("expected to succeed but failed with \(error)")
58-
case .success:
59-
break
60-
}
61-
}
49+
XCTAssertNoThrow(try Lambda.test(myLambda, with: request))
6250
}
6351

6452
func testLambdaHandler() {
@@ -80,14 +68,9 @@ class LambdaTestingTests: XCTestCase {
8068
}
8169

8270
let request = Request(name: UUID().uuidString)
83-
Lambda.test(MyLambda(), with: request) { result in
84-
switch result {
85-
case .failure(let error):
86-
XCTFail("expected to succeed but failed with \(error)")
87-
case .success(let response):
88-
XCTAssertEqual(response.message, "echo" + request.name)
89-
}
90-
}
71+
var response: Response?
72+
XCTAssertNoThrow(response = try Lambda.test(MyLambda(), with: request))
73+
XCTAssertEqual(response?.message, "echo" + request.name)
9174
}
9275

9376
func testFailure() {
@@ -102,13 +85,24 @@ class LambdaTestingTests: XCTestCase {
10285
}
10386
}
10487

105-
Lambda.test(MyLambda(), with: UUID().uuidString) { result in
106-
switch result {
107-
case .failure(let error):
108-
XCTAssert(error is MyError)
109-
case .success:
110-
XCTFail("expected to fail but succeeded")
88+
XCTAssertThrowsError(try Lambda.test(MyLambda(), with: UUID().uuidString)) { error in
89+
XCTAssert(error is MyError)
90+
}
91+
}
92+
93+
func testAsyncLongRunning() {
94+
struct MyError: Error {}
95+
96+
var executed: Bool = false
97+
98+
let myLambda = { (_: Lambda.Context, _: String, callback: @escaping (Result<Void, Error>) -> Void) in
99+
DispatchQueue.global(qos: .background).asyncAfter(deadline: .now() + 0.5) {
100+
executed = true
101+
callback(.success(()))
111102
}
112103
}
104+
105+
XCTAssertNoThrow(try Lambda.test(myLambda, with: UUID().uuidString))
106+
XCTAssertTrue(executed)
113107
}
114108
}

0 commit comments

Comments
 (0)