github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/aws/cloudfront_distribution_configuration_structure_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	"github.com/aws/aws-sdk-go/aws"
     8  	"github.com/aws/aws-sdk-go/service/cloudfront"
     9  	"github.com/hashicorp/terraform/helper/schema"
    10  )
    11  
    12  func defaultCacheBehaviorConf() map[string]interface{} {
    13  	return map[string]interface{}{
    14  		"viewer_protocol_policy":      "allow-all",
    15  		"target_origin_id":            "myS3Origin",
    16  		"forwarded_values":            schema.NewSet(forwardedValuesHash, []interface{}{forwardedValuesConf()}),
    17  		"min_ttl":                     86400,
    18  		"trusted_signers":             trustedSignersConf(),
    19  		"lambda_function_association": lambdaFunctionAssociationsConf(),
    20  		"max_ttl":                     365000000,
    21  		"smooth_streaming":            false,
    22  		"default_ttl":                 86400,
    23  		"allowed_methods":             allowedMethodsConf(),
    24  		"cached_methods":              cachedMethodsConf(),
    25  		"compress":                    true,
    26  	}
    27  }
    28  
    29  func cacheBehaviorConf1() map[string]interface{} {
    30  	cb := defaultCacheBehaviorConf()
    31  	cb["path_pattern"] = "/path1"
    32  	return cb
    33  }
    34  
    35  func cacheBehaviorConf2() map[string]interface{} {
    36  	cb := defaultCacheBehaviorConf()
    37  	cb["path_pattern"] = "/path2"
    38  	return cb
    39  }
    40  
    41  func cacheBehaviorsConf() *schema.Set {
    42  	return schema.NewSet(cacheBehaviorHash, []interface{}{cacheBehaviorConf1(), cacheBehaviorConf2()})
    43  }
    44  
    45  func trustedSignersConf() []interface{} {
    46  	return []interface{}{"1234567890EX", "1234567891EX"}
    47  }
    48  
    49  func lambdaFunctionAssociationsConf() *schema.Set {
    50  	x := []interface{}{
    51  		map[string]interface{}{
    52  			"event_type": "viewer-request",
    53  			"lambda_arn": "arn:aws:lambda:us-east-1:999999999:function1:alias",
    54  		},
    55  		map[string]interface{}{
    56  			"event_type": "origin-response",
    57  			"lambda_arn": "arn:aws:lambda:us-east-1:999999999:function2:alias",
    58  		},
    59  	}
    60  
    61  	return schema.NewSet(lambdaFunctionAssociationHash, x)
    62  }
    63  
    64  func forwardedValuesConf() map[string]interface{} {
    65  	return map[string]interface{}{
    66  		"query_string":            true,
    67  		"query_string_cache_keys": queryStringCacheKeysConf(),
    68  		"cookies":                 schema.NewSet(cookiePreferenceHash, []interface{}{cookiePreferenceConf()}),
    69  		"headers":                 headersConf(),
    70  	}
    71  }
    72  
    73  func headersConf() []interface{} {
    74  	return []interface{}{"X-Example1", "X-Example2"}
    75  }
    76  
    77  func queryStringCacheKeysConf() []interface{} {
    78  	return []interface{}{"foo", "bar"}
    79  }
    80  
    81  func cookiePreferenceConf() map[string]interface{} {
    82  	return map[string]interface{}{
    83  		"forward":           "whitelist",
    84  		"whitelisted_names": cookieNamesConf(),
    85  	}
    86  }
    87  
    88  func cookieNamesConf() []interface{} {
    89  	return []interface{}{"Example1", "Example2"}
    90  }
    91  
    92  func allowedMethodsConf() []interface{} {
    93  	return []interface{}{"DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"}
    94  }
    95  
    96  func cachedMethodsConf() []interface{} {
    97  	return []interface{}{"GET", "HEAD", "OPTIONS"}
    98  }
    99  
   100  func originCustomHeadersConf() *schema.Set {
   101  	return schema.NewSet(originCustomHeaderHash, []interface{}{originCustomHeaderConf1(), originCustomHeaderConf2()})
   102  }
   103  
   104  func originCustomHeaderConf1() map[string]interface{} {
   105  	return map[string]interface{}{
   106  		"name":  "X-Custom-Header1",
   107  		"value": "samplevalue",
   108  	}
   109  }
   110  
   111  func originCustomHeaderConf2() map[string]interface{} {
   112  	return map[string]interface{}{
   113  		"name":  "X-Custom-Header2",
   114  		"value": "samplevalue",
   115  	}
   116  }
   117  
   118  func customOriginConf() map[string]interface{} {
   119  	return map[string]interface{}{
   120  		"origin_protocol_policy":   "http-only",
   121  		"http_port":                80,
   122  		"https_port":               443,
   123  		"origin_ssl_protocols":     customOriginSslProtocolsConf(),
   124  		"origin_read_timeout":      30,
   125  		"origin_keepalive_timeout": 5,
   126  	}
   127  }
   128  
   129  func customOriginSslProtocolsConf() []interface{} {
   130  	return []interface{}{"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2"}
   131  }
   132  
   133  func s3OriginConf() map[string]interface{} {
   134  	return map[string]interface{}{
   135  		"origin_access_identity": "origin-access-identity/cloudfront/E127EXAMPLE51Z",
   136  	}
   137  }
   138  
   139  func originWithCustomConf() map[string]interface{} {
   140  	return map[string]interface{}{
   141  		"origin_id":            "CustomOrigin",
   142  		"domain_name":          "www.example.com",
   143  		"origin_path":          "/",
   144  		"custom_origin_config": schema.NewSet(customOriginConfigHash, []interface{}{customOriginConf()}),
   145  		"custom_header":        originCustomHeadersConf(),
   146  	}
   147  }
   148  func originWithS3Conf() map[string]interface{} {
   149  	return map[string]interface{}{
   150  		"origin_id":        "S3Origin",
   151  		"domain_name":      "s3.example.com",
   152  		"origin_path":      "/",
   153  		"s3_origin_config": schema.NewSet(s3OriginConfigHash, []interface{}{s3OriginConf()}),
   154  		"custom_header":    originCustomHeadersConf(),
   155  	}
   156  }
   157  
   158  func multiOriginConf() *schema.Set {
   159  	return schema.NewSet(originHash, []interface{}{originWithCustomConf(), originWithS3Conf()})
   160  }
   161  
   162  func geoRestrictionWhitelistConf() map[string]interface{} {
   163  	return map[string]interface{}{
   164  		"restriction_type": "whitelist",
   165  		"locations":        []interface{}{"CA", "GB", "US"},
   166  	}
   167  }
   168  
   169  func geoRestrictionsConf() map[string]interface{} {
   170  	return map[string]interface{}{
   171  		"geo_restriction": schema.NewSet(geoRestrictionHash, []interface{}{geoRestrictionWhitelistConf()}),
   172  	}
   173  }
   174  
   175  func geoRestrictionConfNoItems() map[string]interface{} {
   176  	return map[string]interface{}{
   177  		"restriction_type": "none",
   178  	}
   179  }
   180  
   181  func customErrorResponsesConf() []interface{} {
   182  	return []interface{}{
   183  		map[string]interface{}{
   184  			"error_code":            404,
   185  			"error_caching_min_ttl": 30,
   186  			"response_code":         200,
   187  			"response_page_path":    "/error-pages/404.html",
   188  		},
   189  		map[string]interface{}{
   190  			"error_code":            403,
   191  			"error_caching_min_ttl": 15,
   192  			"response_code":         404,
   193  			"response_page_path":    "/error-pages/404.html",
   194  		},
   195  	}
   196  }
   197  
   198  func aliasesConf() *schema.Set {
   199  	return schema.NewSet(aliasesHash, []interface{}{"example.com", "www.example.com"})
   200  }
   201  
   202  func loggingConfigConf() map[string]interface{} {
   203  	return map[string]interface{}{
   204  		"include_cookies": false,
   205  		"bucket":          "mylogs.s3.amazonaws.com",
   206  		"prefix":          "myprefix",
   207  	}
   208  }
   209  
   210  func customErrorResponsesConfSet() *schema.Set {
   211  	return schema.NewSet(customErrorResponseHash, customErrorResponsesConf())
   212  }
   213  
   214  func customErrorResponsesConfFirst() map[string]interface{} {
   215  	return customErrorResponsesConf()[0].(map[string]interface{})
   216  }
   217  
   218  func customErrorResponseConfNoResponseCode() map[string]interface{} {
   219  	er := customErrorResponsesConf()[0].(map[string]interface{})
   220  	er["response_code"] = 0
   221  	er["response_page_path"] = ""
   222  	return er
   223  }
   224  
   225  func viewerCertificateConfSetCloudFrontDefault() map[string]interface{} {
   226  	return map[string]interface{}{
   227  		"acm_certificate_arn":            "",
   228  		"cloudfront_default_certificate": true,
   229  		"iam_certificate_id":             "",
   230  		"minimum_protocol_version":       "",
   231  		"ssl_support_method":             "",
   232  	}
   233  }
   234  
   235  func viewerCertificateConfSetIAM() map[string]interface{} {
   236  	return map[string]interface{}{
   237  		"acm_certificate_arn":            "",
   238  		"cloudfront_default_certificate": false,
   239  		"iam_certificate_id":             "iamcert-01234567",
   240  		"ssl_support_method":             "vip",
   241  		"minimum_protocol_version":       "TLSv1",
   242  	}
   243  }
   244  
   245  func viewerCertificateConfSetACM() map[string]interface{} {
   246  	return map[string]interface{}{
   247  		"acm_certificate_arn":            "arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012",
   248  		"cloudfront_default_certificate": false,
   249  		"iam_certificate_id":             "",
   250  		"ssl_support_method":             "sni-only",
   251  		"minimum_protocol_version":       "TLSv1",
   252  	}
   253  }
   254  
   255  func TestCloudFrontStructure_expandDefaultCacheBehavior(t *testing.T) {
   256  	data := defaultCacheBehaviorConf()
   257  	dcb := expandDefaultCacheBehavior(data)
   258  	if dcb == nil {
   259  		t.Fatalf("ExpandDefaultCacheBehavior returned nil")
   260  	}
   261  	if *dcb.Compress != true {
   262  		t.Fatalf("Expected Compress to be true, got %v", *dcb.Compress)
   263  	}
   264  	if *dcb.ViewerProtocolPolicy != "allow-all" {
   265  		t.Fatalf("Expected ViewerProtocolPolicy to be allow-all, got %v", *dcb.ViewerProtocolPolicy)
   266  	}
   267  	if *dcb.TargetOriginId != "myS3Origin" {
   268  		t.Fatalf("Expected TargetOriginId to be allow-all, got %v", *dcb.TargetOriginId)
   269  	}
   270  	if reflect.DeepEqual(dcb.ForwardedValues.Headers.Items, expandStringList(headersConf())) != true {
   271  		t.Fatalf("Expected Items to be %v, got %v", headersConf(), dcb.ForwardedValues.Headers.Items)
   272  	}
   273  	if *dcb.MinTTL != 86400 {
   274  		t.Fatalf("Expected MinTTL to be 86400, got %v", *dcb.MinTTL)
   275  	}
   276  	if reflect.DeepEqual(dcb.TrustedSigners.Items, expandStringList(trustedSignersConf())) != true {
   277  		t.Fatalf("Expected TrustedSigners.Items to be %v, got %v", trustedSignersConf(), dcb.TrustedSigners.Items)
   278  	}
   279  	if *dcb.MaxTTL != 365000000 {
   280  		t.Fatalf("Expected MaxTTL to be 365000000, got %v", *dcb.MaxTTL)
   281  	}
   282  	if *dcb.SmoothStreaming != false {
   283  		t.Fatalf("Expected SmoothStreaming to be false, got %v", *dcb.SmoothStreaming)
   284  	}
   285  	if *dcb.DefaultTTL != 86400 {
   286  		t.Fatalf("Expected DefaultTTL to be 86400, got %v", *dcb.DefaultTTL)
   287  	}
   288  	if *dcb.LambdaFunctionAssociations.Quantity != 2 {
   289  		t.Fatalf("Expected LambdaFunctionAssociations to be 2, got %v", *dcb.LambdaFunctionAssociations.Quantity)
   290  	}
   291  	if reflect.DeepEqual(dcb.AllowedMethods.Items, expandStringList(allowedMethodsConf())) != true {
   292  		t.Fatalf("Expected TrustedSigners.Items to be %v, got %v", allowedMethodsConf(), dcb.AllowedMethods.Items)
   293  	}
   294  	if reflect.DeepEqual(dcb.AllowedMethods.CachedMethods.Items, expandStringList(cachedMethodsConf())) != true {
   295  		t.Fatalf("Expected TrustedSigners.Items to be %v, got %v", cachedMethodsConf(), dcb.AllowedMethods.CachedMethods.Items)
   296  	}
   297  }
   298  
   299  func TestCloudFrontStructure_flattenDefaultCacheBehavior(t *testing.T) {
   300  	in := defaultCacheBehaviorConf()
   301  	dcb := expandDefaultCacheBehavior(in)
   302  	out := flattenDefaultCacheBehavior(dcb)
   303  	diff := schema.NewSet(defaultCacheBehaviorHash, []interface{}{in}).Difference(out)
   304  
   305  	if len(diff.List()) > 0 {
   306  		t.Fatalf("Expected out to be %v, got %v, diff: %v", in, out, diff)
   307  	}
   308  }
   309  
   310  func TestCloudFrontStructure_expandCacheBehavior(t *testing.T) {
   311  	data := cacheBehaviorConf1()
   312  	cb := expandCacheBehavior(data)
   313  	if *cb.Compress != true {
   314  		t.Fatalf("Expected Compress to be true, got %v", *cb.Compress)
   315  	}
   316  	if *cb.ViewerProtocolPolicy != "allow-all" {
   317  		t.Fatalf("Expected ViewerProtocolPolicy to be allow-all, got %v", *cb.ViewerProtocolPolicy)
   318  	}
   319  	if *cb.TargetOriginId != "myS3Origin" {
   320  		t.Fatalf("Expected TargetOriginId to be myS3Origin, got %v", *cb.TargetOriginId)
   321  	}
   322  	if reflect.DeepEqual(cb.ForwardedValues.Headers.Items, expandStringList(headersConf())) != true {
   323  		t.Fatalf("Expected Items to be %v, got %v", headersConf(), cb.ForwardedValues.Headers.Items)
   324  	}
   325  	if *cb.MinTTL != 86400 {
   326  		t.Fatalf("Expected MinTTL to be 86400, got %v", *cb.MinTTL)
   327  	}
   328  	if reflect.DeepEqual(cb.TrustedSigners.Items, expandStringList(trustedSignersConf())) != true {
   329  		t.Fatalf("Expected TrustedSigners.Items to be %v, got %v", trustedSignersConf(), cb.TrustedSigners.Items)
   330  	}
   331  	if *cb.MaxTTL != 365000000 {
   332  		t.Fatalf("Expected MaxTTL to be 365000000, got %v", *cb.MaxTTL)
   333  	}
   334  	if *cb.SmoothStreaming != false {
   335  		t.Fatalf("Expected SmoothStreaming to be false, got %v", *cb.SmoothStreaming)
   336  	}
   337  	if *cb.DefaultTTL != 86400 {
   338  		t.Fatalf("Expected DefaultTTL to be 86400, got %v", *cb.DefaultTTL)
   339  	}
   340  	if *cb.LambdaFunctionAssociations.Quantity != 2 {
   341  		t.Fatalf("Expected LambdaFunctionAssociations to be 2, got %v", *cb.LambdaFunctionAssociations.Quantity)
   342  	}
   343  	if reflect.DeepEqual(cb.AllowedMethods.Items, expandStringList(allowedMethodsConf())) != true {
   344  		t.Fatalf("Expected AllowedMethods.Items to be %v, got %v", allowedMethodsConf(), cb.AllowedMethods.Items)
   345  	}
   346  	if reflect.DeepEqual(cb.AllowedMethods.CachedMethods.Items, expandStringList(cachedMethodsConf())) != true {
   347  		t.Fatalf("Expected AllowedMethods.CachedMethods.Items to be %v, got %v", cachedMethodsConf(), cb.AllowedMethods.CachedMethods.Items)
   348  	}
   349  	if *cb.PathPattern != "/path1" {
   350  		t.Fatalf("Expected PathPattern to be /path1, got %v", *cb.PathPattern)
   351  	}
   352  }
   353  
   354  func TestCloudFrontStructure_flattenCacheBehavior(t *testing.T) {
   355  	in := cacheBehaviorConf1()
   356  	cb := expandCacheBehavior(in)
   357  	out := flattenCacheBehavior(cb)
   358  	var diff *schema.Set
   359  	if out["compress"] != true {
   360  		t.Fatalf("Expected out[compress] to be true, got %v", out["compress"])
   361  	}
   362  	if out["viewer_protocol_policy"] != "allow-all" {
   363  		t.Fatalf("Expected out[viewer_protocol_policy] to be allow-all, got %v", out["viewer_protocol_policy"])
   364  	}
   365  	if out["target_origin_id"] != "myS3Origin" {
   366  		t.Fatalf("Expected out[target_origin_id] to be myS3Origin, got %v", out["target_origin_id"])
   367  	}
   368  
   369  	var outSet, ok = out["lambda_function_association"].(*schema.Set)
   370  	if !ok {
   371  		t.Fatalf("out['lambda_function_association'] is not a slice as expected: %#v", out["lambda_function_association"])
   372  	}
   373  
   374  	inSet, ok := in["lambda_function_association"].(*schema.Set)
   375  	if !ok {
   376  		t.Fatalf("in['lambda_function_association'] is not a set as expected: %#v", in["lambda_function_association"])
   377  	}
   378  
   379  	if !inSet.Equal(outSet) {
   380  		t.Fatalf("in / out sets are not equal, in: \n%#v\n\nout: \n%#v\n", inSet, outSet)
   381  	}
   382  
   383  	diff = out["forwarded_values"].(*schema.Set).Difference(in["forwarded_values"].(*schema.Set))
   384  	if len(diff.List()) > 0 {
   385  		t.Fatalf("Expected out[forwarded_values] to be %v, got %v, diff: %v", out["forwarded_values"], in["forwarded_values"], diff)
   386  	}
   387  	if out["min_ttl"] != int(86400) {
   388  		t.Fatalf("Expected out[min_ttl] to be 86400 (int), got %v", out["forwarded_values"])
   389  	}
   390  	if reflect.DeepEqual(out["trusted_signers"], in["trusted_signers"]) != true {
   391  		t.Fatalf("Expected out[trusted_signers] to be %v, got %v", in["trusted_signers"], out["trusted_signers"])
   392  	}
   393  	if out["max_ttl"] != int(365000000) {
   394  		t.Fatalf("Expected out[max_ttl] to be 365000000 (int), got %v", out["max_ttl"])
   395  	}
   396  	if out["smooth_streaming"] != false {
   397  		t.Fatalf("Expected out[smooth_streaming] to be false, got %v", out["smooth_streaming"])
   398  	}
   399  	if out["default_ttl"] != int(86400) {
   400  		t.Fatalf("Expected out[default_ttl] to be 86400 (int), got %v", out["default_ttl"])
   401  	}
   402  	if reflect.DeepEqual(out["allowed_methods"], in["allowed_methods"]) != true {
   403  		t.Fatalf("Expected out[allowed_methods] to be %v, got %v", in["allowed_methods"], out["allowed_methods"])
   404  	}
   405  	if reflect.DeepEqual(out["cached_methods"], in["cached_methods"]) != true {
   406  		t.Fatalf("Expected out[cached_methods] to be %v, got %v", in["cached_methods"], out["cached_methods"])
   407  	}
   408  	if out["path_pattern"] != "/path1" {
   409  		t.Fatalf("Expected out[path_pattern] to be /path1, got %v", out["path_pattern"])
   410  	}
   411  }
   412  
   413  func TestCloudFrontStructure_expandCacheBehaviors(t *testing.T) {
   414  	data := cacheBehaviorsConf()
   415  	cbs := expandCacheBehaviors(data)
   416  	if *cbs.Quantity != 2 {
   417  		t.Fatalf("Expected Quantity to be 2, got %v", *cbs.Quantity)
   418  	}
   419  	if *cbs.Items[0].TargetOriginId != "myS3Origin" {
   420  		t.Fatalf("Expected first Item's TargetOriginId to be 	myS3Origin, got %v", *cbs.Items[0].TargetOriginId)
   421  	}
   422  }
   423  
   424  func TestCloudFrontStructure_flattenCacheBehaviors(t *testing.T) {
   425  	in := cacheBehaviorsConf()
   426  	cbs := expandCacheBehaviors(in)
   427  	out := flattenCacheBehaviors(cbs)
   428  	diff := in.Difference(out)
   429  
   430  	if len(diff.List()) > 0 {
   431  		t.Fatalf("Expected out to be %v, got %v, diff: %v", in, out, diff)
   432  	}
   433  }
   434  
   435  func TestCloudFrontStructure_expandTrustedSigners(t *testing.T) {
   436  	data := trustedSignersConf()
   437  	ts := expandTrustedSigners(data)
   438  	if *ts.Quantity != 2 {
   439  		t.Fatalf("Expected Quantity to be 2, got %v", *ts.Quantity)
   440  	}
   441  	if *ts.Enabled != true {
   442  		t.Fatalf("Expected Enabled to be true, got %v", *ts.Enabled)
   443  	}
   444  	if reflect.DeepEqual(ts.Items, expandStringList(data)) != true {
   445  		t.Fatalf("Expected Items to be %v, got %v", data, ts.Items)
   446  	}
   447  }
   448  
   449  func TestCloudFrontStructure_flattenTrustedSigners(t *testing.T) {
   450  	in := trustedSignersConf()
   451  	ts := expandTrustedSigners(in)
   452  	out := flattenTrustedSigners(ts)
   453  
   454  	if reflect.DeepEqual(in, out) != true {
   455  		t.Fatalf("Expected out to be %v, got %v", in, out)
   456  	}
   457  }
   458  
   459  func TestCloudFrontStructure_expandTrustedSigners_empty(t *testing.T) {
   460  	data := []interface{}{}
   461  	ts := expandTrustedSigners(data)
   462  	if *ts.Quantity != 0 {
   463  		t.Fatalf("Expected Quantity to be 0, got %v", *ts.Quantity)
   464  	}
   465  	if *ts.Enabled != false {
   466  		t.Fatalf("Expected Enabled to be true, got %v", *ts.Enabled)
   467  	}
   468  	if ts.Items != nil {
   469  		t.Fatalf("Expected Items to be nil, got %v", ts.Items)
   470  	}
   471  }
   472  
   473  func TestCloudFrontStructure_expandLambdaFunctionAssociations(t *testing.T) {
   474  	data := lambdaFunctionAssociationsConf()
   475  	lfa := expandLambdaFunctionAssociations(data.List())
   476  	if *lfa.Quantity != 2 {
   477  		t.Fatalf("Expected Quantity to be 2, got %v", *lfa.Quantity)
   478  	}
   479  	if len(lfa.Items) != 2 {
   480  		t.Fatalf("Expected Items to be len 2, got %v", len(lfa.Items))
   481  	}
   482  	if et := "viewer-request"; *lfa.Items[0].EventType != et {
   483  		t.Fatalf("Expected first Item's EventType to be %q, got %q", et, *lfa.Items[0].EventType)
   484  	}
   485  	if et := "origin-response"; *lfa.Items[1].EventType != et {
   486  		t.Fatalf("Expected second Item's EventType to be %q, got %q", et, *lfa.Items[1].EventType)
   487  	}
   488  }
   489  
   490  func TestCloudFrontStructure_flattenlambdaFunctionAssociations(t *testing.T) {
   491  	in := lambdaFunctionAssociationsConf()
   492  	lfa := expandLambdaFunctionAssociations(in.List())
   493  	out := flattenLambdaFunctionAssociations(lfa)
   494  
   495  	if reflect.DeepEqual(in.List(), out.List()) != true {
   496  		t.Fatalf("Expected out to be %v, got %v", in, out)
   497  	}
   498  }
   499  
   500  func TestCloudFrontStructure_expandlambdaFunctionAssociations_empty(t *testing.T) {
   501  	data := new(schema.Set)
   502  	lfa := expandLambdaFunctionAssociations(data.List())
   503  	if *lfa.Quantity != 0 {
   504  		t.Fatalf("Expected Quantity to be 0, got %v", *lfa.Quantity)
   505  	}
   506  	if len(lfa.Items) != 0 {
   507  		t.Fatalf("Expected Items to be len 0, got %v", len(lfa.Items))
   508  	}
   509  	if reflect.DeepEqual(lfa.Items, []*cloudfront.LambdaFunctionAssociation{}) != true {
   510  		t.Fatalf("Expected Items to be empty, got %v", lfa.Items)
   511  	}
   512  }
   513  
   514  func TestCloudFrontStructure_expandForwardedValues(t *testing.T) {
   515  	data := forwardedValuesConf()
   516  	fv := expandForwardedValues(data)
   517  	if *fv.QueryString != true {
   518  		t.Fatalf("Expected QueryString to be true, got %v", *fv.QueryString)
   519  	}
   520  	if reflect.DeepEqual(fv.Cookies.WhitelistedNames.Items, expandStringList(cookieNamesConf())) != true {
   521  		t.Fatalf("Expected Cookies.WhitelistedNames.Items to be %v, got %v", cookieNamesConf(), fv.Cookies.WhitelistedNames.Items)
   522  	}
   523  	if reflect.DeepEqual(fv.Headers.Items, expandStringList(headersConf())) != true {
   524  		t.Fatalf("Expected Headers.Items to be %v, got %v", headersConf(), fv.Headers.Items)
   525  	}
   526  }
   527  
   528  func TestCloudFrontStructure_flattenForwardedValues(t *testing.T) {
   529  	in := forwardedValuesConf()
   530  	fv := expandForwardedValues(in)
   531  	out := flattenForwardedValues(fv)
   532  
   533  	if out["query_string"] != true {
   534  		t.Fatalf("Expected out[query_string] to be true, got %v", out["query_string"])
   535  	}
   536  	if out["cookies"].(*schema.Set).Equal(in["cookies"].(*schema.Set)) != true {
   537  		t.Fatalf("Expected out[cookies] to be %v, got %v", in["cookies"], out["cookies"])
   538  	}
   539  	if reflect.DeepEqual(out["headers"], in["headers"]) != true {
   540  		t.Fatalf("Expected out[headers] to be %v, got %v", in["headers"], out["headers"])
   541  	}
   542  }
   543  
   544  func TestCloudFrontStructure_expandHeaders(t *testing.T) {
   545  	data := headersConf()
   546  	h := expandHeaders(data)
   547  	if *h.Quantity != 2 {
   548  		t.Fatalf("Expected Quantity to be 2, got %v", *h.Quantity)
   549  	}
   550  	if reflect.DeepEqual(h.Items, expandStringList(data)) != true {
   551  		t.Fatalf("Expected Items to be %v, got %v", data, h.Items)
   552  	}
   553  }
   554  
   555  func TestCloudFrontStructure_flattenHeaders(t *testing.T) {
   556  	in := headersConf()
   557  	h := expandHeaders(in)
   558  	out := flattenHeaders(h)
   559  
   560  	if reflect.DeepEqual(in, out) != true {
   561  		t.Fatalf("Expected out to be %v, got %v", in, out)
   562  	}
   563  }
   564  
   565  func TestCloudFrontStructure_expandQueryStringCacheKeys(t *testing.T) {
   566  	data := queryStringCacheKeysConf()
   567  	k := expandQueryStringCacheKeys(data)
   568  	if *k.Quantity != 2 {
   569  		t.Fatalf("Expected Quantity to be 2, got %v", *k.Quantity)
   570  	}
   571  	if reflect.DeepEqual(k.Items, expandStringList(data)) != true {
   572  		t.Fatalf("Expected Items to be %v, got %v", data, k.Items)
   573  	}
   574  }
   575  
   576  func TestCloudFrontStructure_flattenQueryStringCacheKeys(t *testing.T) {
   577  	in := queryStringCacheKeysConf()
   578  	k := expandQueryStringCacheKeys(in)
   579  	out := flattenQueryStringCacheKeys(k)
   580  
   581  	if reflect.DeepEqual(in, out) != true {
   582  		t.Fatalf("Expected out to be %v, got %v", in, out)
   583  	}
   584  }
   585  
   586  func TestCloudFrontStructure_expandCookiePreference(t *testing.T) {
   587  	data := cookiePreferenceConf()
   588  	cp := expandCookiePreference(data)
   589  	if *cp.Forward != "whitelist" {
   590  		t.Fatalf("Expected Forward to be whitelist, got %v", *cp.Forward)
   591  	}
   592  	if reflect.DeepEqual(cp.WhitelistedNames.Items, expandStringList(cookieNamesConf())) != true {
   593  		t.Fatalf("Expected WhitelistedNames.Items to be %v, got %v", cookieNamesConf(), cp.WhitelistedNames.Items)
   594  	}
   595  }
   596  
   597  func TestCloudFrontStructure_flattenCookiePreference(t *testing.T) {
   598  	in := cookiePreferenceConf()
   599  	cp := expandCookiePreference(in)
   600  	out := flattenCookiePreference(cp)
   601  
   602  	if reflect.DeepEqual(in, out) != true {
   603  		t.Fatalf("Expected out to be %v, got %v", in, out)
   604  	}
   605  }
   606  
   607  func TestCloudFrontStructure_expandCookieNames(t *testing.T) {
   608  	data := cookieNamesConf()
   609  	cn := expandCookieNames(data)
   610  	if *cn.Quantity != 2 {
   611  		t.Fatalf("Expected Quantity to be 2, got %v", *cn.Quantity)
   612  	}
   613  	if reflect.DeepEqual(cn.Items, expandStringList(data)) != true {
   614  		t.Fatalf("Expected Items to be %v, got %v", data, cn.Items)
   615  	}
   616  }
   617  
   618  func TestCloudFrontStructure_flattenCookieNames(t *testing.T) {
   619  	in := cookieNamesConf()
   620  	cn := expandCookieNames(in)
   621  	out := flattenCookieNames(cn)
   622  
   623  	if reflect.DeepEqual(in, out) != true {
   624  		t.Fatalf("Expected out to be %v, got %v", in, out)
   625  	}
   626  }
   627  
   628  func TestCloudFrontStructure_expandAllowedMethods(t *testing.T) {
   629  	data := allowedMethodsConf()
   630  	am := expandAllowedMethods(data)
   631  	if *am.Quantity != 7 {
   632  		t.Fatalf("Expected Quantity to be 7, got %v", *am.Quantity)
   633  	}
   634  	if reflect.DeepEqual(am.Items, expandStringList(data)) != true {
   635  		t.Fatalf("Expected Items to be %v, got %v", data, am.Items)
   636  	}
   637  }
   638  
   639  func TestCloudFrontStructure_flattenAllowedMethods(t *testing.T) {
   640  	in := allowedMethodsConf()
   641  	am := expandAllowedMethods(in)
   642  	out := flattenAllowedMethods(am)
   643  
   644  	if reflect.DeepEqual(in, out) != true {
   645  		t.Fatalf("Expected out to be %v, got %v", in, out)
   646  	}
   647  }
   648  
   649  func TestCloudFrontStructure_expandCachedMethods(t *testing.T) {
   650  	data := cachedMethodsConf()
   651  	cm := expandCachedMethods(data)
   652  	if *cm.Quantity != 3 {
   653  		t.Fatalf("Expected Quantity to be 3, got %v", *cm.Quantity)
   654  	}
   655  	if reflect.DeepEqual(cm.Items, expandStringList(data)) != true {
   656  		t.Fatalf("Expected Items to be %v, got %v", data, cm.Items)
   657  	}
   658  }
   659  
   660  func TestCloudFrontStructure_flattenCachedMethods(t *testing.T) {
   661  	in := cachedMethodsConf()
   662  	cm := expandCachedMethods(in)
   663  	out := flattenCachedMethods(cm)
   664  
   665  	if reflect.DeepEqual(in, out) != true {
   666  		t.Fatalf("Expected out to be %v, got %v", in, out)
   667  	}
   668  }
   669  
   670  func TestCloudFrontStructure_expandOrigins(t *testing.T) {
   671  	data := multiOriginConf()
   672  	origins := expandOrigins(data)
   673  	if *origins.Quantity != 2 {
   674  		t.Fatalf("Expected Quantity to be 2, got %v", *origins.Quantity)
   675  	}
   676  	if *origins.Items[0].OriginPath != "/" {
   677  		t.Fatalf("Expected first Item's OriginPath to be /, got %v", *origins.Items[0].OriginPath)
   678  	}
   679  }
   680  
   681  func TestCloudFrontStructure_flattenOrigins(t *testing.T) {
   682  	in := multiOriginConf()
   683  	origins := expandOrigins(in)
   684  	out := flattenOrigins(origins)
   685  	diff := in.Difference(out)
   686  
   687  	if len(diff.List()) > 0 {
   688  		t.Fatalf("Expected out to be %v, got %v, diff: %v", in, out, diff)
   689  	}
   690  }
   691  
   692  func TestCloudFrontStructure_expandOrigin(t *testing.T) {
   693  	data := originWithCustomConf()
   694  	or := expandOrigin(data)
   695  	if *or.Id != "CustomOrigin" {
   696  		t.Fatalf("Expected Id to be CustomOrigin, got %v", *or.Id)
   697  	}
   698  	if *or.DomainName != "www.example.com" {
   699  		t.Fatalf("Expected DomainName to be www.example.com, got %v", *or.DomainName)
   700  	}
   701  	if *or.OriginPath != "/" {
   702  		t.Fatalf("Expected OriginPath to be /, got %v", *or.OriginPath)
   703  	}
   704  	if *or.CustomOriginConfig.OriginProtocolPolicy != "http-only" {
   705  		t.Fatalf("Expected CustomOriginConfig.OriginProtocolPolicy to be http-only, got %v", *or.CustomOriginConfig.OriginProtocolPolicy)
   706  	}
   707  	if *or.CustomHeaders.Items[0].HeaderValue != "samplevalue" {
   708  		t.Fatalf("Expected CustomHeaders.Items[0].HeaderValue to be samplevalue, got %v", *or.CustomHeaders.Items[0].HeaderValue)
   709  	}
   710  }
   711  
   712  func TestCloudFrontStructure_flattenOrigin(t *testing.T) {
   713  	in := originWithCustomConf()
   714  	or := expandOrigin(in)
   715  	out := flattenOrigin(or)
   716  
   717  	if out["origin_id"] != "CustomOrigin" {
   718  		t.Fatalf("Expected out[origin_id] to be CustomOrigin, got %v", out["origin_id"])
   719  	}
   720  	if out["domain_name"] != "www.example.com" {
   721  		t.Fatalf("Expected out[domain_name] to be www.example.com, got %v", out["domain_name"])
   722  	}
   723  	if out["origin_path"] != "/" {
   724  		t.Fatalf("Expected out[origin_path] to be /, got %v", out["origin_path"])
   725  	}
   726  	if out["custom_origin_config"].(*schema.Set).Equal(in["custom_origin_config"].(*schema.Set)) != true {
   727  		t.Fatalf("Expected out[custom_origin_config] to be %v, got %v", in["custom_origin_config"], out["custom_origin_config"])
   728  	}
   729  }
   730  
   731  func TestCloudFrontStructure_expandCustomHeaders(t *testing.T) {
   732  	in := originCustomHeadersConf()
   733  	chs := expandCustomHeaders(in)
   734  	if *chs.Quantity != 2 {
   735  		t.Fatalf("Expected Quantity to be 2, got %v", *chs.Quantity)
   736  	}
   737  	if *chs.Items[0].HeaderValue != "samplevalue" {
   738  		t.Fatalf("Expected first Item's HeaderValue to be samplevalue, got %v", *chs.Items[0].HeaderValue)
   739  	}
   740  }
   741  
   742  func TestCloudFrontStructure_flattenCustomHeaders(t *testing.T) {
   743  	in := originCustomHeadersConf()
   744  	chs := expandCustomHeaders(in)
   745  	out := flattenCustomHeaders(chs)
   746  	diff := in.Difference(out)
   747  
   748  	if len(diff.List()) > 0 {
   749  		t.Fatalf("Expected out to be %v, got %v, diff: %v", in, out, diff)
   750  	}
   751  }
   752  
   753  func TestCloudFrontStructure_flattenOriginCustomHeader(t *testing.T) {
   754  	in := originCustomHeaderConf1()
   755  	och := expandOriginCustomHeader(in)
   756  	out := flattenOriginCustomHeader(och)
   757  
   758  	if out["name"] != "X-Custom-Header1" {
   759  		t.Fatalf("Expected out[name] to be X-Custom-Header1, got %v", out["name"])
   760  	}
   761  	if out["value"] != "samplevalue" {
   762  		t.Fatalf("Expected out[value] to be samplevalue, got %v", out["value"])
   763  	}
   764  }
   765  
   766  func TestCloudFrontStructure_expandOriginCustomHeader(t *testing.T) {
   767  	in := originCustomHeaderConf1()
   768  	och := expandOriginCustomHeader(in)
   769  
   770  	if *och.HeaderName != "X-Custom-Header1" {
   771  		t.Fatalf("Expected HeaderName to be X-Custom-Header1, got %v", *och.HeaderName)
   772  	}
   773  	if *och.HeaderValue != "samplevalue" {
   774  		t.Fatalf("Expected HeaderValue to be samplevalue, got %v", *och.HeaderValue)
   775  	}
   776  }
   777  
   778  func TestCloudFrontStructure_expandCustomOriginConfig(t *testing.T) {
   779  	data := customOriginConf()
   780  	co := expandCustomOriginConfig(data)
   781  	if *co.OriginProtocolPolicy != "http-only" {
   782  		t.Fatalf("Expected OriginProtocolPolicy to be http-only, got %v", *co.OriginProtocolPolicy)
   783  	}
   784  	if *co.HTTPPort != 80 {
   785  		t.Fatalf("Expected HTTPPort to be 80, got %v", *co.HTTPPort)
   786  	}
   787  	if *co.HTTPSPort != 443 {
   788  		t.Fatalf("Expected HTTPSPort to be 443, got %v", *co.HTTPSPort)
   789  	}
   790  	if *co.OriginReadTimeout != 30 {
   791  		t.Fatalf("Expected Origin Read Timeout to be 30, got %v", *co.OriginReadTimeout)
   792  	}
   793  	if *co.OriginKeepaliveTimeout != 5 {
   794  		t.Fatalf("Expected Origin Keepalive Timeout to be 5, got %v", *co.OriginKeepaliveTimeout)
   795  	}
   796  }
   797  
   798  func TestCloudFrontStructure_flattenCustomOriginConfig(t *testing.T) {
   799  	in := customOriginConf()
   800  	co := expandCustomOriginConfig(in)
   801  	out := flattenCustomOriginConfig(co)
   802  
   803  	if reflect.DeepEqual(in, out) != true {
   804  		t.Fatalf("Expected out to be %v, got %v", in, out)
   805  	}
   806  }
   807  
   808  func TestCloudFrontStructure_expandCustomOriginConfigSSL(t *testing.T) {
   809  	in := customOriginSslProtocolsConf()
   810  	ocs := expandCustomOriginConfigSSL(in)
   811  	if *ocs.Quantity != 4 {
   812  		t.Fatalf("Expected Quantity to be 4, got %v", *ocs.Quantity)
   813  	}
   814  	if *ocs.Items[0] != "SSLv3" {
   815  		t.Fatalf("Expected first Item to be SSLv3, got %v", *ocs.Items[0])
   816  	}
   817  }
   818  
   819  func TestCloudFrontStructure_flattenCustomOriginConfigSSL(t *testing.T) {
   820  	in := customOriginSslProtocolsConf()
   821  	ocs := expandCustomOriginConfigSSL(in)
   822  	out := flattenCustomOriginConfigSSL(ocs)
   823  
   824  	if reflect.DeepEqual(in, out) != true {
   825  		t.Fatalf("Expected out to be %v, got %v", in, out)
   826  	}
   827  }
   828  
   829  func TestCloudFrontStructure_expandS3OriginConfig(t *testing.T) {
   830  	data := s3OriginConf()
   831  	s3o := expandS3OriginConfig(data)
   832  	if *s3o.OriginAccessIdentity != "origin-access-identity/cloudfront/E127EXAMPLE51Z" {
   833  		t.Fatalf("Expected OriginAccessIdentity to be origin-access-identity/cloudfront/E127EXAMPLE51Z, got %v", *s3o.OriginAccessIdentity)
   834  	}
   835  }
   836  
   837  func TestCloudFrontStructure_flattenS3OriginConfig(t *testing.T) {
   838  	in := s3OriginConf()
   839  	s3o := expandS3OriginConfig(in)
   840  	out := flattenS3OriginConfig(s3o)
   841  
   842  	if reflect.DeepEqual(in, out) != true {
   843  		t.Fatalf("Expected out to be %v, got %v", in, out)
   844  	}
   845  }
   846  
   847  func TestCloudFrontStructure_expandCustomErrorResponses(t *testing.T) {
   848  	data := customErrorResponsesConfSet()
   849  	ers := expandCustomErrorResponses(data)
   850  	if *ers.Quantity != 2 {
   851  		t.Fatalf("Expected Quantity to be 2, got %v", *ers.Quantity)
   852  	}
   853  	if *ers.Items[0].ResponsePagePath != "/error-pages/404.html" {
   854  		t.Fatalf("Expected ResponsePagePath in first Item to be /error-pages/404.html, got %v", *ers.Items[0].ResponsePagePath)
   855  	}
   856  }
   857  
   858  func TestCloudFrontStructure_flattenCustomErrorResponses(t *testing.T) {
   859  	in := customErrorResponsesConfSet()
   860  	ers := expandCustomErrorResponses(in)
   861  	out := flattenCustomErrorResponses(ers)
   862  
   863  	if in.Equal(out) != true {
   864  		t.Fatalf("Expected out to be %v, got %v", in, out)
   865  	}
   866  }
   867  
   868  func TestCloudFrontStructure_expandCustomErrorResponse(t *testing.T) {
   869  	data := customErrorResponsesConfFirst()
   870  	er := expandCustomErrorResponse(data)
   871  	if *er.ErrorCode != 404 {
   872  		t.Fatalf("Expected ErrorCode to be 404, got %v", *er.ErrorCode)
   873  	}
   874  	if *er.ErrorCachingMinTTL != 30 {
   875  		t.Fatalf("Expected ErrorCachingMinTTL to be 30, got %v", *er.ErrorCachingMinTTL)
   876  	}
   877  	if *er.ResponseCode != "200" {
   878  		t.Fatalf("Expected ResponseCode to be 200 (as string), got %v", *er.ResponseCode)
   879  	}
   880  	if *er.ResponsePagePath != "/error-pages/404.html" {
   881  		t.Fatalf("Expected ResponsePagePath to be /error-pages/404.html, got %v", *er.ResponsePagePath)
   882  	}
   883  }
   884  
   885  func TestCloudFrontStructure_expandCustomErrorResponse_emptyResponseCode(t *testing.T) {
   886  	data := customErrorResponseConfNoResponseCode()
   887  	er := expandCustomErrorResponse(data)
   888  	if *er.ResponseCode != "" {
   889  		t.Fatalf("Expected ResponseCode to be empty string, got %v", *er.ResponseCode)
   890  	}
   891  	if *er.ResponsePagePath != "" {
   892  		t.Fatalf("Expected ResponsePagePath to be empty string, got %v", *er.ResponsePagePath)
   893  	}
   894  }
   895  
   896  func TestCloudFrontStructure_flattenCustomErrorResponse(t *testing.T) {
   897  	in := customErrorResponsesConfFirst()
   898  	er := expandCustomErrorResponse(in)
   899  	out := flattenCustomErrorResponse(er)
   900  
   901  	if reflect.DeepEqual(in, out) != true {
   902  		t.Fatalf("Expected out to be %v, got %v", in, out)
   903  	}
   904  }
   905  
   906  func TestCloudFrontStructure_expandLoggingConfig(t *testing.T) {
   907  	data := loggingConfigConf()
   908  
   909  	lc := expandLoggingConfig(data)
   910  	if *lc.Enabled != true {
   911  		t.Fatalf("Expected Enabled to be true, got %v", *lc.Enabled)
   912  	}
   913  	if *lc.Prefix != "myprefix" {
   914  		t.Fatalf("Expected Prefix to be myprefix, got %v", *lc.Prefix)
   915  	}
   916  	if *lc.Bucket != "mylogs.s3.amazonaws.com" {
   917  		t.Fatalf("Expected Bucket to be mylogs.s3.amazonaws.com, got %v", *lc.Bucket)
   918  	}
   919  	if *lc.IncludeCookies != false {
   920  		t.Fatalf("Expected IncludeCookies to be false, got %v", *lc.IncludeCookies)
   921  	}
   922  }
   923  
   924  func TestCloudFrontStructure_expandLoggingConfig_nilValue(t *testing.T) {
   925  	lc := expandLoggingConfig(nil)
   926  	if *lc.Enabled != false {
   927  		t.Fatalf("Expected Enabled to be false, got %v", *lc.Enabled)
   928  	}
   929  	if *lc.Prefix != "" {
   930  		t.Fatalf("Expected Prefix to be blank, got %v", *lc.Prefix)
   931  	}
   932  	if *lc.Bucket != "" {
   933  		t.Fatalf("Expected Bucket to be blank, got %v", *lc.Bucket)
   934  	}
   935  	if *lc.IncludeCookies != false {
   936  		t.Fatalf("Expected IncludeCookies to be false, got %v", *lc.IncludeCookies)
   937  	}
   938  }
   939  
   940  func TestCloudFrontStructure_flattenLoggingConfig(t *testing.T) {
   941  	in := loggingConfigConf()
   942  	lc := expandLoggingConfig(in)
   943  	out := flattenLoggingConfig(lc)
   944  	diff := schema.NewSet(loggingConfigHash, []interface{}{in}).Difference(out)
   945  
   946  	if len(diff.List()) > 0 {
   947  		t.Fatalf("Expected out to be %v, got %v, diff: %v", in, out, diff)
   948  	}
   949  }
   950  
   951  func TestCloudFrontStructure_expandAliases(t *testing.T) {
   952  	data := aliasesConf()
   953  	a := expandAliases(data)
   954  	if *a.Quantity != 2 {
   955  		t.Fatalf("Expected Quantity to be 2, got %v", *a.Quantity)
   956  	}
   957  	if reflect.DeepEqual(a.Items, expandStringList(data.List())) != true {
   958  		t.Fatalf("Expected Items to be [example.com www.example.com], got %v", a.Items)
   959  	}
   960  }
   961  
   962  func TestCloudFrontStructure_flattenAliases(t *testing.T) {
   963  	in := aliasesConf()
   964  	a := expandAliases(in)
   965  	out := flattenAliases(a)
   966  	diff := in.Difference(out)
   967  
   968  	if len(diff.List()) > 0 {
   969  		t.Fatalf("Expected out to be %v, got %v, diff: %v", in, out, diff)
   970  	}
   971  }
   972  
   973  func TestCloudFrontStructure_expandRestrictions(t *testing.T) {
   974  	data := geoRestrictionsConf()
   975  	r := expandRestrictions(data)
   976  	if *r.GeoRestriction.RestrictionType != "whitelist" {
   977  		t.Fatalf("Expected GeoRestriction.RestrictionType to be whitelist, got %v", *r.GeoRestriction.RestrictionType)
   978  	}
   979  }
   980  
   981  func TestCloudFrontStructure_flattenRestrictions(t *testing.T) {
   982  	in := geoRestrictionsConf()
   983  	r := expandRestrictions(in)
   984  	out := flattenRestrictions(r)
   985  	diff := schema.NewSet(restrictionsHash, []interface{}{in}).Difference(out)
   986  
   987  	if len(diff.List()) > 0 {
   988  		t.Fatalf("Expected out to be %v, got %v, diff: %v", in, out, diff)
   989  	}
   990  }
   991  
   992  func TestCloudFrontStructure_expandGeoRestriction_whitelist(t *testing.T) {
   993  	data := geoRestrictionWhitelistConf()
   994  	gr := expandGeoRestriction(data)
   995  	if *gr.RestrictionType != "whitelist" {
   996  		t.Fatalf("Expected RestrictionType to be whitelist, got %v", *gr.RestrictionType)
   997  	}
   998  	if *gr.Quantity != 3 {
   999  		t.Fatalf("Expected Quantity to be 3, got %v", *gr.Quantity)
  1000  	}
  1001  	if reflect.DeepEqual(gr.Items, aws.StringSlice([]string{"CA", "GB", "US"})) != true {
  1002  		t.Fatalf("Expected Items be [CA, GB, US], got %v", gr.Items)
  1003  	}
  1004  }
  1005  
  1006  func TestCloudFrontStructure_flattenGeoRestriction_whitelist(t *testing.T) {
  1007  	in := geoRestrictionWhitelistConf()
  1008  	gr := expandGeoRestriction(in)
  1009  	out := flattenGeoRestriction(gr)
  1010  
  1011  	if reflect.DeepEqual(in, out) != true {
  1012  		t.Fatalf("Expected out to be %v, got %v", in, out)
  1013  	}
  1014  }
  1015  
  1016  func TestCloudFrontStructure_expandGeoRestriction_no_items(t *testing.T) {
  1017  	data := geoRestrictionConfNoItems()
  1018  	gr := expandGeoRestriction(data)
  1019  	if *gr.RestrictionType != "none" {
  1020  		t.Fatalf("Expected RestrictionType to be none, got %v", *gr.RestrictionType)
  1021  	}
  1022  	if *gr.Quantity != 0 {
  1023  		t.Fatalf("Expected Quantity to be 0, got %v", *gr.Quantity)
  1024  	}
  1025  	if gr.Items != nil {
  1026  		t.Fatalf("Expected Items to not be set, got %v", gr.Items)
  1027  	}
  1028  }
  1029  
  1030  func TestCloudFrontStructure_flattenGeoRestriction_no_items(t *testing.T) {
  1031  	in := geoRestrictionConfNoItems()
  1032  	gr := expandGeoRestriction(in)
  1033  	out := flattenGeoRestriction(gr)
  1034  
  1035  	if reflect.DeepEqual(in, out) != true {
  1036  		t.Fatalf("Expected out to be %v, got %v", in, out)
  1037  	}
  1038  }
  1039  
  1040  func TestCloudFrontStructure_expandViewerCertificate_cloudfront_default_certificate(t *testing.T) {
  1041  	data := viewerCertificateConfSetCloudFrontDefault()
  1042  	vc := expandViewerCertificate(data)
  1043  	if vc.ACMCertificateArn != nil {
  1044  		t.Fatalf("Expected ACMCertificateArn to be unset, got %v", *vc.ACMCertificateArn)
  1045  	}
  1046  	if *vc.CloudFrontDefaultCertificate != true {
  1047  		t.Fatalf("Expected CloudFrontDefaultCertificate to be true, got %v", *vc.CloudFrontDefaultCertificate)
  1048  	}
  1049  	if vc.IAMCertificateId != nil {
  1050  		t.Fatalf("Expected IAMCertificateId to not be set, got %v", *vc.IAMCertificateId)
  1051  	}
  1052  	if vc.SSLSupportMethod != nil {
  1053  		t.Fatalf("Expected IAMCertificateId to not be set, got %v", *vc.SSLSupportMethod)
  1054  	}
  1055  	if vc.MinimumProtocolVersion != nil {
  1056  		t.Fatalf("Expected IAMCertificateId to not be set, got %v", *vc.MinimumProtocolVersion)
  1057  	}
  1058  }
  1059  
  1060  func TestCloudFrontStructure_flattenViewerCertificate_cloudfront_default_certificate(t *testing.T) {
  1061  	in := viewerCertificateConfSetCloudFrontDefault()
  1062  	vc := expandViewerCertificate(in)
  1063  	out := flattenViewerCertificate(vc)
  1064  	diff := schema.NewSet(viewerCertificateHash, []interface{}{in}).Difference(out)
  1065  
  1066  	if len(diff.List()) > 0 {
  1067  		t.Fatalf("Expected out to be %v, got %v, diff: %v", in, out, diff)
  1068  	}
  1069  }
  1070  
  1071  func TestCloudFrontStructure_expandViewerCertificate_iam_certificate_id(t *testing.T) {
  1072  	data := viewerCertificateConfSetIAM()
  1073  	vc := expandViewerCertificate(data)
  1074  	if vc.ACMCertificateArn != nil {
  1075  		t.Fatalf("Expected ACMCertificateArn to be unset, got %v", *vc.ACMCertificateArn)
  1076  	}
  1077  	if vc.CloudFrontDefaultCertificate != nil {
  1078  		t.Fatalf("Expected CloudFrontDefaultCertificate to be unset, got %v", *vc.CloudFrontDefaultCertificate)
  1079  	}
  1080  	if *vc.IAMCertificateId != "iamcert-01234567" {
  1081  		t.Fatalf("Expected IAMCertificateId to be iamcert-01234567, got %v", *vc.IAMCertificateId)
  1082  	}
  1083  	if *vc.SSLSupportMethod != "vip" {
  1084  		t.Fatalf("Expected IAMCertificateId to be vip, got %v", *vc.SSLSupportMethod)
  1085  	}
  1086  	if *vc.MinimumProtocolVersion != "TLSv1" {
  1087  		t.Fatalf("Expected IAMCertificateId to be TLSv1, got %v", *vc.MinimumProtocolVersion)
  1088  	}
  1089  }
  1090  
  1091  func TestCloudFrontStructure_expandViewerCertificate_acm_certificate_arn(t *testing.T) {
  1092  	data := viewerCertificateConfSetACM()
  1093  	vc := expandViewerCertificate(data)
  1094  	if *vc.ACMCertificateArn != "arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012" {
  1095  		t.Fatalf("Expected ACMCertificateArn to be arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012, got %v", *vc.ACMCertificateArn)
  1096  	}
  1097  	if vc.CloudFrontDefaultCertificate != nil {
  1098  		t.Fatalf("Expected CloudFrontDefaultCertificate to be unset, got %v", *vc.CloudFrontDefaultCertificate)
  1099  	}
  1100  	if vc.IAMCertificateId != nil {
  1101  		t.Fatalf("Expected IAMCertificateId to be unset, got %v", *vc.IAMCertificateId)
  1102  	}
  1103  	if *vc.SSLSupportMethod != "sni-only" {
  1104  		t.Fatalf("Expected IAMCertificateId to be sni-only, got %v", *vc.SSLSupportMethod)
  1105  	}
  1106  	if *vc.MinimumProtocolVersion != "TLSv1" {
  1107  		t.Fatalf("Expected IAMCertificateId to be TLSv1, got %v", *vc.MinimumProtocolVersion)
  1108  	}
  1109  }
  1110  
  1111  func TestCloudFrontStructure_falttenViewerCertificate_iam_certificate_id(t *testing.T) {
  1112  	in := viewerCertificateConfSetIAM()
  1113  	vc := expandViewerCertificate(in)
  1114  	out := flattenViewerCertificate(vc)
  1115  	diff := schema.NewSet(viewerCertificateHash, []interface{}{in}).Difference(out)
  1116  
  1117  	if len(diff.List()) > 0 {
  1118  		t.Fatalf("Expected out to be %v, got %v, diff: %v", in, out, diff)
  1119  	}
  1120  }
  1121  
  1122  func TestCloudFrontStructure_falttenViewerCertificate_acm_certificate_arn(t *testing.T) {
  1123  	in := viewerCertificateConfSetACM()
  1124  	vc := expandViewerCertificate(in)
  1125  	out := flattenViewerCertificate(vc)
  1126  	diff := schema.NewSet(viewerCertificateHash, []interface{}{in}).Difference(out)
  1127  
  1128  	if len(diff.List()) > 0 {
  1129  		t.Fatalf("Expected out to be %v, got %v, diff: %v", in, out, diff)
  1130  	}
  1131  }
  1132  
  1133  func TestCloudFrontStructure_viewerCertificateHash_IAM(t *testing.T) {
  1134  	in := viewerCertificateConfSetIAM()
  1135  	out := viewerCertificateHash(in)
  1136  	expected := 1157261784
  1137  
  1138  	if expected != out {
  1139  		t.Fatalf("Expected %v, got %v", expected, out)
  1140  	}
  1141  }
  1142  
  1143  func TestCloudFrontStructure_viewerCertificateHash_ACM(t *testing.T) {
  1144  	in := viewerCertificateConfSetACM()
  1145  	out := viewerCertificateHash(in)
  1146  	expected := 2883600425
  1147  
  1148  	if expected != out {
  1149  		t.Fatalf("Expected %v, got %v", expected, out)
  1150  	}
  1151  }
  1152  
  1153  func TestCloudFrontStructure_viewerCertificateHash_default(t *testing.T) {
  1154  	in := viewerCertificateConfSetCloudFrontDefault()
  1155  	out := viewerCertificateHash(in)
  1156  	expected := 69840937
  1157  
  1158  	if expected != out {
  1159  		t.Fatalf("Expected %v, got %v", expected, out)
  1160  	}
  1161  }