provider/aws: Improved the SNS topic subscription protocols validation

This commit is contained in:
Ninir 2016-12-13 17:54:52 +01:00
parent 7a0949ee5a
commit 99be2d3280
3 changed files with 49 additions and 16 deletions

View File

@ -33,19 +33,7 @@ func resourceAwsSnsTopicSubscription() *schema.Resource {
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
},
ValidateFunc: validateSNSSubscriptionProtocol,
},
"endpoint": &schema.Schema{
Type: schema.TypeString,

View File

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

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