@@ -27,15 +27,10 @@ import Foundation
27
27
import Logging
28
28
import Testing
29
29
import SotoDynamoDB
30
+ import AsyncHTTPClient
30
31
31
32
extension Lambda {
32
33
33
- enum TestState {
34
- case none
35
- case running
36
- case result( BreezeLambdaHandler . Output )
37
- }
38
-
39
34
static func test< T: BreezeCodable > (
40
35
_ handlerType: BreezeLambdaHandler < T > . Type ,
41
36
config: BreezeDynamoDBConfig ,
@@ -48,83 +43,36 @@ extension Lambda {
48
43
let decoder = JSONDecoder ( )
49
44
let encoder = JSONEncoder ( )
50
45
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)
128
56
}
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)
129
77
}
130
78
}
0 commit comments