git.frostfs.info/TrueCloudLab/frostfs-sdk-go@v0.0.0-20241022124111-5361f0ecebd3/eacl/test/benchmark_test.go (about) 1 package eacltest 2 3 import ( 4 "bytes" 5 "crypto/rand" 6 "testing" 7 8 cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" 9 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/eacl" 10 versiontest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/version/test" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func baseBenchmarkTableBinaryComparison(b *testing.B, factor int) { 15 t := TableN(factor) 16 exp, err := t.Marshal() 17 require.NoError(b, err) 18 19 b.StopTimer() 20 b.ResetTimer() 21 b.StartTimer() 22 for range b.N { 23 got, _ := t.Marshal() 24 if !bytes.Equal(exp, got) { 25 b.Fail() 26 } 27 } 28 } 29 30 func baseBenchmarkTableEqualsComparison(b *testing.B, factor int) { 31 t := TableN(factor) 32 data, err := t.Marshal() 33 require.NoError(b, err) 34 t2 := eacl.NewTable() 35 err = t2.Unmarshal(data) 36 require.NoError(b, err) 37 38 b.StopTimer() 39 b.ResetTimer() 40 b.StartTimer() 41 for range b.N { 42 if !eacl.EqualTables(*t, *t2) { 43 b.Fail() 44 } 45 } 46 } 47 48 func BenchmarkTableBinaryComparison(b *testing.B) { 49 baseBenchmarkTableBinaryComparison(b, 1) 50 } 51 52 func BenchmarkTableEqualsComparison(b *testing.B) { 53 baseBenchmarkTableEqualsComparison(b, 1) 54 } 55 56 func BenchmarkTableBinaryComparison10(b *testing.B) { 57 baseBenchmarkTableBinaryComparison(b, 10) 58 } 59 60 func BenchmarkTableEqualsComparison10(b *testing.B) { 61 baseBenchmarkTableEqualsComparison(b, 10) 62 } 63 64 func BenchmarkTableBinaryComparison100(b *testing.B) { 65 baseBenchmarkTableBinaryComparison(b, 100) 66 } 67 68 func BenchmarkTableEqualsComparison100(b *testing.B) { 69 baseBenchmarkTableEqualsComparison(b, 100) 70 } 71 72 // Target returns random eacl.Target. 73 func TargetN(n int) *eacl.Target { 74 x := eacl.NewTarget() 75 76 x.SetRole(eacl.RoleSystem) 77 keys := make([][]byte, n) 78 79 for i := range n { 80 keys[i] = make([]byte, 32) 81 rand.Read(keys[i]) 82 } 83 84 x.SetBinaryKeys(keys) 85 86 return x 87 } 88 89 // Record returns random eacl.Record. 90 func RecordN(n int) *eacl.Record { 91 x := eacl.NewRecord() 92 93 x.SetAction(eacl.ActionAllow) 94 x.SetOperation(eacl.OperationRangeHash) 95 x.SetTargets(*TargetN(n)) 96 97 for range n { 98 x.AddFilter(eacl.HeaderFromObject, eacl.MatchStringEqual, "", cidtest.ID().EncodeToString()) 99 } 100 101 return x 102 } 103 104 func TableN(n int) *eacl.Table { 105 x := eacl.NewTable() 106 107 x.SetCID(cidtest.ID()) 108 109 for range n { 110 x.AddRecord(RecordN(n)) 111 } 112 113 x.SetVersion(versiontest.Version()) 114 115 return x 116 }