From f4ad97679ceae3cf7a42925d9666a73f2d0eb876 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Mur=C3=A9?= Date: Tue, 24 Sep 2024 14:09:36 +0200 Subject: [PATCH] delegation: add bench for the round-trip steps --- delegation/delegation_test.go | 4 +- delegation/schema_test.go | 89 ++++++++++++++++++++++++++++++++++- 2 files changed, 89 insertions(+), 4 deletions(-) diff --git a/delegation/delegation_test.go b/delegation/delegation_test.go index 9a2a6ad..b0de668 100644 --- a/delegation/delegation_test.go +++ b/delegation/delegation_test.go @@ -130,9 +130,7 @@ func TestConstructors(t *testing.T) { }) } -func privKey(t *testing.T, privKeyCfg string) crypto.PrivKey { - t.Helper() - +func privKey(t require.TestingT, privKeyCfg string) crypto.PrivKey { privKeyMar, err := crypto.ConfigDecodeKey(privKeyCfg) require.NoError(t, err) diff --git a/delegation/schema_test.go b/delegation/schema_test.go index 62274c5..6fbd158 100644 --- a/delegation/schema_test.go +++ b/delegation/schema_test.go @@ -30,7 +30,7 @@ func TestSchemaRoundTrip(t *testing.T) { // format: dagJson --> PayloadModel --> dagCbor --> PayloadModel --> dagJson // function: DecodeDagJson() Seal() Unseal() EncodeDagJson() - p1, err := delegation.FromDagJson([]byte(delegationJson)) + p1, err := delegation.FromDagJson(delegationJson) require.NoError(t, err) cborBytes, id, err := p1.Seal(privKey) @@ -88,3 +88,90 @@ func BenchmarkSchemaLoad(b *testing.B) { _, _ = ipld.LoadSchemaBytes(schemaBytes) } } + +func BenchmarkRoundTrip(b *testing.B) { + delegationJson := golden.Get(b, "new.dagjson") + privKey := privKey(b, issuerPrivKeyCfg) + + b.Run("via buffers", func(b *testing.B) { + p1, _ := delegation.FromDagJson(delegationJson) + cborBytes, _, _ := p1.Seal(privKey) + p2, _ := delegation.Unseal(cborBytes) + + b.ResetTimer() + + b.Run("FromDagJson", func(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _, _ = delegation.FromDagJson(delegationJson) + } + }) + + b.Run("Seal", func(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _, _, _ = p1.Seal(privKey) + } + }) + + b.Run("Unseal", func(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _, _ = delegation.Unseal(cborBytes) + } + }) + + b.Run("ToDagJson", func(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _, _ = p2.ToDagJson(privKey) + } + }) + }) + + b.Run("via streaming", func(b *testing.B) { + p1, _ := delegation.FromDagJsonReader(bytes.NewReader(delegationJson)) + cborBuf := &bytes.Buffer{} + _, _ = p1.SealWriter(cborBuf, privKey) + cborBytes := cborBuf.Bytes() + p2, _ := delegation.UnsealReader(bytes.NewReader(cborBytes)) + + b.ResetTimer() + + b.Run("FromDagJsonReader", func(b *testing.B) { + b.ReportAllocs() + reader := bytes.NewReader(delegationJson) + for i := 0; i < b.N; i++ { + _, _ = reader.Seek(0, 0) + _, _ = delegation.FromDagJsonReader(reader) + } + }) + + b.Run("SealWriter", func(b *testing.B) { + b.ReportAllocs() + buf := &bytes.Buffer{} + for i := 0; i < b.N; i++ { + buf.Reset() + _, _ = p1.SealWriter(buf, privKey) + } + }) + + b.Run("UnsealReader", func(b *testing.B) { + b.ReportAllocs() + reader := bytes.NewReader(cborBytes) + for i := 0; i < b.N; i++ { + _, _ = reader.Seek(0, 0) + _, _ = delegation.UnsealReader(reader) + } + }) + + b.Run("ToDagJsonReader", func(b *testing.B) { + b.ReportAllocs() + buf := &bytes.Buffer{} + for i := 0; i < b.N; i++ { + buf.Reset() + _ = p2.ToDagJsonWriter(buf, privKey) + } + }) + }) +}