mirror of
https://github.com/gin-gonic/gin.git
synced 2025-10-15 04:57:07 +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 (
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
|
||||
@ -53,8 +54,16 @@ func init() {
|
||||
SetMode(mode)
|
||||
}
|
||||
|
||||
func init() {
|
||||
mode := os.Getenv(EnvGinMode)
|
||||
err := SetMode(mode)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
// SetMode sets gin mode according to input string.
|
||||
func SetMode(value string) {
|
||||
func SetMode(value string) error {
|
||||
if value == "" {
|
||||
if flag.Lookup("test.v") != nil {
|
||||
value = TestMode
|
||||
@ -71,10 +80,11 @@ func SetMode(value string) {
|
||||
case TestMode:
|
||||
ginMode = testCode
|
||||
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
|
||||
return nil
|
||||
}
|
||||
|
||||
// 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())
|
||||
os.Unsetenv(EnvGinMode)
|
||||
|
||||
SetMode("")
|
||||
err := SetMode("")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, testCode, ginMode)
|
||||
assert.Equal(t, TestMode, Mode())
|
||||
|
||||
tmp := flag.CommandLine
|
||||
flag.CommandLine = flag.NewFlagSet("", flag.ContinueOnError)
|
||||
SetMode("")
|
||||
err = SetMode("")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, debugCode, ginMode)
|
||||
assert.Equal(t, DebugMode, Mode())
|
||||
flag.CommandLine = tmp
|
||||
|
||||
SetMode(DebugMode)
|
||||
err = SetMode(DebugMode)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, debugCode, ginMode)
|
||||
assert.Equal(t, DebugMode, Mode())
|
||||
|
||||
SetMode(ReleaseMode)
|
||||
err = SetMode(ReleaseMode)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, releaseCode, ginMode)
|
||||
assert.Equal(t, ReleaseMode, Mode())
|
||||
|
||||
SetMode(TestMode)
|
||||
err = SetMode(TestMode)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, testCode, ginMode)
|
||||
assert.Equal(t, TestMode, Mode())
|
||||
|
||||
assert.Panics(t, func() { SetMode("unknown") })
|
||||
err = SetMode("unknown")
|
||||
assert.Error(t, err)
|
||||
}
|
||||
|
||||
func TestDisableBindValidation(t *testing.T) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user