git.frostfs.info/TrueCloudLab/frostfs-sdk-go@v0.0.0-20241022124111-5361f0ecebd3/eacl/table_test.go (about) 1 package eacl_test 2 3 import ( 4 "crypto/sha256" 5 "testing" 6 7 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs" 8 cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" 9 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/eacl" 10 eacltest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/eacl/test" 11 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/version" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func TestTable(t *testing.T) { 16 var v version.Version 17 18 sha := sha256.Sum256([]byte("container id")) 19 id := cidtest.IDWithChecksum(sha) 20 21 v.SetMajor(3) 22 v.SetMinor(2) 23 24 table := eacl.NewTable() 25 table.SetVersion(v) 26 table.SetCID(id) 27 table.AddRecord(eacl.CreateRecord(eacl.ActionAllow, eacl.OperationPut)) 28 29 v2 := table.ToV2() 30 require.NotNil(t, v2) 31 require.Equal(t, uint32(3), v2.GetVersion().GetMajor()) 32 require.Equal(t, uint32(2), v2.GetVersion().GetMinor()) 33 require.Equal(t, sha[:], v2.GetContainerID().GetValue()) 34 require.Len(t, v2.GetRecords(), 1) 35 36 newTable := eacl.NewTableFromV2(v2) 37 require.Equal(t, table, newTable) 38 39 t.Run("new from nil v2 table", func(t *testing.T) { 40 require.Equal(t, new(eacl.Table), eacl.NewTableFromV2(nil)) 41 }) 42 43 t.Run("create table", func(t *testing.T) { 44 id := cidtest.ID() 45 46 table := eacl.CreateTable(id) 47 cID, set := table.CID() 48 require.True(t, set) 49 require.Equal(t, id, cID) 50 require.Equal(t, version.Current(), table.Version()) 51 }) 52 } 53 54 func TestTable_AddRecord(t *testing.T) { 55 records := []eacl.Record{ 56 *eacl.CreateRecord(eacl.ActionDeny, eacl.OperationDelete), 57 *eacl.CreateRecord(eacl.ActionAllow, eacl.OperationPut), 58 } 59 60 table := eacl.NewTable() 61 for _, record := range records { 62 table.AddRecord(&record) 63 } 64 65 require.Equal(t, records, table.Records()) 66 } 67 68 func TestTableEncoding(t *testing.T) { 69 tab := eacltest.Table() 70 71 t.Run("binary", func(t *testing.T) { 72 data, err := tab.Marshal() 73 require.NoError(t, err) 74 75 tab2 := eacl.NewTable() 76 require.NoError(t, tab2.Unmarshal(data)) 77 78 // FIXME: we compare v2 messages because 79 // Filter contains fmt.Stringer interface 80 require.Equal(t, tab.ToV2(), tab2.ToV2()) 81 }) 82 83 t.Run("json", func(t *testing.T) { 84 data, err := tab.MarshalJSON() 85 require.NoError(t, err) 86 87 tab2 := eacl.NewTable() 88 require.NoError(t, tab2.UnmarshalJSON(data)) 89 90 require.Equal(t, tab.ToV2(), tab2.ToV2()) 91 }) 92 } 93 94 func TestTable_ToV2(t *testing.T) { 95 t.Run("nil", func(t *testing.T) { 96 var x *eacl.Table 97 98 require.Nil(t, x.ToV2()) 99 }) 100 101 t.Run("default values", func(t *testing.T) { 102 table := eacl.NewTable() 103 104 // check initial values 105 require.Equal(t, version.Current(), table.Version()) 106 require.Nil(t, table.Records()) 107 _, set := table.CID() 108 require.False(t, set) 109 110 // convert to v2 message 111 tableV2 := table.ToV2() 112 113 var verV2 refs.Version 114 version.Current().WriteToV2(&verV2) 115 require.Equal(t, verV2, *tableV2.GetVersion()) 116 require.Nil(t, tableV2.GetRecords()) 117 require.Nil(t, tableV2.GetContainerID()) 118 }) 119 }