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  }