@@ -27,15 +27,10 @@ import Foundation
2727import Logging
2828import Testing
2929import SotoDynamoDB
30+ import AsyncHTTPClient
3031
3132extension Lambda {
3233
33- enum TestState {
34- case none
35- case running
36- case result( BreezeLambdaHandler . Output )
37- }
38-
3934 static func test< T: BreezeCodable > (
4035 _ handlerType: BreezeLambdaHandler < T > . Type ,
4136 config: BreezeDynamoDBConfig ,
@@ -48,83 +43,36 @@ extension Lambda {
4843 let decoder = JSONDecoder ( )
4944 let encoder = JSONEncoder ( )
5045
51- return try await testGracefulShutdown { gracefulShutdownTestTrigger in
52- let httpClientService = BreezeHTTPClientService ( timeout: . seconds( 1 ) , logger: logger)
53- let awsClient = AWSClient ( )
54- let db = SotoDynamoDB . DynamoDB ( client: awsClient)
55- let dbManager = BreezeDynamoDBManagerMock ( db: db, tableName: config. tableName, keyName: config. keyName)
56- let sut = handlerType. init ( dbManager: dbManager, operation: operation)
57-
58- let serviceGroup = ServiceGroup (
59- configuration: . init(
60- services: [
61- . init(
62- service: httpClientService,
63- successTerminationBehavior: . ignore,
64- failureTerminationBehavior: . gracefullyShutdownGroup
65- )
66- ] ,
67- logger: logger
68- )
69- )
70-
71- let testState = try await withThrowingTaskGroup ( of: TestState . self) { group in
72- group. addTask {
73- try await serviceGroup. run ( )
74- try await awsClient. shutdown ( )
75- return TestState . running
76- }
77-
78- group. addTask {
79- defer {
80- gracefulShutdownTestTrigger. triggerGracefulShutdown ( )
81- }
82- let closureHandler = ClosureHandler { event, context in
83- //Inject Mock Response
84- await dbManager. setupMockResponse ( response: response, keyedResponse: keyedResponse)
85-
86- // Execute Handler
87- return try await sut. handle ( event, context: context)
88- }
89-
90- var handler = LambdaCodableAdapter (
91- encoder: encoder,
92- decoder: decoder,
93- handler: LambdaHandlerAdapter ( handler: closureHandler)
94- )
95- let data = try encoder. encode ( event)
96- let event = ByteBuffer ( data: data)
97- let writer = MockLambdaResponseStreamWriter ( )
98- let context = LambdaContext . __forTestsOnly (
99- requestID: UUID ( ) . uuidString,
100- traceID: UUID ( ) . uuidString,
101- invokedFunctionARN: " arn: " ,
102- timeout: . milliseconds( 6000 ) ,
103- logger: logger
104- )
105-
106- try await handler. handle ( event, responseWriter: writer, context: context)
107-
108- let result = await writer. output ?? ByteBuffer ( )
109- return TestState . result ( try decoder. decode ( BreezeLambdaHandler < T > . Output. self, from: result) )
110- }
111- for try await value in group {
112- switch value {
113- case . none, . running:
114- break
115- case . result:
116- return value
117- }
118- }
119- return TestState . none
120- }
121-
122- switch testState {
123- case . none, . running:
124- return APIGatewayV2Response ( with: " " , statusCode: . noContent)
125- case . result( let response) :
126- return response
127- }
46+ let awsClient = AWSClient ( )
47+ let db = SotoDynamoDB . DynamoDB ( client: awsClient)
48+ let dbManager = BreezeDynamoDBManagerMock ( db: db, tableName: config. tableName, keyName: config. keyName)
49+ let sut = handlerType. init ( dbManager: dbManager, operation: operation)
50+
51+ let closureHandler = ClosureHandler { event, context in
52+ //Inject Mock Response
53+ await dbManager. setupMockResponse ( response: response, keyedResponse: keyedResponse)
54+ // Execute Handler
55+ return try await sut. handle ( event, context: context)
12856 }
57+
58+ var handler = LambdaCodableAdapter (
59+ encoder: encoder,
60+ decoder: decoder,
61+ handler: LambdaHandlerAdapter ( handler: closureHandler)
62+ )
63+ let data = try encoder. encode ( event)
64+ let event = ByteBuffer ( data: data)
65+ let writer = MockLambdaResponseStreamWriter ( )
66+ let context = LambdaContext . __forTestsOnly (
67+ requestID: UUID ( ) . uuidString,
68+ traceID: UUID ( ) . uuidString,
69+ invokedFunctionARN: " arn: " ,
70+ timeout: . milliseconds( 6000 ) ,
71+ logger: logger
72+ )
73+ try await handler. handle ( event, responseWriter: writer, context: context)
74+ let result = await writer. output ?? ByteBuffer ( )
75+ try await awsClient. shutdown ( )
76+ return try decoder. decode ( BreezeLambdaHandler < T > . Output. self, from: result)
12977 }
13078}
0 commit comments