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