| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: MPL-2.0 |
| |
| package server |
| |
| import ( |
| "fmt" |
| "testing" |
| |
| "github.com/go-test/deep" |
| ) |
| |
| var defaultCustomHeaders = map[string]string{ |
| "Strict-Transport-Security": "max-age=1; domains", |
| "Content-Security-Policy": "default-src 'others'", |
| "X-Vault-Ignored": "ignored", |
| "X-Custom-Header": "Custom header value default", |
| } |
| |
| var customHeaders307 = map[string]string{ |
| "X-Custom-Header": "Custom header value 307", |
| } |
| |
| var customHeader3xx = map[string]string{ |
| "X-Vault-Ignored-3xx": "Ignored 3xx", |
| "X-Custom-Header": "Custom header value 3xx", |
| } |
| |
| var customHeaders200 = map[string]string{ |
| "Someheader-200": "200", |
| "X-Custom-Header": "Custom header value 200", |
| } |
| |
| var customHeader2xx = map[string]string{ |
| "X-Custom-Header": "Custom header value 2xx", |
| } |
| |
| var customHeader400 = map[string]string{ |
| "Someheader-400": "400", |
| } |
| |
| var defaultCustomHeadersMultiListener = map[string]string{ |
| "Strict-Transport-Security": "max-age=31536000; includeSubDomains", |
| "Content-Security-Policy": "default-src 'others'", |
| "X-Vault-Ignored": "ignored", |
| "X-Custom-Header": "Custom header value default", |
| } |
| |
| var defaultSTS = map[string]string{ |
| "Strict-Transport-Security": "max-age=31536000; includeSubDomains", |
| } |
| |
| func TestCustomResponseHeadersConfigs(t *testing.T) { |
| expectedCustomResponseHeader := map[string]map[string]string{ |
| "default": defaultCustomHeaders, |
| "307": customHeaders307, |
| "3xx": customHeader3xx, |
| "200": customHeaders200, |
| "2xx": customHeader2xx, |
| "400": customHeader400, |
| } |
| |
| config, err := LoadConfigFile("./test-fixtures/config_custom_response_headers_1.hcl") |
| if err != nil { |
| t.Fatalf("Error encountered when loading config %+v", err) |
| } |
| if diff := deep.Equal(expectedCustomResponseHeader, config.Listeners[0].CustomResponseHeaders); diff != nil { |
| t.Fatalf(fmt.Sprintf("parsed custom headers do not match the expected ones, difference: %v", diff)) |
| } |
| } |
| |
| func TestCustomResponseHeadersConfigsMultipleListeners(t *testing.T) { |
| expectedCustomResponseHeader := map[string]map[string]string{ |
| "default": defaultCustomHeadersMultiListener, |
| "307": customHeaders307, |
| "3xx": customHeader3xx, |
| "200": customHeaders200, |
| "2xx": customHeader2xx, |
| "400": customHeader400, |
| } |
| |
| config, err := LoadConfigFile("./test-fixtures/config_custom_response_headers_multiple_listeners.hcl") |
| if err != nil { |
| t.Fatalf("Error encountered when loading config %+v", err) |
| } |
| if diff := deep.Equal(expectedCustomResponseHeader, config.Listeners[0].CustomResponseHeaders); diff != nil { |
| t.Fatalf(fmt.Sprintf("parsed custom headers do not match the expected ones, difference: %v", diff)) |
| } |
| |
| if diff := deep.Equal(expectedCustomResponseHeader, config.Listeners[1].CustomResponseHeaders); diff == nil { |
| t.Fatalf(fmt.Sprintf("parsed custom headers do not match the expected ones, difference: %v", diff)) |
| } |
| if diff := deep.Equal(expectedCustomResponseHeader["default"], config.Listeners[1].CustomResponseHeaders["default"]); diff != nil { |
| t.Fatalf(fmt.Sprintf("parsed custom headers do not match the expected ones, difference: %v", diff)) |
| } |
| |
| if diff := deep.Equal(expectedCustomResponseHeader, config.Listeners[2].CustomResponseHeaders); diff == nil { |
| t.Fatalf(fmt.Sprintf("parsed custom headers do not match the expected ones, difference: %v", diff)) |
| } |
| |
| if diff := deep.Equal(defaultSTS, config.Listeners[2].CustomResponseHeaders["default"]); diff != nil { |
| t.Fatalf(fmt.Sprintf("parsed custom headers do not match the expected ones, difference: %v", diff)) |
| } |
| |
| if diff := deep.Equal(expectedCustomResponseHeader, config.Listeners[3].CustomResponseHeaders); diff == nil { |
| t.Fatalf(fmt.Sprintf("parsed custom headers do not match the expected ones, difference: %v", diff)) |
| } |
| |
| if diff := deep.Equal(defaultSTS, config.Listeners[3].CustomResponseHeaders["default"]); diff != nil { |
| t.Fatalf(fmt.Sprintf("parsed custom headers do not match the expected ones, difference: %v", diff)) |
| } |
| } |