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  }