git.frostfs.info/TrueCloudLab/frostfs-sdk-go@v0.0.0-20241022124111-5361f0ecebd3/eacl/filter_test.go (about) 1 package eacl 2 3 import ( 4 "strconv" 5 "testing" 6 7 v2acl "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func newObjectFilter(match Match, key, val string) *Filter { 12 return &Filter{ 13 from: HeaderFromObject, 14 key: filterKey{ 15 str: key, 16 }, 17 matcher: match, 18 value: staticStringer(val), 19 } 20 } 21 22 func TestFilter(t *testing.T) { 23 filter := newObjectFilter(MatchStringEqual, "some name", "200") 24 25 v2 := filter.ToV2() 26 require.NotNil(t, v2) 27 require.Equal(t, v2acl.HeaderTypeObject, v2.GetHeaderType()) 28 require.EqualValues(t, v2acl.MatchTypeStringEqual, v2.GetMatchType()) 29 require.Equal(t, filter.Key(), v2.GetKey()) 30 require.Equal(t, filter.Value(), v2.GetValue()) 31 32 newFilter := NewFilterFromV2(v2) 33 require.Equal(t, filter, newFilter) 34 35 t.Run("from nil v2 filter", func(t *testing.T) { 36 require.Equal(t, new(Filter), NewFilterFromV2(nil)) 37 }) 38 } 39 40 func TestFilterEncoding(t *testing.T) { 41 f := newObjectFilter(MatchStringEqual, "key", "value") 42 43 t.Run("binary", func(t *testing.T) { 44 data, err := f.Marshal() 45 require.NoError(t, err) 46 47 f2 := NewFilter() 48 require.NoError(t, f2.Unmarshal(data)) 49 50 require.Equal(t, f, f2) 51 }) 52 53 t.Run("json", func(t *testing.T) { 54 data, err := f.MarshalJSON() 55 require.NoError(t, err) 56 57 d2 := NewFilter() 58 require.NoError(t, d2.UnmarshalJSON(data)) 59 60 require.Equal(t, f, d2) 61 }) 62 } 63 64 func TestFilter_ToV2(t *testing.T) { 65 t.Run("nil", func(t *testing.T) { 66 var x *Filter 67 68 require.Nil(t, x.ToV2()) 69 }) 70 71 t.Run("default values", func(t *testing.T) { 72 filter := NewFilter() 73 74 // check initial values 75 require.Empty(t, filter.Key()) 76 require.Empty(t, filter.Value()) 77 require.Equal(t, HeaderTypeUnknown, filter.From()) 78 require.Equal(t, MatchUnknown, filter.Matcher()) 79 80 // convert to v2 message 81 filterV2 := filter.ToV2() 82 83 require.Empty(t, filterV2.GetKey()) 84 require.Empty(t, filterV2.GetValue()) 85 require.Equal(t, v2acl.HeaderTypeUnknown, filterV2.GetHeaderType()) 86 require.Equal(t, v2acl.MatchTypeUnknown, filterV2.GetMatchType()) 87 }) 88 89 t.Run("reserved types", func(t *testing.T) { 90 r := NewRecord() 91 for i := filterKeyType(1); i < fKeyObjLast; i++ { 92 r.addObjectReservedFilter(MatchStringEqual, i, staticStringer(strconv.FormatUint(uint64(i), 16))) 93 } 94 95 for i := range r.filters { 96 fv2 := r.filters[i].ToV2() 97 actual := NewFilterFromV2(fv2) 98 require.Equal(t, actual, &r.filters[i]) 99 } 100 }) 101 }