Skip to content

Commit

Permalink
fix serialization, added benchmark tests, updated next release docs
Browse files Browse the repository at this point in the history
  • Loading branch information
yusing committed Jan 26, 2025
1 parent 83ea19d commit bbc10cb
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 4 deletions.
3 changes: 3 additions & 0 deletions cmd/main_prof.go
Original file line number Diff line number Diff line change
Expand Up @@ -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))
}()
Expand Down
18 changes: 18 additions & 0 deletions internal/docker/label_test.go
Original file line number Diff line number Diff line change
@@ -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",
})
}
}
8 changes: 8 additions & 0 deletions internal/task/task_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
14 changes: 11 additions & 3 deletions internal/utils/serialization.go
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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()
Expand Down
49 changes: 49 additions & 0 deletions internal/utils/serialization_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"testing"

. "github.com/yusing/go-proxy/internal/utils/testing"
"gopkg.in/yaml.v3"
)

func TestDeserialize(t *testing.T) {
Expand Down Expand Up @@ -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)
Expand All @@ -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 {
Expand All @@ -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)
}
}
24 changes: 24 additions & 0 deletions internal/utils/strutils/split_join_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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, ','), ",")
}
}
8 changes: 7 additions & 1 deletion next-release.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
![{7829FA41-5733-4BAD-8183-CDF093CEC6F2}](https://github.com/user-attachments/assets/4bb371f4-6e4c-425c-89b2-b9e962bdd46f)
![{29A4608C-607F-43C9-A542-15EC6B9D024E}](https://github.com/user-attachments/assets/8469cfaf-dc37-4b6e-9f29-c44eea91bb82)
![{83118DF5-9D46-4D00-9CEF-C0F6C8D18C4B}](https://github.com/user-attachments/assets/856140f0-78bb-4a76-98f2-ad47544a3515)
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit bbc10cb

Please sign in to comment.