Skip to content

Commit f69bac3

Browse files
committed
Add a test for the output of logs
1 parent 84502f8 commit f69bac3

File tree

1 file changed

+70
-2
lines changed

1 file changed

+70
-2
lines changed

internal/service/lambda/invoke_action_test.go

Lines changed: 70 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,13 +138,13 @@ func TestAccLambdaInvokeAction_logTypes(t *testing.T) {
138138
CheckDestroy: acctest.CheckDestroyNoop,
139139
Steps: []resource.TestStep{
140140
{
141-
Config: testAccInvokeActionConfig_logType(rName, testData, inputJSON, "None"),
141+
Config: testAccInvokeActionConfig_logType(rName, testData, inputJSON, string(awstypes.LogTypeNone)),
142142
Check: resource.ComposeTestCheckFunc(
143143
testAccCheckInvokeActionLogType(ctx, rName, inputJSON, awstypes.LogTypeNone),
144144
),
145145
},
146146
{
147-
Config: testAccInvokeActionConfig_logType(rName, testData, inputJSON, "Tail"),
147+
Config: testAccInvokeActionConfig_logType(rName, testData, inputJSON, string(awstypes.LogTypeTail)),
148148
Check: resource.ComposeTestCheckFunc(
149149
testAccCheckInvokeActionLogType(ctx, rName, inputJSON, awstypes.LogTypeTail),
150150
),
@@ -182,6 +182,34 @@ func TestAccLambdaInvokeAction_clientContext(t *testing.T) {
182182
})
183183
}
184184

185+
func TestAccLambdaInvokeAction_logTypeTail(t *testing.T) {
186+
ctx := acctest.Context(t)
187+
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
188+
testData := "log_output_test"
189+
inputJSON := `{"key1":"value1","key2":"value2"}`
190+
191+
resource.ParallelTest(t, resource.TestCase{
192+
PreCheck: func() {
193+
acctest.PreCheck(ctx, t)
194+
acctest.PreCheckPartitionHasService(t, names.LambdaEndpointID)
195+
},
196+
ErrorCheck: acctest.ErrorCheck(t, names.LambdaServiceID),
197+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories,
198+
TerraformVersionChecks: []tfversion.TerraformVersionCheck{
199+
tfversion.SkipBelow(tfversion.Version1_14_0),
200+
},
201+
CheckDestroy: acctest.CheckDestroyNoop,
202+
Steps: []resource.TestStep{
203+
{
204+
Config: testAccInvokeActionConfig_logType(rName, testData, inputJSON, string(awstypes.LogTypeTail)),
205+
Check: resource.ComposeTestCheckFunc(
206+
testAccCheckInvokeActionLogOutput(ctx, rName, inputJSON),
207+
),
208+
},
209+
},
210+
})
211+
}
212+
185213
func TestAccLambdaInvokeAction_complexPayload(t *testing.T) {
186214
ctx := acctest.Context(t)
187215
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
@@ -348,6 +376,46 @@ func testAccCheckInvokeActionLogType(ctx context.Context, functionName, inputJSO
348376
}
349377
}
350378

379+
// testAccCheckInvokeActionLogOutput verifies that log output is captured and can be decoded
380+
func testAccCheckInvokeActionLogOutput(ctx context.Context, functionName, inputJSON string) resource.TestCheckFunc {
381+
return func(s *terraform.State) error {
382+
conn := acctest.Provider.Meta().(*conns.AWSClient).LambdaClient(ctx)
383+
384+
input := &lambda.InvokeInput{
385+
FunctionName: &functionName,
386+
InvocationType: awstypes.InvocationTypeRequestResponse,
387+
Payload: []byte(inputJSON),
388+
LogType: awstypes.LogTypeTail,
389+
}
390+
391+
output, err := conn.Invoke(ctx, input)
392+
if err != nil {
393+
return fmt.Errorf("Failed to invoke Lambda function %s with log type Tail: %w", functionName, err)
394+
}
395+
396+
if output.FunctionError != nil {
397+
return fmt.Errorf("Lambda function %s returned an error: %s", functionName, string(output.Payload))
398+
}
399+
400+
// Verify log result is present
401+
if output.LogResult == nil {
402+
return fmt.Errorf("Expected log result when log type is Tail, but got none")
403+
}
404+
405+
logData, err := base64.StdEncoding.DecodeString(*output.LogResult)
406+
if err != nil {
407+
return fmt.Errorf("Failed to decode log result: %w", err)
408+
}
409+
410+
logStr := string(logData)
411+
if len(logStr) == 0 {
412+
return fmt.Errorf("Decoded log result is empty")
413+
}
414+
415+
return nil
416+
}
417+
}
418+
351419
// testAccCheckInvokeActionClientContext verifies client context is passed correctly
352420
func testAccCheckInvokeActionClientContext(ctx context.Context, functionName, inputJSON, clientContext string) resource.TestCheckFunc {
353421
return func(s *terraform.State) error {

0 commit comments

Comments
 (0)