mirror of
https://github.com/gin-gonic/gin.git
synced 2025-10-15 21:06:39 +08:00
SetMode panics when an unknown mode is provided,now it will return an error instead of panic , allowing the caller to decide how to handle it
This commit is contained in:
parent
9ea47029d3
commit
39006d3819
14
mode.go
14
mode.go
@ -6,6 +6,7 @@ package gin
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
@ -53,8 +54,16 @@ func init() {
|
|||||||
SetMode(mode)
|
SetMode(mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
mode := os.Getenv(EnvGinMode)
|
||||||
|
err := SetMode(mode)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// SetMode sets gin mode according to input string.
|
// SetMode sets gin mode according to input string.
|
||||||
func SetMode(value string) {
|
func SetMode(value string) error {
|
||||||
if value == "" {
|
if value == "" {
|
||||||
if flag.Lookup("test.v") != nil {
|
if flag.Lookup("test.v") != nil {
|
||||||
value = TestMode
|
value = TestMode
|
||||||
@ -71,10 +80,11 @@ func SetMode(value string) {
|
|||||||
case TestMode:
|
case TestMode:
|
||||||
ginMode = testCode
|
ginMode = testCode
|
||||||
default:
|
default:
|
||||||
panic("gin mode unknown: " + value + " (available mode: debug release test)")
|
return fmt.Errorf("gin mode unknown: %s (available mode: debug release test)", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
modeName = value
|
modeName = value
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// DisableBindValidation closes the default validator.
|
// DisableBindValidation closes the default validator.
|
||||||
|
18
mode_test.go
18
mode_test.go
@ -22,30 +22,36 @@ func TestSetMode(t *testing.T) {
|
|||||||
assert.Equal(t, TestMode, Mode())
|
assert.Equal(t, TestMode, Mode())
|
||||||
os.Unsetenv(EnvGinMode)
|
os.Unsetenv(EnvGinMode)
|
||||||
|
|
||||||
SetMode("")
|
err := SetMode("")
|
||||||
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, testCode, ginMode)
|
assert.Equal(t, testCode, ginMode)
|
||||||
assert.Equal(t, TestMode, Mode())
|
assert.Equal(t, TestMode, Mode())
|
||||||
|
|
||||||
tmp := flag.CommandLine
|
tmp := flag.CommandLine
|
||||||
flag.CommandLine = flag.NewFlagSet("", flag.ContinueOnError)
|
flag.CommandLine = flag.NewFlagSet("", flag.ContinueOnError)
|
||||||
SetMode("")
|
err = SetMode("")
|
||||||
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, debugCode, ginMode)
|
assert.Equal(t, debugCode, ginMode)
|
||||||
assert.Equal(t, DebugMode, Mode())
|
assert.Equal(t, DebugMode, Mode())
|
||||||
flag.CommandLine = tmp
|
flag.CommandLine = tmp
|
||||||
|
|
||||||
SetMode(DebugMode)
|
err = SetMode(DebugMode)
|
||||||
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, debugCode, ginMode)
|
assert.Equal(t, debugCode, ginMode)
|
||||||
assert.Equal(t, DebugMode, Mode())
|
assert.Equal(t, DebugMode, Mode())
|
||||||
|
|
||||||
SetMode(ReleaseMode)
|
err = SetMode(ReleaseMode)
|
||||||
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, releaseCode, ginMode)
|
assert.Equal(t, releaseCode, ginMode)
|
||||||
assert.Equal(t, ReleaseMode, Mode())
|
assert.Equal(t, ReleaseMode, Mode())
|
||||||
|
|
||||||
SetMode(TestMode)
|
err = SetMode(TestMode)
|
||||||
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, testCode, ginMode)
|
assert.Equal(t, testCode, ginMode)
|
||||||
assert.Equal(t, TestMode, Mode())
|
assert.Equal(t, TestMode, Mode())
|
||||||
|
|
||||||
assert.Panics(t, func() { SetMode("unknown") })
|
err = SetMode("unknown")
|
||||||
|
assert.Error(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDisableBindValidation(t *testing.T) {
|
func TestDisableBindValidation(t *testing.T) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user