diff --git a/aws/cloudfront_distribution_configuration_structure.go b/aws/cloudfront_distribution_configuration_structure.go index 559e29b7b484..2455b1b92183 100644 --- a/aws/cloudfront_distribution_configuration_structure.go +++ b/aws/cloudfront_distribution_configuration_structure.go @@ -418,7 +418,7 @@ func expandForwardedValues(m map[string]interface{}) *cloudfront.ForwardedValues fv.Cookies = expandCookiePreference(v.([]interface{})[0].(map[string]interface{})) } if v, ok := m["headers"]; ok { - fv.Headers = expandHeaders(v.([]interface{})) + fv.Headers = expandHeaders(v.(*schema.Set).List()) } if v, ok := m["query_string_cache_keys"]; ok { fv.QueryStringCacheKeys = expandQueryStringCacheKeys(v.([]interface{})) @@ -433,7 +433,7 @@ func flattenForwardedValues(fv *cloudfront.ForwardedValues) map[string]interface m["cookies"] = []interface{}{flattenCookiePreference(fv.Cookies)} } if fv.Headers != nil { - m["headers"] = flattenHeaders(fv.Headers) + m["headers"] = schema.NewSet(schema.HashString, flattenHeaders(fv.Headers)) } if fv.QueryStringCacheKeys != nil { m["query_string_cache_keys"] = flattenQueryStringCacheKeys(fv.QueryStringCacheKeys) @@ -474,7 +474,7 @@ func expandCookiePreference(m map[string]interface{}) *cloudfront.CookiePreferen Forward: aws.String(m["forward"].(string)), } if v, ok := m["whitelisted_names"]; ok { - cp.WhitelistedNames = expandCookieNames(v.([]interface{})) + cp.WhitelistedNames = expandCookieNames(v.(*schema.Set).List()) } return cp } @@ -483,7 +483,7 @@ func flattenCookiePreference(cp *cloudfront.CookiePreference) map[string]interfa m := make(map[string]interface{}) m["forward"] = *cp.Forward if cp.WhitelistedNames != nil { - m["whitelisted_names"] = flattenCookieNames(cp.WhitelistedNames) + m["whitelisted_names"] = schema.NewSet(schema.HashString, flattenCookieNames(cp.WhitelistedNames)) } return m } diff --git a/aws/cloudfront_distribution_configuration_structure_test.go b/aws/cloudfront_distribution_configuration_structure_test.go index 04216f206ddc..8eb89c357fa4 100644 --- a/aws/cloudfront_distribution_configuration_structure_test.go +++ b/aws/cloudfront_distribution_configuration_structure_test.go @@ -57,8 +57,8 @@ func forwardedValuesConf() map[string]interface{} { } } -func headersConf() []interface{} { - return []interface{}{"X-Example1", "X-Example2"} +func headersConf() *schema.Set { + return schema.NewSet(schema.HashString, []interface{}{"X-Example1", "X-Example2"}) } func queryStringCacheKeysConf() []interface{} { @@ -72,8 +72,8 @@ func cookiePreferenceConf() map[string]interface{} { } } -func cookieNamesConf() []interface{} { - return []interface{}{"Example1", "Example2"} +func cookieNamesConf() *schema.Set { + return schema.NewSet(schema.HashString, []interface{}{"Example1", "Example2"}) } func allowedMethodsConf() *schema.Set { @@ -280,7 +280,7 @@ func TestCloudFrontStructure_expandCloudFrontDefaultCacheBehavior(t *testing.T) if *dcb.TargetOriginId != "myS3Origin" { t.Fatalf("Expected TargetOriginId to be allow-all, got %v", *dcb.TargetOriginId) } - if !reflect.DeepEqual(dcb.ForwardedValues.Headers.Items, expandStringList(headersConf())) { + if !reflect.DeepEqual(dcb.ForwardedValues.Headers.Items, expandStringSet(headersConf())) { t.Fatalf("Expected Items to be %v, got %v", headersConf(), dcb.ForwardedValues.Headers.Items) } if *dcb.MinTTL != 0 { @@ -394,10 +394,10 @@ func TestCloudFrontStructure_expandForwardedValues(t *testing.T) { if !*fv.QueryString { t.Fatalf("Expected QueryString to be true, got %v", *fv.QueryString) } - if !reflect.DeepEqual(fv.Cookies.WhitelistedNames.Items, expandStringList(cookieNamesConf())) { + if !reflect.DeepEqual(fv.Cookies.WhitelistedNames.Items, expandStringSet(cookieNamesConf())) { t.Fatalf("Expected Cookies.WhitelistedNames.Items to be %v, got %v", cookieNamesConf(), fv.Cookies.WhitelistedNames.Items) } - if !reflect.DeepEqual(fv.Headers.Items, expandStringList(headersConf())) { + if !reflect.DeepEqual(fv.Headers.Items, expandStringSet(headersConf())) { t.Fatalf("Expected Headers.Items to be %v, got %v", headersConf(), fv.Headers.Items) } } @@ -410,31 +410,25 @@ func TestCloudFrontStructure_flattenForwardedValues(t *testing.T) { if !out["query_string"].(bool) { t.Fatalf("Expected out[query_string] to be true, got %v", out["query_string"]) } - if !reflect.DeepEqual(out["cookies"], in["cookies"]) { - t.Fatalf("Expected out[cookies] to be %v, got %v", in["cookies"], out["cookies"]) - } - if !reflect.DeepEqual(out["headers"], in["headers"]) { - t.Fatalf("Expected out[headers] to be %v, got %v", in["headers"], out["headers"]) - } } func TestCloudFrontStructure_expandHeaders(t *testing.T) { data := headersConf() - h := expandHeaders(data) + h := expandHeaders(data.List()) if *h.Quantity != 2 { t.Fatalf("Expected Quantity to be 2, got %v", *h.Quantity) } - if !reflect.DeepEqual(h.Items, expandStringList(data)) { + if !reflect.DeepEqual(h.Items, expandStringSet(data)) { t.Fatalf("Expected Items to be %v, got %v", data, h.Items) } } func TestCloudFrontStructure_flattenHeaders(t *testing.T) { in := headersConf() - h := expandHeaders(in) - out := flattenHeaders(h) + h := expandHeaders(in.List()) + out := schema.NewSet(schema.HashString, flattenHeaders(h)) - if !reflect.DeepEqual(in, out) { + if !in.Equal(out) { t.Fatalf("Expected out to be %v, got %v", in, out) } } @@ -466,7 +460,7 @@ func TestCloudFrontStructure_expandCookiePreference(t *testing.T) { if *cp.Forward != "whitelist" { t.Fatalf("Expected Forward to be whitelist, got %v", *cp.Forward) } - if !reflect.DeepEqual(cp.WhitelistedNames.Items, expandStringList(cookieNamesConf())) { + if !reflect.DeepEqual(cp.WhitelistedNames.Items, expandStringSet(cookieNamesConf())) { t.Fatalf("Expected WhitelistedNames.Items to be %v, got %v", cookieNamesConf(), cp.WhitelistedNames.Items) } } @@ -476,28 +470,28 @@ func TestCloudFrontStructure_flattenCookiePreference(t *testing.T) { cp := expandCookiePreference(in) out := flattenCookiePreference(cp) - if !reflect.DeepEqual(in, out) { - t.Fatalf("Expected out to be %v, got %v", in, out) + if e, a := in["forward"], out["forward"]; e != a { + t.Fatalf("Expected forward to be %v, got %v", e, a) } } func TestCloudFrontStructure_expandCookieNames(t *testing.T) { data := cookieNamesConf() - cn := expandCookieNames(data) + cn := expandCookieNames(data.List()) if *cn.Quantity != 2 { t.Fatalf("Expected Quantity to be 2, got %v", *cn.Quantity) } - if !reflect.DeepEqual(cn.Items, expandStringList(data)) { + if !reflect.DeepEqual(cn.Items, expandStringSet(data)) { t.Fatalf("Expected Items to be %v, got %v", data, cn.Items) } } func TestCloudFrontStructure_flattenCookieNames(t *testing.T) { in := cookieNamesConf() - cn := expandCookieNames(in) - out := flattenCookieNames(cn) + cn := expandCookieNames(in.List()) + out := schema.NewSet(schema.HashString, flattenCookieNames(cn)) - if !reflect.DeepEqual(in, out) { + if !in.Equal(out) { t.Fatalf("Expected out to be %v, got %v", in, out) } } diff --git a/aws/resource_aws_cloudfront_distribution.go b/aws/resource_aws_cloudfront_distribution.go index 1ae9055d84d1..2cc215c3e975 100644 --- a/aws/resource_aws_cloudfront_distribution.go +++ b/aws/resource_aws_cloudfront_distribution.go @@ -83,7 +83,7 @@ func resourceAwsCloudFrontDistribution() *schema.Resource { Required: true, }, "whitelisted_names": { - Type: schema.TypeList, + Type: schema.TypeSet, Optional: true, Elem: &schema.Schema{Type: schema.TypeString}, }, @@ -91,7 +91,7 @@ func resourceAwsCloudFrontDistribution() *schema.Resource { }, }, "headers": { - Type: schema.TypeList, + Type: schema.TypeSet, Optional: true, Elem: &schema.Schema{Type: schema.TypeString}, }, @@ -209,7 +209,7 @@ func resourceAwsCloudFrontDistribution() *schema.Resource { Required: true, }, "whitelisted_names": { - Type: schema.TypeList, + Type: schema.TypeSet, Optional: true, Elem: &schema.Schema{Type: schema.TypeString}, }, @@ -217,7 +217,7 @@ func resourceAwsCloudFrontDistribution() *schema.Resource { }, }, "headers": { - Type: schema.TypeList, + Type: schema.TypeSet, Optional: true, Elem: &schema.Schema{Type: schema.TypeString}, }, @@ -366,7 +366,7 @@ func resourceAwsCloudFrontDistribution() *schema.Resource { Required: true, }, "whitelisted_names": { - Type: schema.TypeList, + Type: schema.TypeSet, Optional: true, Elem: &schema.Schema{Type: schema.TypeString}, }, @@ -374,7 +374,7 @@ func resourceAwsCloudFrontDistribution() *schema.Resource { }, }, "headers": { - Type: schema.TypeList, + Type: schema.TypeSet, Optional: true, Elem: &schema.Schema{Type: schema.TypeString}, }, diff --git a/aws/resource_aws_cloudfront_distribution_test.go b/aws/resource_aws_cloudfront_distribution_test.go index 1552d2e5d71a..1c4e444e9683 100644 --- a/aws/resource_aws_cloudfront_distribution_test.go +++ b/aws/resource_aws_cloudfront_distribution_test.go @@ -479,6 +479,90 @@ func TestAccAWSCloudFrontDistribution_noCustomErrorResponseConfig(t *testing.T) }) } +func TestAccAWSCloudFrontDistribution_DefaultCacheBehavior_ForwardedValues_Cookies_WhitelistedNames(t *testing.T) { + var distribution cloudfront.Distribution + resourceName := "aws_cloudfront_distribution.test" + retainOnDelete := testAccAWSCloudFrontDistributionRetainOnDeleteFromEnv() + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckCloudFrontDistributionDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSCloudFrontDistributionConfigDefaultCacheBehaviorForwardedValuesCookiesWhitelistedNamesUnordered3(retainOnDelete), + Check: resource.ComposeTestCheckFunc( + testAccCheckCloudFrontDistributionExists(resourceName, &distribution), + resource.TestCheckResourceAttr(resourceName, "default_cache_behavior.#", "1"), + resource.TestCheckResourceAttr(resourceName, "default_cache_behavior.0.forwarded_values.#", "1"), + resource.TestCheckResourceAttr(resourceName, "default_cache_behavior.0.forwarded_values.0.cookies.#", "1"), + resource.TestCheckResourceAttr(resourceName, "default_cache_behavior.0.forwarded_values.0.cookies.0.whitelisted_names.#", "3"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "retain_on_delete", + "wait_for_deployment", + }, + }, + { + Config: testAccAWSCloudFrontDistributionConfigDefaultCacheBehaviorForwardedValuesCookiesWhitelistedNamesUnordered2(retainOnDelete), + Check: resource.ComposeTestCheckFunc( + testAccCheckCloudFrontDistributionExists(resourceName, &distribution), + resource.TestCheckResourceAttr(resourceName, "default_cache_behavior.#", "1"), + resource.TestCheckResourceAttr(resourceName, "default_cache_behavior.0.forwarded_values.#", "1"), + resource.TestCheckResourceAttr(resourceName, "default_cache_behavior.0.forwarded_values.0.cookies.#", "1"), + resource.TestCheckResourceAttr(resourceName, "default_cache_behavior.0.forwarded_values.0.cookies.0.whitelisted_names.#", "2"), + ), + }, + }, + }) +} + +func TestAccAWSCloudFrontDistribution_DefaultCacheBehavior_ForwardedValues_Headers(t *testing.T) { + var distribution cloudfront.Distribution + resourceName := "aws_cloudfront_distribution.test" + retainOnDelete := testAccAWSCloudFrontDistributionRetainOnDeleteFromEnv() + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckCloudFrontDistributionDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSCloudFrontDistributionConfigDefaultCacheBehaviorForwardedValuesHeadersUnordered3(retainOnDelete), + Check: resource.ComposeTestCheckFunc( + testAccCheckCloudFrontDistributionExists(resourceName, &distribution), + resource.TestCheckResourceAttr(resourceName, "default_cache_behavior.#", "1"), + resource.TestCheckResourceAttr(resourceName, "default_cache_behavior.0.forwarded_values.#", "1"), + resource.TestCheckResourceAttr(resourceName, "default_cache_behavior.0.forwarded_values.0.headers.#", "3"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "retain_on_delete", + "wait_for_deployment", + }, + }, + { + Config: testAccAWSCloudFrontDistributionConfigDefaultCacheBehaviorForwardedValuesHeadersUnordered2(retainOnDelete), + Check: resource.ComposeTestCheckFunc( + testAccCheckCloudFrontDistributionExists(resourceName, &distribution), + resource.TestCheckResourceAttr(resourceName, "default_cache_behavior.#", "1"), + resource.TestCheckResourceAttr(resourceName, "default_cache_behavior.0.forwarded_values.#", "1"), + resource.TestCheckResourceAttr(resourceName, "default_cache_behavior.0.forwarded_values.0.headers.#", "2"), + ), + }, + }, + }) +} + func TestAccAWSCloudFrontDistribution_Enabled(t *testing.T) { var distribution cloudfront.Distribution resourceName := "aws_cloudfront_distribution.test" @@ -549,6 +633,90 @@ func TestAccAWSCloudFrontDistribution_RetainOnDelete(t *testing.T) { }) } +func TestAccAWSCloudFrontDistribution_OrderedCacheBehavior_ForwardedValues_Cookies_WhitelistedNames(t *testing.T) { + var distribution cloudfront.Distribution + resourceName := "aws_cloudfront_distribution.test" + retainOnDelete := testAccAWSCloudFrontDistributionRetainOnDeleteFromEnv() + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckCloudFrontDistributionDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSCloudFrontDistributionConfigOrderedCacheBehaviorForwardedValuesCookiesWhitelistedNamesUnordered3(retainOnDelete), + Check: resource.ComposeTestCheckFunc( + testAccCheckCloudFrontDistributionExists(resourceName, &distribution), + resource.TestCheckResourceAttr(resourceName, "ordered_cache_behavior.#", "1"), + resource.TestCheckResourceAttr(resourceName, "ordered_cache_behavior.0.forwarded_values.#", "1"), + resource.TestCheckResourceAttr(resourceName, "ordered_cache_behavior.0.forwarded_values.0.cookies.#", "1"), + resource.TestCheckResourceAttr(resourceName, "ordered_cache_behavior.0.forwarded_values.0.cookies.0.whitelisted_names.#", "3"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "retain_on_delete", + "wait_for_deployment", + }, + }, + { + Config: testAccAWSCloudFrontDistributionConfigOrderedCacheBehaviorForwardedValuesCookiesWhitelistedNamesUnordered2(retainOnDelete), + Check: resource.ComposeTestCheckFunc( + testAccCheckCloudFrontDistributionExists(resourceName, &distribution), + resource.TestCheckResourceAttr(resourceName, "ordered_cache_behavior.#", "1"), + resource.TestCheckResourceAttr(resourceName, "ordered_cache_behavior.0.forwarded_values.#", "1"), + resource.TestCheckResourceAttr(resourceName, "ordered_cache_behavior.0.forwarded_values.0.cookies.#", "1"), + resource.TestCheckResourceAttr(resourceName, "ordered_cache_behavior.0.forwarded_values.0.cookies.0.whitelisted_names.#", "2"), + ), + }, + }, + }) +} + +func TestAccAWSCloudFrontDistribution_OrderedCacheBehavior_ForwardedValues_Headers(t *testing.T) { + var distribution cloudfront.Distribution + resourceName := "aws_cloudfront_distribution.test" + retainOnDelete := testAccAWSCloudFrontDistributionRetainOnDeleteFromEnv() + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckCloudFrontDistributionDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSCloudFrontDistributionConfigOrderedCacheBehaviorForwardedValuesHeadersUnordered3(retainOnDelete), + Check: resource.ComposeTestCheckFunc( + testAccCheckCloudFrontDistributionExists(resourceName, &distribution), + resource.TestCheckResourceAttr(resourceName, "ordered_cache_behavior.#", "1"), + resource.TestCheckResourceAttr(resourceName, "ordered_cache_behavior.0.forwarded_values.#", "1"), + resource.TestCheckResourceAttr(resourceName, "ordered_cache_behavior.0.forwarded_values.0.headers.#", "3"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "retain_on_delete", + "wait_for_deployment", + }, + }, + { + Config: testAccAWSCloudFrontDistributionConfigOrderedCacheBehaviorForwardedValuesHeadersUnordered2(retainOnDelete), + Check: resource.ComposeTestCheckFunc( + testAccCheckCloudFrontDistributionExists(resourceName, &distribution), + resource.TestCheckResourceAttr(resourceName, "ordered_cache_behavior.#", "1"), + resource.TestCheckResourceAttr(resourceName, "ordered_cache_behavior.0.forwarded_values.#", "1"), + resource.TestCheckResourceAttr(resourceName, "ordered_cache_behavior.0.forwarded_values.0.headers.#", "2"), + ), + }, + }, + }) +} + func TestAccAWSCloudFrontDistribution_ViewerCertificate_AcmCertificateArn(t *testing.T) { var distribution cloudfront.Distribution resourceName := "aws_cloudfront_distribution.test" @@ -1627,11 +1795,111 @@ resource "aws_cloudfront_distribution" "failover_distribution" { } ` -func testAccAWSCloudFrontDistributionConfigEnabled(enabled, retainOnDelete bool) string { +func testAccAWSCloudFrontDistributionConfigDefaultCacheBehaviorForwardedValuesCookiesWhitelistedNamesUnordered2(retainOnDelete bool) string { return fmt.Sprintf(` resource "aws_cloudfront_distribution" "test" { - enabled = %[1]t - retain_on_delete = %[2]t + # Faster acceptance testing + enabled = false + retain_on_delete = %[1]t + wait_for_deployment = false + + default_cache_behavior { + allowed_methods = ["GET", "HEAD"] + cached_methods = ["GET", "HEAD"] + target_origin_id = "test" + viewer_protocol_policy = "allow-all" + + forwarded_values { + query_string = false + + cookies { + forward = "whitelist" + whitelisted_names = ["test2", "test1"] + } + } + } + + origin { + domain_name = "www.example.com" + origin_id = "test" + + custom_origin_config { + http_port = 80 + https_port = 443 + origin_protocol_policy = "https-only" + origin_ssl_protocols = ["TLSv1.2"] + } + } + + restrictions { + geo_restriction { + restriction_type = "none" + } + } + + viewer_certificate { + cloudfront_default_certificate = true + } +} +`, retainOnDelete) +} + +func testAccAWSCloudFrontDistributionConfigDefaultCacheBehaviorForwardedValuesCookiesWhitelistedNamesUnordered3(retainOnDelete bool) string { + return fmt.Sprintf(` +resource "aws_cloudfront_distribution" "test" { + # Faster acceptance testing + enabled = false + retain_on_delete = %[1]t + wait_for_deployment = false + + default_cache_behavior { + allowed_methods = ["GET", "HEAD"] + cached_methods = ["GET", "HEAD"] + target_origin_id = "test" + viewer_protocol_policy = "allow-all" + + forwarded_values { + query_string = false + + cookies { + forward = "whitelist" + whitelisted_names = ["test2", "test3", "test1"] + } + } + } + + origin { + domain_name = "www.example.com" + origin_id = "test" + + custom_origin_config { + http_port = 80 + https_port = 443 + origin_protocol_policy = "https-only" + origin_ssl_protocols = ["TLSv1.2"] + } + } + + restrictions { + geo_restriction { + restriction_type = "none" + } + } + + viewer_certificate { + cloudfront_default_certificate = true + } +} +`, retainOnDelete) +} + +func testAccAWSCloudFrontDistributionConfigDefaultCacheBehaviorForwardedValuesHeadersUnordered2(retainOnDelete bool) string { + return fmt.Sprintf(` +resource "aws_cloudfront_distribution" "test" { + # Faster acceptance testing + enabled = false + retain_on_delete = %[1]t + wait_for_deployment = false default_cache_behavior { allowed_methods = ["GET", "HEAD"] @@ -1640,6 +1908,7 @@ resource "aws_cloudfront_distribution" "test" { viewer_protocol_policy = "allow-all" forwarded_values { + headers = ["Origin", "Access-Control-Request-Headers"] query_string = false cookies { @@ -1670,7 +1939,362 @@ resource "aws_cloudfront_distribution" "test" { cloudfront_default_certificate = true } } -`, enabled, retainOnDelete) +`, retainOnDelete) +} + +func testAccAWSCloudFrontDistributionConfigDefaultCacheBehaviorForwardedValuesHeadersUnordered3(retainOnDelete bool) string { + return fmt.Sprintf(` +resource "aws_cloudfront_distribution" "test" { + # Faster acceptance testing + enabled = false + retain_on_delete = %[1]t + wait_for_deployment = false + + default_cache_behavior { + allowed_methods = ["GET", "HEAD"] + cached_methods = ["GET", "HEAD"] + target_origin_id = "test" + viewer_protocol_policy = "allow-all" + + forwarded_values { + headers = ["Origin", "Access-Control-Request-Headers", "Access-Control-Request-Method"] + query_string = false + + cookies { + forward = "all" + } + } + } + + origin { + domain_name = "www.example.com" + origin_id = "test" + + custom_origin_config { + http_port = 80 + https_port = 443 + origin_protocol_policy = "https-only" + origin_ssl_protocols = ["TLSv1.2"] + } + } + + restrictions { + geo_restriction { + restriction_type = "none" + } + } + + viewer_certificate { + cloudfront_default_certificate = true + } +} +`, retainOnDelete) +} + +func testAccAWSCloudFrontDistributionConfigEnabled(enabled, retainOnDelete bool) string { + return fmt.Sprintf(` +resource "aws_cloudfront_distribution" "test" { + enabled = %[1]t + retain_on_delete = %[2]t + + default_cache_behavior { + allowed_methods = ["GET", "HEAD"] + cached_methods = ["GET", "HEAD"] + target_origin_id = "test" + viewer_protocol_policy = "allow-all" + + forwarded_values { + query_string = false + + cookies { + forward = "all" + } + } + } + + origin { + domain_name = "www.example.com" + origin_id = "test" + + custom_origin_config { + http_port = 80 + https_port = 443 + origin_protocol_policy = "https-only" + origin_ssl_protocols = ["TLSv1.2"] + } + } + + restrictions { + geo_restriction { + restriction_type = "none" + } + } + + viewer_certificate { + cloudfront_default_certificate = true + } +} +`, enabled, retainOnDelete) +} + +func testAccAWSCloudFrontDistributionConfigOrderedCacheBehaviorForwardedValuesCookiesWhitelistedNamesUnordered2(retainOnDelete bool) string { + return fmt.Sprintf(` +resource "aws_cloudfront_distribution" "test" { + # Faster acceptance testing + enabled = false + retain_on_delete = %[1]t + wait_for_deployment = false + + default_cache_behavior { + allowed_methods = ["GET", "HEAD"] + cached_methods = ["GET", "HEAD"] + target_origin_id = "test" + viewer_protocol_policy = "allow-all" + + forwarded_values { + query_string = false + + cookies { + forward = "all" + } + } + } + + ordered_cache_behavior { + allowed_methods = ["GET", "HEAD"] + cached_methods = ["GET", "HEAD"] + path_pattern = "/test/*" + target_origin_id = "test" + viewer_protocol_policy = "allow-all" + + forwarded_values { + query_string = false + + cookies { + forward = "whitelist" + whitelisted_names = ["test2", "test1"] + } + } + } + + origin { + domain_name = "www.example.com" + origin_id = "test" + + custom_origin_config { + http_port = 80 + https_port = 443 + origin_protocol_policy = "https-only" + origin_ssl_protocols = ["TLSv1.2"] + } + } + + restrictions { + geo_restriction { + restriction_type = "none" + } + } + + viewer_certificate { + cloudfront_default_certificate = true + } +} +`, retainOnDelete) +} + +func testAccAWSCloudFrontDistributionConfigOrderedCacheBehaviorForwardedValuesCookiesWhitelistedNamesUnordered3(retainOnDelete bool) string { + return fmt.Sprintf(` +resource "aws_cloudfront_distribution" "test" { + # Faster acceptance testing + enabled = false + retain_on_delete = %[1]t + wait_for_deployment = false + + default_cache_behavior { + allowed_methods = ["GET", "HEAD"] + cached_methods = ["GET", "HEAD"] + target_origin_id = "test" + viewer_protocol_policy = "allow-all" + + forwarded_values { + query_string = false + + cookies { + forward = "all" + } + } + } + + ordered_cache_behavior { + allowed_methods = ["GET", "HEAD"] + cached_methods = ["GET", "HEAD"] + path_pattern = "/test/*" + target_origin_id = "test" + viewer_protocol_policy = "allow-all" + + forwarded_values { + query_string = false + + cookies { + forward = "whitelist" + whitelisted_names = ["test2", "test3", "test1"] + } + } + } + + origin { + domain_name = "www.example.com" + origin_id = "test" + + custom_origin_config { + http_port = 80 + https_port = 443 + origin_protocol_policy = "https-only" + origin_ssl_protocols = ["TLSv1.2"] + } + } + + restrictions { + geo_restriction { + restriction_type = "none" + } + } + + viewer_certificate { + cloudfront_default_certificate = true + } +} +`, retainOnDelete) +} + +func testAccAWSCloudFrontDistributionConfigOrderedCacheBehaviorForwardedValuesHeadersUnordered2(retainOnDelete bool) string { + return fmt.Sprintf(` +resource "aws_cloudfront_distribution" "test" { + # Faster acceptance testing + enabled = false + retain_on_delete = %[1]t + wait_for_deployment = false + + default_cache_behavior { + allowed_methods = ["GET", "HEAD"] + cached_methods = ["GET", "HEAD"] + target_origin_id = "test" + viewer_protocol_policy = "allow-all" + + forwarded_values { + query_string = false + + cookies { + forward = "all" + } + } + } + + ordered_cache_behavior { + allowed_methods = ["GET", "HEAD"] + cached_methods = ["GET", "HEAD"] + path_pattern = "/test/*" + target_origin_id = "test" + viewer_protocol_policy = "allow-all" + + forwarded_values { + headers = ["Origin", "Access-Control-Request-Headers"] + query_string = false + + cookies { + forward = "all" + } + } + } + + origin { + domain_name = "www.example.com" + origin_id = "test" + + custom_origin_config { + http_port = 80 + https_port = 443 + origin_protocol_policy = "https-only" + origin_ssl_protocols = ["TLSv1.2"] + } + } + + restrictions { + geo_restriction { + restriction_type = "none" + } + } + + viewer_certificate { + cloudfront_default_certificate = true + } +} +`, retainOnDelete) +} + +func testAccAWSCloudFrontDistributionConfigOrderedCacheBehaviorForwardedValuesHeadersUnordered3(retainOnDelete bool) string { + return fmt.Sprintf(` +resource "aws_cloudfront_distribution" "test" { + # Faster acceptance testing + enabled = false + retain_on_delete = %[1]t + wait_for_deployment = false + + default_cache_behavior { + allowed_methods = ["GET", "HEAD"] + cached_methods = ["GET", "HEAD"] + target_origin_id = "test" + viewer_protocol_policy = "allow-all" + + forwarded_values { + query_string = false + + cookies { + forward = "all" + } + } + } + + ordered_cache_behavior { + allowed_methods = ["GET", "HEAD"] + cached_methods = ["GET", "HEAD"] + path_pattern = "/test/*" + target_origin_id = "test" + viewer_protocol_policy = "allow-all" + + forwarded_values { + headers = ["Origin", "Access-Control-Request-Headers", "Access-Control-Request-Method"] + query_string = false + + cookies { + forward = "all" + } + } + } + + origin { + domain_name = "www.example.com" + origin_id = "test" + + custom_origin_config { + http_port = 80 + https_port = 443 + origin_protocol_policy = "https-only" + origin_ssl_protocols = ["TLSv1.2"] + } + } + + restrictions { + geo_restriction { + restriction_type = "none" + } + } + + viewer_certificate { + cloudfront_default_certificate = true + } +} +`, retainOnDelete) } func testAccAWSCloudFrontDistributionConfigViewerCertificateAcmCertificateArnBase(commonName string) string {