Skip to content

Commit

Permalink
resource/aws_kinesis_firehose_delivery_stream: Prevent panic with emp…
Browse files Browse the repository at this point in the history
…ty `processing_configuration` configuration block (hashicorp#12613)

Reference: hashicorp#12600

Previously:

```
=== CONT  TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3_ProcessingConfiguration_Empty
panic: interface conversion: interface {} is nil, not map[string]interface {}

goroutine 118 [running]:
github.com/terraform-providers/terraform-provider-aws/aws.extractProcessingConfiguration(0xc00184d260, 0xc00184d260)
  /Users/bflad/src/github.com/terraform-providers/terraform-provider-aws/aws/resource_aws_kinesis_firehose_delivery_stream.go:1740 +0x2c8
github.com/terraform-providers/terraform-provider-aws/aws.createExtendedS3Config(0xc00046aaf0, 0x6e20c0a)
  /Users/bflad/src/github.com/terraform-providers/terraform-provider-aws/aws/resource_aws_kinesis_firehose_delivery_stream.go:1447 +0x87d
github.com/terraform-providers/terraform-provider-aws/aws.resourceAwsKinesisFirehoseDeliveryStreamCreate(0xc00046aaf0, 0x62e1d20, 0xc0006cc500, 0x2, 0xb612ec0)
  /Users/bflad/src/github.com/terraform-providers/terraform-provider-aws/aws/resource_aws_kinesis_firehose_delivery_stream.go:2119 +0xee2
github.com/hashicorp/terraform-plugin-sdk/helper/schema.(*Resource).Apply(0xc000a7c400, 0xc00018e230, 0xc0008dc980, 0x62e1d20, 0xc0006cc500, 0x6167b01, 0xc001428fa8, 0xc001690d50)
  /Users/bflad/go/pkg/mod/github.com/hashicorp/terraform-plugin-sdk@v1.8.0/helper/schema/resource.go:305 +0x365
```

Output from acceptance testing:

```
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_basic (133.73s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_ElasticsearchConfigUpdates (827.20s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3_DataFormatConversionConfiguration_Deserializer_Update (125.27s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3_DataFormatConversionConfiguration_Enabled (147.94s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3_DataFormatConversionConfiguration_HiveJsonSerDe_Empty (125.16s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3_DataFormatConversionConfiguration_OpenXJsonSerDe_Empty (117.24s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3_DataFormatConversionConfiguration_OrcSerDe_Empty (124.51s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3_DataFormatConversionConfiguration_ParquetSerDe_Empty (90.80s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3_DataFormatConversionConfiguration_Serializer_Update (110.44s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3_ErrorOutputPrefix (116.60s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3_ExternalUpdate (133.58s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3_ProcessingConfiguration_Empty (101.05s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3basic (140.86s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3KmsKeyArn (138.74s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3Updates (192.36s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_missingProcessingConfiguration (101.08s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_RedshiftConfigUpdates (419.73s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_s3basic (98.32s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_s3basicWithSSE (231.02s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_s3basicWithTags (153.05s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_s3ConfigUpdates (199.63s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_s3KinesisStreamSource (105.65s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_s3WithCloudwatchLogging (118.33s)
--- PASS: TestAccAWSKinesisFirehoseDeliveryStream_SplunkConfigUpdates (159.89s)
```
  • Loading branch information
bflad authored and adamdecaf committed May 28, 2020
1 parent 678a78c commit a5c488a
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 1 deletion.
2 changes: 1 addition & 1 deletion aws/resource_aws_kinesis_firehose_delivery_stream.go
Original file line number Diff line number Diff line change
Expand Up @@ -1728,7 +1728,7 @@ func expandFirehoseSchemaConfiguration(l []interface{}) *firehose.SchemaConfigur

func extractProcessingConfiguration(s3 map[string]interface{}) *firehose.ProcessingConfiguration {
config := s3["processing_configuration"].([]interface{})
if len(config) == 0 {
if len(config) == 0 || config[0] == nil {
// It is possible to just pass nil here, but this seems to be the
// canonical form that AWS uses, and is less likely to produce diffs.
return &firehose.ProcessingConfiguration{
Expand Down
47 changes: 47 additions & 0 deletions aws/resource_aws_kinesis_firehose_delivery_stream_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -709,6 +709,35 @@ func TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3_ErrorOutputPrefix(t *tes
})
}

// Reference: https://github.com/terraform-providers/terraform-provider-aws/issues/12600
func TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3_ProcessingConfiguration_Empty(t *testing.T) {
var stream firehose.DeliveryStreamDescription
rInt := acctest.RandInt()
rName := acctest.RandomWithPrefix("tf-acc-test")
resourceName := "aws_kinesis_firehose_delivery_stream.test"

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckKinesisFirehoseDeliveryStreamDestroy_ExtendedS3,
Steps: []resource.TestStep{
{
Config: testAccKinesisFirehoseDeliveryStreamConfig_ExtendedS3_ProcessingConfiguration_Empty(rName, rInt),
Check: resource.ComposeTestCheckFunc(
testAccCheckKinesisFirehoseDeliveryStreamExists(resourceName, &stream),
resource.TestCheckResourceAttr(resourceName, "extended_s3_configuration.#", "1"),
resource.TestCheckResourceAttr(resourceName, "extended_s3_configuration.0.processing_configuration.#", "1"),
),
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
},
},
})
}

func TestAccAWSKinesisFirehoseDeliveryStream_ExtendedS3KmsKeyArn(t *testing.T) {
rString := acctest.RandString(8)
funcName := fmt.Sprintf("aws_kinesis_firehose_delivery_stream_test_%s", rString)
Expand Down Expand Up @@ -1995,6 +2024,24 @@ resource "aws_kinesis_firehose_delivery_stream" "test" {
`, rName, errorOutputPrefix)
}

func testAccKinesisFirehoseDeliveryStreamConfig_ExtendedS3_ProcessingConfiguration_Empty(rName string, rInt int) string {
return fmt.Sprintf(testAccKinesisFirehoseDeliveryStreamBaseConfig, rInt, rInt, rInt) + fmt.Sprintf(`
resource "aws_kinesis_firehose_delivery_stream" "test" {
destination = "extended_s3"
name = %[1]q
extended_s3_configuration {
bucket_arn = aws_s3_bucket.bucket.arn
role_arn = aws_iam_role.firehose.arn
processing_configuration {}
}
depends_on = ["aws_iam_role_policy.firehose"]
}
`, rName)
}

var testAccKinesisFirehoseDeliveryStreamConfig_extendedS3KmsKeyArn = testAccKinesisFirehoseDeliveryStreamBaseConfig + `
resource "aws_kms_key" "test" {
description = "Terraform acc test %s"
Expand Down

0 comments on commit a5c488a

Please sign in to comment.