1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
package bench_test
import (
"bytes"
"encoding/json"
"testing"
"github.com/lestrrat-go/jwx/v2/internal/jwxtest"
"github.com/lestrrat-go/jwx/v2/jwk"
)
func runJSONBench(b *testing.B, privkey jwk.Key) {
b.Helper()
privkey.Set("mykey", "1234567890")
pubkey, err := jwk.PublicKeyOf(privkey)
if err != nil {
b.Fatal(err)
}
keytypes := []struct {
Name string
Key jwk.Key
}{
{Name: "PublicKey", Key: pubkey},
{Name: "PrivateKey", Key: privkey},
}
for _, keytype := range keytypes {
key := keytype.Key
b.Run(keytype.Name, func(b *testing.B) {
buf, _ := json.Marshal(key)
s := string(buf)
rdr := bytes.NewReader(buf)
testcases := []Case{
{
Name: "jwk.Parse",
Test: func(b *testing.B) error {
_, err := jwk.Parse(buf)
return err
},
},
{
Name: "jwk.ParseString",
SkipShort: true,
Test: func(b *testing.B) error {
_, err := jwk.ParseString(s)
return err
},
},
{
Name: "jwk.ParseReader",
SkipShort: true,
Pretest: func(b *testing.B) error {
_, err := rdr.Seek(0, 0)
return err
},
Test: func(b *testing.B) error {
_, err := jwk.ParseReader(rdr)
return err
},
},
{
Name: "json.Marshal",
Test: func(b *testing.B) error {
_, err := json.Marshal(key)
return err
},
},
}
for _, tc := range testcases {
tc.Run(b)
}
})
}
}
func BenchmarkJWK(b *testing.B) {
b.Run("Serialization", func(b *testing.B) {
b.Run("RSA", func(b *testing.B) {
rsakey, _ := jwxtest.GenerateRsaJwk()
runJSONBench(b, rsakey)
})
b.Run("EC", func(b *testing.B) {
eckey, _ := jwxtest.GenerateEcdsaJwk()
runJSONBench(b, eckey)
})
b.Run("Symmetric", func(b *testing.B) {
symkey, _ := jwxtest.GenerateSymmetricJwk()
runJSONBench(b, symkey)
})
})
}
|