diff --git a/configuration.go b/configuration.go index 4efd4db9..3e92d60b 100644 --- a/configuration.go +++ b/configuration.go @@ -534,6 +534,10 @@ func WithConfiguration(c Configuration) Configurator { main.DisableInterruptHandler = v } + if v := c.DisableVersionChecker; v { + main.DisableVersionChecker = v + } + if v := c.DisablePathCorrection; v { main.DisablePathCorrection = v } diff --git a/configuration_test.go b/configuration_test.go new file mode 100644 index 00000000..6df6b844 --- /dev/null +++ b/configuration_test.go @@ -0,0 +1,220 @@ +package iris + +import ( + "io/ioutil" + "os" + "reflect" + "testing" + "time" +) + +// $ go test -v -run TestConfiguration* + +func TestConfigurationStatic(t *testing.T) { + def := DefaultConfiguration() + + app := New() + afterNew := *app.config + + if !reflect.DeepEqual(def, afterNew) { + t.Fatalf("Default configuration is not the same after NewFromConfig expected:\n %#v \ngot:\n %#v", def, afterNew) + } + + afterNew.Charset = "changed" + + if reflect.DeepEqual(def, afterNew) { + t.Fatalf("Configuration should be not equal, got: %#v", afterNew) + } + + app = New().Configure(WithConfiguration(Configuration{DisableBodyConsumptionOnUnmarshal: true})) + + afterNew = *app.config + + if app.config.DisableBodyConsumptionOnUnmarshal == false { + t.Fatalf("Passing a Configuration field as Option fails, expected DisableBodyConsumptionOnUnmarshal to be true but was false") + } + + app = New() // empty , means defaults so + if !reflect.DeepEqual(def, *app.config) { + t.Fatalf("Default configuration is not the same after NewFromConfig expected:\n %#v \ngot:\n %#v", def, *app.config) + } +} + +func TestConfigurationOptions(t *testing.T) { + charset := "MYCHARSET" + disableBodyConsumptionOnUnmarshal := true + disableBanner := true + + app := New().Configure(WithCharset(charset), WithoutBodyConsumptionOnUnmarshal, WithoutBanner) + + if got := app.config.Charset; got != charset { + t.Fatalf("Expected configuration Charset to be: %s but got: %s", charset, got) + } + + if got := app.config.DisableBodyConsumptionOnUnmarshal; got != disableBodyConsumptionOnUnmarshal { + t.Fatalf("Expected configuration DisableBodyConsumptionOnUnmarshal to be: %#v but got: %#v", disableBodyConsumptionOnUnmarshal, got) + } + + if got := app.config.DisableStartupLog; got != disableBanner { + t.Fatalf("Expected configuration DisableStartupLog to be: %#v but got: %#v", disableBanner, got) + } + + // now check if other default values are setted (should be setted automatically) + + expected := DefaultConfiguration() + expected.Charset = charset + expected.DisableBodyConsumptionOnUnmarshal = disableBodyConsumptionOnUnmarshal + expected.DisableStartupLog = disableBanner + + has := *app.config + if !reflect.DeepEqual(has, expected) { + t.Fatalf("Default configuration is not the same after New expected:\n %#v \ngot:\n %#v", expected, has) + } +} + +func TestConfigurationOptionsDeep(t *testing.T) { + charset := "MYCHARSET" + + app := New().Configure(WithCharset(charset), WithoutBodyConsumptionOnUnmarshal, WithoutBanner, WithoutVersionChecker) + + expected := DefaultConfiguration() + expected.Charset = charset + expected.DisableBodyConsumptionOnUnmarshal = true + expected.DisableStartupLog = true + expected.DisableVersionChecker = true + + has := *app.config + + if !reflect.DeepEqual(has, expected) { + t.Fatalf("DEEP configuration is not the same after New expected:\n %#v \ngot:\n %#v", expected, has) + } +} + +func TestConfigurationYAML(t *testing.T) { + yamlFile, ferr := ioutil.TempFile("", "configuration.yml") + + if ferr != nil { + t.Fatal(ferr) + } + + defer func() { + yamlFile.Close() + time.Sleep(50 * time.Millisecond) + os.Remove(yamlFile.Name()) + }() + + yamlConfigurationContents := ` +DisableVersionChecker: true +DisablePathCorrection: false +EnablePathEscape: false +FireMethodNotAllowed: true +EnableOptimizations: true +DisableBodyConsumptionOnUnmarshal: true +TimeFormat: Mon, 01 Jan 2006 15:04:05 GMT +Charset: UTF-8 + +` + yamlFile.WriteString(yamlConfigurationContents) + filename := yamlFile.Name() + app := New().Configure(WithConfiguration(YAML(filename))) + + c := app.config + + if expected := true; c.DisableVersionChecker != expected { + t.Fatalf("error on TestConfigurationYAML: Expected DisableVersionChecker %v but got %v", expected, c.DisableVersionChecker) + } + + if expected := false; c.DisablePathCorrection != expected { + t.Fatalf("error on TestConfigurationYAML: Expected DisablePathCorrection %v but got %v", expected, c.DisablePathCorrection) + } + + if expected := false; c.EnablePathEscape != expected { + t.Fatalf("error on TestConfigurationYAML: Expected EnablePathEscape %v but got %v", expected, c.EnablePathEscape) + } + + if expected := true; c.EnableOptimizations != expected { + t.Fatalf("error on TestConfigurationYAML: Expected EnableOptimizations %v but got %v", expected, c.EnablePathEscape) + } + + if expected := true; c.FireMethodNotAllowed != expected { + t.Fatalf("error on TestConfigurationYAML: Expected FireMethodNotAllowed %v but got %v", expected, c.FireMethodNotAllowed) + } + + if expected := true; c.DisableBodyConsumptionOnUnmarshal != expected { + t.Fatalf("error on TestConfigurationYAML: Expected DisableBodyConsumptionOnUnmarshal %v but got %v", expected, c.DisableBodyConsumptionOnUnmarshal) + } + + if expected := "Mon, 01 Jan 2006 15:04:05 GMT"; c.TimeFormat != expected { + t.Fatalf("error on TestConfigurationYAML: Expected TimeFormat %s but got %s", expected, c.TimeFormat) + } + + if expected := "UTF-8"; c.Charset != expected { + t.Fatalf("error on TestConfigurationYAML: Expected Charset %s but got %s", expected, c.Charset) + } +} + +func TestConfigurationTOML(t *testing.T) { + tomlFile, ferr := ioutil.TempFile("", "configuration.toml") + + if ferr != nil { + t.Fatal(ferr) + } + + defer func() { + tomlFile.Close() + time.Sleep(50 * time.Millisecond) + os.Remove(tomlFile.Name()) + }() + + tomlConfigurationContents := ` +DisableVersionChecker = true +EnablePathEscape = false +FireMethodNotAllowed = true +EnableOptimizations = true +DisableBodyConsumptionOnUnmarshal = true +TimeFormat = "Mon, 01 Jan 2006 15:04:05 GMT" +Charset = "UTF-8" + +[Other] + # Indentation (tabs and/or spaces) is allowed but not required + MyServerName = "Iris" + +` + tomlFile.WriteString(tomlConfigurationContents) + filename := tomlFile.Name() + app := New().Configure(WithConfiguration(TOML(filename))) + + c := app.config + + if expected := true; c.DisableVersionChecker != expected { + t.Fatalf("error on TestConfigurationTOML: Expected DisableVersionChecker %v but got %v", expected, c.DisableVersionChecker) + } + + if expected := false; c.DisablePathCorrection != expected { + t.Fatalf("error on TestConfigurationTOML: Expected DisablePathCorrection %v but got %v", expected, c.DisablePathCorrection) + } + + if expected := false; c.EnablePathEscape != expected { + t.Fatalf("error on TestConfigurationTOML: Expected EnablePathEscape %v but got %v", expected, c.EnablePathEscape) + } + + if expected := true; c.EnableOptimizations != expected { + t.Fatalf("error on TestConfigurationTOML: Expected EnableOptimizations %v but got %v", expected, c.EnablePathEscape) + } + + if expected := true; c.FireMethodNotAllowed != expected { + t.Fatalf("error on TestConfigurationTOML: Expected FireMethodNotAllowed %v but got %v", expected, c.FireMethodNotAllowed) + } + + if expected := true; c.DisableBodyConsumptionOnUnmarshal != expected { + t.Fatalf("error on TestConfigurationTOML: Expected DisableBodyConsumptionOnUnmarshal %v but got %v", expected, c.DisableBodyConsumptionOnUnmarshal) + } + + if expected := "Mon, 01 Jan 2006 15:04:05 GMT"; c.TimeFormat != expected { + t.Fatalf("error on TestConfigurationTOML: Expected TimeFormat %s but got %s", expected, c.TimeFormat) + } + + if expected := "UTF-8"; c.Charset != expected { + t.Fatalf("error on TestConfigurationTOML: Expected Charset %s but got %s", expected, c.Charset) + } +}