Skip to content

Commit 7041036

Browse files
jwt: benchmark Parse (#2958)
``` $ benchstat <(go test ./jwt -run=NONE -bench=BenchmarkParse -count=10) goos: linux goarch: amd64 pkg: github.com/zalando/skipper/jwt cpu: Intel(R) Core(TM) i5-8350U CPU @ 1.70GHz │ /dev/fd/63 │ │ sec/op │ Parse-8 13.53µ ± 8% │ /dev/fd/63 │ │ B/op │ Parse-8 1.656Ki ± 0% │ /dev/fd/63 │ │ allocs/op │ Parse-8 40.00 ± 0% ``` Signed-off-by: Alexander Yastrebov <[email protected]>
1 parent 6c3386d commit 7041036

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

jwt/token_test.go

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"encoding/base64"
55
"encoding/json"
66
"reflect"
7+
"strings"
78
"testing"
89
)
910

@@ -57,10 +58,38 @@ func TestParse(t *testing.T) {
5758
}
5859
}
5960

60-
func marshalBase64JSON(t *testing.T, v interface{}) string {
61+
func marshalBase64JSON(tb testing.TB, v interface{}) string {
6162
d, err := json.Marshal(v)
6263
if err != nil {
63-
t.Fatalf("failed to marshal json: %v, %v", v, err)
64+
tb.Fatalf("failed to marshal json: %v, %v", v, err)
6465
}
6566
return base64.RawURLEncoding.EncodeToString(d)
6667
}
68+
69+
var parseSink *Token
70+
71+
func BenchmarkParse(b *testing.B) {
72+
claims := map[string]interface{}{
73+
"azp": strings.Repeat("z", 100),
74+
"exp": 1234567890,
75+
"aaaaaaaaaaaaaaaaaaaaaa": strings.Repeat("a", 40),
76+
"bbbbbbbbbbbbbbbbbbbbbb": strings.Repeat("b", 40),
77+
"cccccccccccccccccccccc": strings.Repeat("c", 40),
78+
"iat": 1234567890,
79+
"iss": "https://skipper.identity.example.org",
80+
"sub": "foo_bar-baz-qux",
81+
}
82+
83+
value := strings.Repeat("x", 64) + "." + marshalBase64JSON(b, claims) + "." + strings.Repeat("x", 128)
84+
85+
_, err := Parse(value)
86+
if err != nil {
87+
b.Fatal(err)
88+
}
89+
90+
b.ResetTimer()
91+
b.ReportAllocs()
92+
for i := 0; i < b.N; i++ {
93+
parseSink, _ = Parse(value)
94+
}
95+
}

0 commit comments

Comments
 (0)