Merge pull request #10704 from Ninir/r-aws-sns_topic-protocols

provider/aws: Improved the SNS topic subscription protocols validation
This commit is contained in:
Clint 2016-12-13 16:54:21 -06:00 committed by GitHub
commit 56b0e87f5e
3 changed files with 49 additions and 16 deletions

View File

@ -33,19 +33,7 @@ func resourceAwsSnsTopicSubscription() *schema.Resource {
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
ForceNew: false, ForceNew: false,
ValidateFunc: func(v interface{}, k string) (ws []string, errors []error) { ValidateFunc: validateSNSSubscriptionProtocol,
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
},
}, },
"endpoint": &schema.Schema{ "endpoint": &schema.Schema{
Type: schema.TypeString, Type: schema.TypeString,

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"net" "net"
"regexp" "regexp"
"strings"
"time" "time"
"github.com/aws/aws-sdk-go/service/s3" "github.com/aws/aws-sdk-go/service/s3"
@ -573,3 +574,17 @@ func validateSQSFifoQueueName(v interface{}, k string) (errors []error) {
return 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
}

View File

@ -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)
}
}
}