github.com/joshgarnett/terraform@v0.5.4-0.20160219181435-92dc20bb3594/builtin/providers/aws/validators_test.go (about) 1 package aws 2 3 import ( 4 "testing" 5 ) 6 7 func TestValidateEcrRepositoryName(t *testing.T) { 8 validNames := []string{ 9 "nginx-web-app", 10 "project-a/nginx-web-app", 11 "domain.ltd/nginx-web-app", 12 "3chosome-thing.com/01different-pattern", 13 "0123456789/999999999", 14 "double/forward/slash", 15 "000000000000000", 16 } 17 for _, v := range validNames { 18 _, errors := validateEcrRepositoryName(v, "name") 19 if len(errors) != 0 { 20 t.Fatalf("%q should be a valid ECR repository name: %q", v, errors) 21 } 22 } 23 24 invalidNames := []string{ 25 // length > 256 26 "3cho_some-thing.com/01different.-_pattern01different.-_pattern01diff" + 27 "erent.-_pattern01different.-_pattern01different.-_pattern01different" + 28 ".-_pattern01different.-_pattern01different.-_pattern01different.-_pa" + 29 "ttern01different.-_pattern01different.-_pattern234567", 30 // length < 2 31 "i", 32 "special@character", 33 "different+special=character", 34 "double//slash", 35 "double..dot", 36 "/slash-at-the-beginning", 37 "slash-at-the-end/", 38 } 39 for _, v := range invalidNames { 40 _, errors := validateEcrRepositoryName(v, "name") 41 if len(errors) == 0 { 42 t.Fatalf("%q should be an invalid ECR repository name", v) 43 } 44 } 45 } 46 47 func TestValidateCloudWatchEventRuleName(t *testing.T) { 48 validNames := []string{ 49 "HelloWorl_d", 50 "hello-world", 51 "hello.World0125", 52 } 53 for _, v := range validNames { 54 _, errors := validateCloudWatchEventRuleName(v, "name") 55 if len(errors) != 0 { 56 t.Fatalf("%q should be a valid CW event rule name: %q", v, errors) 57 } 58 } 59 60 invalidNames := []string{ 61 "special@character", 62 "slash/in-the-middle", 63 // Length > 64 64 "TooLooooooooooooooooooooooooooooooooooooooooooooooooooooooongName", 65 } 66 for _, v := range invalidNames { 67 _, errors := validateCloudWatchEventRuleName(v, "name") 68 if len(errors) == 0 { 69 t.Fatalf("%q should be an invalid CW event rule name", v) 70 } 71 } 72 } 73 74 func TestValidateLambdaFunctionName(t *testing.T) { 75 validNames := []string{ 76 "arn:aws:lambda:us-west-2:123456789012:function:ThumbNail", 77 "FunctionName", 78 "function-name", 79 } 80 for _, v := range validNames { 81 _, errors := validateLambdaFunctionName(v, "name") 82 if len(errors) != 0 { 83 t.Fatalf("%q should be a valid Lambda function name: %q", v, errors) 84 } 85 } 86 87 invalidNames := []string{ 88 "/FunctionNameWithSlash", 89 "function.name.with.dots", 90 // lenght > 140 91 "arn:aws:lambda:us-west-2:123456789012:function:TooLoooooo" + 92 "ooooooooooooooooooooooooooooooooooooooooooooooooooooooo" + 93 "ooooooooooooooooongFunctionName", 94 } 95 for _, v := range invalidNames { 96 _, errors := validateLambdaFunctionName(v, "name") 97 if len(errors) == 0 { 98 t.Fatalf("%q should be an invalid Lambda function name", v) 99 } 100 } 101 } 102 103 func TestValidateLambdaQualifier(t *testing.T) { 104 validNames := []string{ 105 "123", 106 "prod", 107 "PROD", 108 "MyTestEnv", 109 "$LATEST", 110 } 111 for _, v := range validNames { 112 _, errors := validateLambdaQualifier(v, "name") 113 if len(errors) != 0 { 114 t.Fatalf("%q should be a valid Lambda function qualifier: %q", v, errors) 115 } 116 } 117 118 invalidNames := []string{ 119 // No ARNs allowed 120 "arn:aws:lambda:us-west-2:123456789012:function:prod", 121 // lenght > 128 122 "TooLooooooooooooooooooooooooooooooooooooooooooooooooooo" + 123 "ooooooooooooooooooooooooooooooooooooooooooooooooooo" + 124 "oooooooooooongQualifier", 125 } 126 for _, v := range invalidNames { 127 _, errors := validateLambdaQualifier(v, "name") 128 if len(errors) == 0 { 129 t.Fatalf("%q should be an invalid Lambda function qualifier", v) 130 } 131 } 132 } 133 134 func TestValidateLambdaPermissionAction(t *testing.T) { 135 validNames := []string{ 136 "lambda:*", 137 "lambda:InvokeFunction", 138 "*", 139 } 140 for _, v := range validNames { 141 _, errors := validateLambdaPermissionAction(v, "action") 142 if len(errors) != 0 { 143 t.Fatalf("%q should be a valid Lambda permission action: %q", v, errors) 144 } 145 } 146 147 invalidNames := []string{ 148 "yada", 149 "lambda:123", 150 "*:*", 151 "lambda:Invoke*", 152 } 153 for _, v := range invalidNames { 154 _, errors := validateLambdaPermissionAction(v, "action") 155 if len(errors) == 0 { 156 t.Fatalf("%q should be an invalid Lambda permission action", v) 157 } 158 } 159 } 160 161 func TestValidateAwsAccountId(t *testing.T) { 162 validNames := []string{ 163 "123456789012", 164 "999999999999", 165 } 166 for _, v := range validNames { 167 _, errors := validateAwsAccountId(v, "account_id") 168 if len(errors) != 0 { 169 t.Fatalf("%q should be a valid AWS Account ID: %q", v, errors) 170 } 171 } 172 173 invalidNames := []string{ 174 "12345678901", // too short 175 "1234567890123", // too long 176 "invalid", 177 "x123456789012", 178 } 179 for _, v := range invalidNames { 180 _, errors := validateAwsAccountId(v, "account_id") 181 if len(errors) == 0 { 182 t.Fatalf("%q should be an invalid AWS Account ID", v) 183 } 184 } 185 } 186 187 func TestValidateArn(t *testing.T) { 188 validNames := []string{ 189 "arn:aws:elasticbeanstalk:us-east-1:123456789012:environment/My App/MyEnvironment", // Beanstalk 190 "arn:aws:iam::123456789012:user/David", // IAM User 191 "arn:aws:rds:eu-west-1:123456789012:db:mysql-db", // RDS 192 "arn:aws:s3:::my_corporate_bucket/exampleobject.png", // S3 object 193 "arn:aws:events:us-east-1:319201112229:rule/rule_name", // CloudWatch Rule 194 "arn:aws:lambda:eu-west-1:319201112229:function:myCustomFunction", // Lambda function 195 "arn:aws:lambda:eu-west-1:319201112229:function:myCustomFunction:Qualifier", // Lambda func qualifier 196 } 197 for _, v := range validNames { 198 _, errors := validateArn(v, "arn") 199 if len(errors) != 0 { 200 t.Fatalf("%q should be a valid ARN: %q", v, errors) 201 } 202 } 203 204 invalidNames := []string{ 205 "arn", 206 "123456789012", 207 "arn:aws", 208 "arn:aws:logs", 209 "arn:aws:logs:region:*:*", 210 } 211 for _, v := range invalidNames { 212 _, errors := validateArn(v, "arn") 213 if len(errors) == 0 { 214 t.Fatalf("%q should be an invalid ARN", v) 215 } 216 } 217 } 218 219 func TestValidatePolicyStatementId(t *testing.T) { 220 validNames := []string{ 221 "YadaHereAndThere", 222 "Valid-5tatement_Id", 223 "1234", 224 } 225 for _, v := range validNames { 226 _, errors := validatePolicyStatementId(v, "statement_id") 227 if len(errors) != 0 { 228 t.Fatalf("%q should be a valid Statement ID: %q", v, errors) 229 } 230 } 231 232 invalidNames := []string{ 233 "Invalid/StatementId/with/slashes", 234 "InvalidStatementId.with.dots", 235 // length > 100 236 "TooooLoooooooooooooooooooooooooooooooooooooooooooo" + 237 "ooooooooooooooooooooooooooooooooooooooooStatementId", 238 } 239 for _, v := range invalidNames { 240 _, errors := validatePolicyStatementId(v, "statement_id") 241 if len(errors) == 0 { 242 t.Fatalf("%q should be an invalid Statement ID", v) 243 } 244 } 245 }