Merge 39006d3819a40b51bcb9360c7c3adb5f8e566016 into 490accf5d7d49138f0af806318826d92513b1395

This commit is contained in:
Saad 2024-05-07 13:12:32 +08:00 committed by GitHub
commit 7ecb6b882c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 28 additions and 10 deletions

6
fs.go
View File

@ -5,6 +5,7 @@
package gin
import (
"fmt"
"net/http"
"os"
)
@ -29,11 +30,12 @@ func Dir(root string, listDirectory bool) http.FileSystem {
return &onlyFilesFS{fs}
}
// Open conforms to http.Filesystem.
// Open opens a file excluding directories.
// It conforms to http.Filesystem.
func (fs onlyFilesFS) Open(name string) (http.File, error) {
f, err := fs.fs.Open(name)
if err != nil {
return nil, err
return nil, fmt.Errorf("failed to open file: %w", err)
}
return neuteredReaddirFile{f}, nil
}

14
mode.go
View File

@ -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.

View File

@ -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) {