mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-19 20:32:35 +02:00
fix serialization, added benchmark tests, updated next release docs
This commit is contained in:
parent
83ea19dd92
commit
bbc10cb105
7 changed files with 120 additions and 4 deletions
|
@ -7,10 +7,13 @@ import (
|
|||
"net/http"
|
||||
_ "net/http/pprof"
|
||||
"runtime"
|
||||
"runtime/debug"
|
||||
)
|
||||
|
||||
func initProfiling() {
|
||||
runtime.GOMAXPROCS(2)
|
||||
debug.SetMemoryLimit(100 * 1024 * 1024)
|
||||
debug.SetMaxStack(15 * 1024 * 1024)
|
||||
go func() {
|
||||
log.Println(http.ListenAndServe(":7777", nil))
|
||||
}()
|
||||
|
|
18
internal/docker/label_test.go
Normal file
18
internal/docker/label_test.go
Normal file
|
@ -0,0 +1,18 @@
|
|||
package docker_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/yusing/go-proxy/internal/docker"
|
||||
)
|
||||
|
||||
func BenchmarkParseLabels(b *testing.B) {
|
||||
for range b.N {
|
||||
_, _ = docker.ParseLabels(map[string]string{
|
||||
"proxy.a.host": "localhost",
|
||||
"proxy.a.port": "4444",
|
||||
"proxy.a.scheme": "http",
|
||||
"proxy.a.middlewares.request.hide_headers": "X-Header1,X-Header2",
|
||||
})
|
||||
}
|
||||
}
|
|
@ -111,3 +111,11 @@ func TestFinishMultipleCalls(t *testing.T) {
|
|||
}
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
func BenchmarkTasks(b *testing.B) {
|
||||
for range b.N {
|
||||
task := testTask()
|
||||
task.Subtask("", true).Finish(nil)
|
||||
task.Finish(nil)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -204,8 +204,13 @@ func Deserialize(src SerializedObject, dst any) E.Error {
|
|||
}
|
||||
if hasValidateTag {
|
||||
errs.Add(ValidateWithFieldTags(dstV.Interface()))
|
||||
} else if validator, ok := dstV.Addr().Interface().(CustomValidator); ok {
|
||||
errs.Add(validator.Validate())
|
||||
} else {
|
||||
if dstV.CanAddr() {
|
||||
dstV = dstV.Addr()
|
||||
}
|
||||
if validator, ok := dstV.Interface().(CustomValidator); ok {
|
||||
errs.Add(validator.Validate())
|
||||
}
|
||||
}
|
||||
return errs.Error()
|
||||
case reflect.Map:
|
||||
|
@ -222,7 +227,10 @@ func Deserialize(src SerializedObject, dst any) E.Error {
|
|||
errs.Add(err.Subject(k))
|
||||
}
|
||||
}
|
||||
if validator, ok := dstV.Addr().Interface().(CustomValidator); ok {
|
||||
if dstV.CanAddr() {
|
||||
dstV = dstV.Addr()
|
||||
}
|
||||
if validator, ok := dstV.Interface().(CustomValidator); ok {
|
||||
errs.Add(validator.Validate())
|
||||
}
|
||||
return errs.Error()
|
||||
|
|
|
@ -6,6 +6,7 @@ import (
|
|||
"testing"
|
||||
|
||||
. "github.com/yusing/go-proxy/internal/utils/testing"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
func TestDeserialize(t *testing.T) {
|
||||
|
@ -187,6 +188,20 @@ func TestStringToSlice(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func BenchmarkStringToSlice(b *testing.B) {
|
||||
for range b.N {
|
||||
dst := make([]int, 0)
|
||||
_, _ = ConvertString("- 1\n- 2\n- 3", reflect.ValueOf(&dst))
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkStringToSliceYAML(b *testing.B) {
|
||||
for range b.N {
|
||||
dst := make([]int, 0)
|
||||
_ = yaml.Unmarshal([]byte("- 1\n- 2\n- 3"), &dst)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStringToMap(t *testing.T) {
|
||||
t.Run("yaml-like", func(t *testing.T) {
|
||||
dst := make(map[string]string)
|
||||
|
@ -197,6 +212,20 @@ func TestStringToMap(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func BenchmarkStringToMap(b *testing.B) {
|
||||
for range b.N {
|
||||
dst := make(map[string]string)
|
||||
_, _ = ConvertString(" a: b\n c: d", reflect.ValueOf(&dst))
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkStringToMapYAML(b *testing.B) {
|
||||
for range b.N {
|
||||
dst := make(map[string]string)
|
||||
_ = yaml.Unmarshal([]byte(" a: b\n c: d"), &dst)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStringToStruct(t *testing.T) {
|
||||
t.Run("yaml-like", func(t *testing.T) {
|
||||
dst := struct {
|
||||
|
@ -212,3 +241,23 @@ func TestStringToStruct(t *testing.T) {
|
|||
}{"a", 123})
|
||||
})
|
||||
}
|
||||
|
||||
func BenchmarkStringToStruct(b *testing.B) {
|
||||
for range b.N {
|
||||
dst := struct {
|
||||
A string `json:"a"`
|
||||
B int `json:"b"`
|
||||
}{}
|
||||
_, _ = ConvertString(" a: a\n b: 123", reflect.ValueOf(&dst))
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkStringToStructYAML(b *testing.B) {
|
||||
for range b.N {
|
||||
dst := struct {
|
||||
A string `yaml:"a"`
|
||||
B int `yaml:"b"`
|
||||
}{}
|
||||
_ = yaml.Unmarshal([]byte(" a: a\n b: 123"), &dst)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,3 +36,27 @@ func TestSplit(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkSplitRune(b *testing.B) {
|
||||
for range b.N {
|
||||
SplitRune(alphaNumeric, ',')
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkSplitRuneStdlib(b *testing.B) {
|
||||
for range b.N {
|
||||
strings.Split(alphaNumeric, ",")
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkJoinRune(b *testing.B) {
|
||||
for range b.N {
|
||||
JoinRune(SplitRune(alphaNumeric, ','), ',')
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkJoinRuneStdlib(b *testing.B) {
|
||||
for range b.N {
|
||||
strings.Join(SplitRune(alphaNumeric, ','), ",")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ GoDoxy v0.9.0 expected changes
|
|||
- Edit dashboard app config (e.g. icon, name, category, etc.)
|
||||
- Toggle show / hide apps
|
||||
- Health bubbles, latency, etc. rich info on dashboard items
|
||||
- UI config editor
|
||||

|
||||

|
||||

|
||||
|
@ -99,14 +100,19 @@ GoDoxy v0.9.0 expected changes
|
|||
- `GODOXY_OIDC_REDIRECT_URL`
|
||||
- `GODOXY_OIDC_SCOPES` _(optional)_
|
||||
- `GODOXY_OIDC_ALLOWED_USERS`
|
||||
- `GODOXY_OIDC_ALLOWED_GROUPS` _(optional)_
|
||||
|
||||
- Use OpenID Connect to authenticate GoDoxy's WebUI and all your services (SSO)
|
||||
|
||||
```yaml
|
||||
# default
|
||||
# default
|
||||
proxy.app.middlewares.oidc:
|
||||
|
||||
# override allowed users
|
||||
proxy.app.middlewares.oidc.allowed_users: user1, user2
|
||||
|
||||
# override allowed groups
|
||||
proxy.app.middlewares.oidc.allowed_groups: group1, group2
|
||||
```
|
||||
|
||||
- Caddyfile like rules
|
||||
|
|
Loading…
Add table
Reference in a new issue