diff --git a/builtin/providers/aws/resource_aws_sns_topic_subscription.go b/builtin/providers/aws/resource_aws_sns_topic_subscription.go index 23ecf04117..c772db616d 100644 --- a/builtin/providers/aws/resource_aws_sns_topic_subscription.go +++ b/builtin/providers/aws/resource_aws_sns_topic_subscription.go @@ -30,22 +30,10 @@ func resourceAwsSnsTopicSubscription() *schema.Resource { Schema: map[string]*schema.Schema{ "protocol": &schema.Schema{ - Type: schema.TypeString, - Required: true, - ForceNew: false, - ValidateFunc: func(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - forbidden := []string{"email", "sms"} - for _, f := range forbidden { - if strings.Contains(value, f) { - errors = append( - errors, - fmt.Errorf("Unsupported protocol (%s) for SNS Topic", value), - ) - } - } - return - }, + Type: schema.TypeString, + Required: true, + ForceNew: false, + ValidateFunc: validateSNSSubscriptionProtocol, }, "endpoint": &schema.Schema{ Type: schema.TypeString, diff --git a/builtin/providers/aws/validators.go b/builtin/providers/aws/validators.go index 8995c30aa2..9d67592276 100644 --- a/builtin/providers/aws/validators.go +++ b/builtin/providers/aws/validators.go @@ -4,6 +4,7 @@ import ( "fmt" "net" "regexp" + "strings" "time" "github.com/aws/aws-sdk-go/service/s3" @@ -573,3 +574,17 @@ func validateSQSFifoQueueName(v interface{}, k string) (errors []error) { return } + +func validateSNSSubscriptionProtocol(v interface{}, k string) (ws []string, errors []error) { + value := strings.ToLower(v.(string)) + forbidden := []string{"email", "sms"} + for _, f := range forbidden { + if strings.Contains(value, f) { + errors = append( + errors, + fmt.Errorf("Unsupported protocol (%s) for SNS Topic", value), + ) + } + } + return +} diff --git a/builtin/providers/aws/validators_test.go b/builtin/providers/aws/validators_test.go index 520e2300cd..db8c244e91 100644 --- a/builtin/providers/aws/validators_test.go +++ b/builtin/providers/aws/validators_test.go @@ -865,3 +865,33 @@ func TestValidateSQSFifoQueueName(t *testing.T) { } } } + +func TestValidateSNSSubscriptionProtocol(t *testing.T) { + validProtocols := []string{ + "lambda", + "sqs", + "sqs", + "application", + "http", + "https", + } + for _, v := range validProtocols { + if _, errors := validateSNSSubscriptionProtocol(v, "protocol"); len(errors) > 0 { + t.Fatalf("%q should be a valid SNS Subscription protocol: %v", v, errors) + } + } + + invalidProtocols := []string{ + "Email", + "email", + "Email-JSON", + "email-json", + "SMS", + "sms", + } + for _, v := range invalidProtocols { + if _, errors := validateSNSSubscriptionProtocol(v, "protocol"); len(errors) == 0 { + t.Fatalf("%q should be an invalid SNS Subscription protocol: %v", v, errors) + } + } +}