1
0
mirror of https://github.com/kataras/iris.git synced 2025-12-17 18:07:01 +00:00

Add iris.TOML to load configuration from toml-syntax based documents.

Former-commit-id: f92dc5bcaa92ca13aaf892dc27829ae33907b387
This commit is contained in:
Gerasimos (Makis) Maropoulos
2017-03-06 00:08:58 +02:00
parent a0db147479
commit 7b73f6b1d9
4 changed files with 242 additions and 38 deletions

View File

@@ -103,19 +103,19 @@ func TestConfigurationYAML(t *testing.T) {
}()
yamlConfigurationContents := `
VHost: iris-go.com
VScheme: https://
ReadTimeout: 0
WriteTimeout: 5s
MaxHeaderBytes: 8096
CheckForUpdates: true
DisablePathCorrection: false
EnablePathEscape: false
FireMethodNotAllowed: true
DisableBodyConsumptionOnUnmarshal: true
TimeFormat: Mon, 01 Jan 2006 15:04:05 GMT
Charset: UTF-8
Gzip: true
VHost: iris-go.com
VScheme: https://
ReadTimeout: 0
WriteTimeout: 5s
MaxHeaderBytes: 8096
CheckForUpdates: true
DisablePathCorrection: false
EnablePathEscape: false
FireMethodNotAllowed: true
DisableBodyConsumptionOnUnmarshal: true
TimeFormat: Mon, 01 Jan 2006 15:04:05 GMT
Charset: UTF-8
Gzip: true
`
yamlFile.WriteString(yamlConfigurationContents)
@@ -133,7 +133,7 @@ func TestConfigurationYAML(t *testing.T) {
}
if expected := 0; c.ReadTimeout != time.Duration(expected) {
t.Fatalf("error on TestConfigurationYAML: Expected ReadTimeout %s but got %s", expected, c.ReadTimeout)
t.Fatalf("error on TestConfigurationYAML: Expected ReadTimeout %d but got %s", expected, c.ReadTimeout)
}
if expected := time.Duration(5 * time.Second); c.WriteTimeout != expected {
@@ -141,7 +141,7 @@ func TestConfigurationYAML(t *testing.T) {
}
if expected := 8096; c.MaxHeaderBytes != expected {
t.Fatalf("error on TestConfigurationYAML: Expected MaxHeaderBytes %s but got %s", expected, c.MaxHeaderBytes)
t.Fatalf("error on TestConfigurationYAML: Expected MaxHeaderBytes %d but got %d", expected, c.MaxHeaderBytes)
}
if expected := true; c.CheckForUpdates != expected {
@@ -177,3 +177,105 @@ func TestConfigurationYAML(t *testing.T) {
}
}
func TestConfigurationTOML(t *testing.T) {
// create the key and cert files on the fly, and delete them when this test finished
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 := `
VHost = "iris-go.com"
VScheme = "https://"
ReadTimeout = 0
# Go's toml doesn't supports implicit time.Duration
# There is a solution: I have to write a custom duration which implements the encoding.TextUnmarshaler
# but to use a custom type for time.Duration is not wise.
# So instead of 5s , we just use the 5 000 000 000 nanoseconds on WriteTimeOut.
WriteTimeout = 5000000000
MaxHeaderBytes = 8096
CheckForUpdates = true
DisablePathCorrection = false
EnablePathEscape = false
FireMethodNotAllowed = true
DisableBodyConsumptionOnUnmarshal = true
TimeFormat = "Mon, 01 Jan 2006 15:04:05 GMT"
Charset = "UTF-8"
Gzip = true
[Other]
# Indentation (tabs and/or spaces) is allowed but not required
MyServerName = "Iris.v6"
`
tomlFile.WriteString(tomlConfigurationContents)
filename := tomlFile.Name()
app := New(TOML(filename))
c := app.Config
if expected := "iris-go.com"; c.VHost != expected {
t.Fatalf("error on TestConfigurationTOML: Expected VHost %s but got %s", expected, c.VHost)
}
if expected := "https://"; c.VScheme != expected {
t.Fatalf("error on TestConfigurationTOML: Expected VScheme %s but got %s", expected, c.VScheme)
}
if expected := 0; c.ReadTimeout != time.Duration(expected) {
t.Fatalf("error on TestConfigurationTOML: Expected ReadTimeout %d but got %s", expected, c.ReadTimeout)
}
if expected := time.Duration(5 * time.Second); c.WriteTimeout != expected {
t.Fatalf("error on TestConfigurationTOML: Expected WriteTimeout %s but got %s", expected, c.WriteTimeout)
}
if expected := 8096; c.MaxHeaderBytes != expected {
t.Fatalf("error on TestConfigurationTOML: Expected MaxHeaderBytes %d but got %d", expected, c.MaxHeaderBytes)
}
if expected := true; c.CheckForUpdates != expected {
t.Fatalf("error on TestConfigurationTOML: Expected checkForUpdates %v but got %v", expected, c.CheckForUpdates)
}
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.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)
}
if expected := true; c.Gzip != expected {
t.Fatalf("error on TestConfigurationTOML: Expected != %v but got %v", expected, c.Gzip)
}
if expected := "Iris.v6"; c.Other["MyServerName"] != expected {
t.Fatalf("error on TestConfigurationTOML: Expected(Other) != %v but got %v", expected, c.Gzip)
}
}