diff --git a/bench/jwt_benchmark_test.go b/bench/jwt_benchmark_test.go index 6a8a4aae..6c9d1ada 100644 --- a/bench/jwt_benchmark_test.go +++ b/bench/jwt_benchmark_test.go @@ -8,6 +8,7 @@ import ( "github.com/lestrrat-go/jwx/internal/jwxtest" "github.com/lestrrat-go/jwx/jwa" + "github.com/lestrrat-go/jwx/jwk" "github.com/lestrrat-go/jwx/jwt" ) @@ -18,11 +19,46 @@ func BenchmarkJWT(b *testing.B) { if err != nil { b.Fatal(err) } + pubkey, err := jwk.PublicKeyOf(key) + if err != nil { + b.Fatal(err) + } t1 := jwt.New() t1.Set(jwt.IssuedAtKey, time.Now().Unix()) t1.Set(jwt.ExpirationKey, time.Now().Add(time.Hour).Unix()) + b.Run("Serialization", func(b *testing.B) { + b.Run("Compact", func(b *testing.B) { + testcases := []Case{ + { + Name: "jwt.Sign", + Test: func(b *testing.B) error { + _, err := jwt.Sign(t1, alg, key) + return err + }, + }, + } + for _, tc := range testcases { + tc.Run(b) + } + }) + b.Run("JSON", func(b *testing.B) { + testcases := []Case{ + { + Name: "json.Marshal", + Test: func(b *testing.B) error { + _, err := json.Marshal(t1) + return err + }, + }, + } + for _, tc := range testcases { + tc.Run(b) + } + }) + }) + b.Run("Serialization", func(b *testing.B) { signedBuf, err := jwt.Sign(t1, alg, key) if err != nil { @@ -35,20 +71,20 @@ func BenchmarkJWT(b *testing.B) { jsonString := string(jsonBuf) jsonReader := bytes.NewReader(jsonBuf) - b.Run("Sign", func(b *testing.B) { + b.Run("Compact (With Verify)", func(b *testing.B) { testcases := []Case{ { Name: "jwt.ParseString", SkipShort: true, Test: func(b *testing.B) error { - _, err := jwt.ParseString(signedString) + _, err := jwt.ParseString(signedString, jwt.WithVerify(alg, pubkey)) return err }, }, { Name: "jwt.Parse", Test: func(b *testing.B) error { - _, err := jwt.Parse(signedBuf) + _, err := jwt.Parse(signedBuf, jwt.WithVerify(alg, pubkey)) return err }, }, @@ -60,14 +96,41 @@ func BenchmarkJWT(b *testing.B) { return err }, Test: func(b *testing.B) error { - _, err := jwt.ParseReader(signedReader) + _, err := jwt.ParseReader(signedReader, jwt.WithVerify(alg, pubkey)) return err }, }, + } + for _, tc := range testcases { + tc.Run(b) + } + }) + b.Run("Compact (No Verify)", func(b *testing.B) { + testcases := []Case{ { - Name: "jwt.Sign", + Name: "jwt.ParseString", + SkipShort: true, Test: func(b *testing.B) error { - _, err := jwt.Sign(t1, alg, key) + _, err := jwt.ParseString(signedString) + return err + }, + }, + { + Name: "jwt.Parse", + Test: func(b *testing.B) error { + _, err := jwt.Parse(signedBuf) + return err + }, + }, + { + Name: "jwt.ParseReader", + SkipShort: true, + Pretest: func(b *testing.B) error { + _, err := signedReader.Seek(0, 0) + return err + }, + Test: func(b *testing.B) error { + _, err := jwt.ParseReader(signedReader) return err }, }, @@ -112,13 +175,6 @@ func BenchmarkJWT(b *testing.B) { return json.Unmarshal(jsonBuf, &v) }, }, - { - Name: "json.Marshal", - Test: func(b *testing.B) error { - _, err := json.Marshal(t1) - return err - }, - }, } for _, tc := range testcases { tc.Run(b)