1

I'm very new to golang, so I'm trying to follow: terratest_code-base while buidling my test to read the cw log stream.

terraformOptions := terraform.WithDefaultRetryableErrors(t, &terraform.Options{
            // The path to where our Terraform code is located to give the folder name
            TerraformDir: "../../",

            // Variables to pass to our Terraform code using -var options
            Vars: map[string]interface{}{
                "dynamo_db_table_name": expectedTableName,
                "token": token,
                "aws_region": awsRegion,
                "access_key": accessKey,
                "secret_key": secretKey,
                "environment": environment,
            },

            // Environment variables to set when running Terraform
            EnvVars: map[string]string{
                "AWS_DEFAULT_REGION": awsRegion,
                "AWS_ACCESS_KEY_ID": accessKey,
                "AWS_SECRET_ACCESS_KEY": secretKey,
                "AWS_SESSION_TOKEN": token,
            },
            // Backend config to create state file in S3
            BackendConfig: map[string]interface{}{
                "bucket": bucketName,
                "key":    key,
                "region": awsRegion,
            },
        })
    // At the end of the test, run `terraform destroy` to clean up any resources that were created
    defer terraform.Destroy(t, terraformOptions)

    // This will run `terraform init` and `terraform apply` and fail the test if there are any errors
    terraform.InitAndApply(t, terraformOptions)

client := aws.NewCloudWatchLogsClient(t, awsRegion)
    cw_main_log_group_prefix := terraform.Output(t, terraformOptions, "main_cloudwatch_log_name")

    groups, err := client.DescribeLogGroups(&cloudwatchlogs.DescribeLogGroupsInput{LogGroupNamePrefix: &cw_main_log_group_prefix})
    // cw_prefix_not_exist_msg := fmt.Sprintf("CW Log group %s does not exists", cw_main_log_group_prefix)
    if err != nil {
        assert.Error(t, errors.New("Error in "))
    }

    if len(groups.LogGroups) < 1 {
             assert.Error(t, errors.New(fmt.Sprintf("No log group found for %s", cw_main_log_group_prefix)))
    }

    group := groups.LogGroups[0]
    fmt.Println(group)
    streams, err := client.DescribeLogStreams(&cloudwatchlogs.DescribeLogStreamsInput{
            LogGroupName: group.LogGroupName,
            Descending:   awsSDK.Bool(true),
            OrderBy:      awsSDK.String("LastEventTime"),
    })

    if len(streams.LogStreams) < 1 {
          assert.Error(t, errors.New(fmt.Sprintf("No log streams found for %s", cw_main_log_group_prefix)))
    }

    stream := streams.LogStreams[0]
     message, err := aws.GetCloudWatchLogEntriesE(t, awsRegion, stream.LogStreamName, cw_main_log_group_prefix)

I'm getting below error:

cannot use stream.LogStreamName (variable of type *string) as type string in argument to aws.GetCloudWatchLogEntriesE

as the response from describeLogstream has string attribute called LogStreamName

My question is how to fix this?

can anyone suggest me how to follow carry out the test? only thing it prints is fmt.Println(group)

change198
  • 1,647
  • 3
  • 21
  • 60
  • change the param `stream.LogStreamName` to `*(stream.LogStreamName)` at latest line? – Para Jan 11 '23 at 02:19
  • It sounds as if the error message is merely requesting that you dereference the pointer in the method parameters because it expects a `string` type. Have you tried that? – Matthew Schuchard Jan 11 '23 at 11:56

0 Answers0