forked from TrueCloudLab/frostfs-sdk-go
[#271] object: Add UserAttributes
method
Signed-off-by: Aleksey Savchuk <a.savchuk@yadro.com>
This commit is contained in:
parent
6009d089fc
commit
6821fe6fb2
2 changed files with 48 additions and 0 deletions
|
@ -3,7 +3,10 @@ package object
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"slices"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||||
v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
|
v2session "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
|
||||||
|
@ -312,6 +315,26 @@ func (o *Object) Attributes() []Attribute {
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UserAttributes returns object user attributes.
|
||||||
|
func (o *Object) UserAttributes() []Attribute {
|
||||||
|
attrs := (*object.Object)(o).
|
||||||
|
GetHeader().
|
||||||
|
GetAttributes()
|
||||||
|
|
||||||
|
res := make([]Attribute, 0, len(attrs))
|
||||||
|
|
||||||
|
for _, attr := range attrs {
|
||||||
|
key := attr.GetKey()
|
||||||
|
|
||||||
|
if !strings.HasPrefix(key, container.SysAttributePrefix) &&
|
||||||
|
!strings.HasPrefix(key, container.SysAttributePrefixNeoFS) {
|
||||||
|
res = append(res, *NewAttributeFromV2(&attr))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return slices.Clip(res)
|
||||||
|
}
|
||||||
|
|
||||||
// SetAttributes sets object attributes.
|
// SetAttributes sets object attributes.
|
||||||
func (o *Object) SetAttributes(v ...Attribute) {
|
func (o *Object) SetAttributes(v ...Attribute) {
|
||||||
attrs := make([]object.Attribute, len(v))
|
attrs := make([]object.Attribute, len(v))
|
||||||
|
|
|
@ -3,8 +3,10 @@ package object_test
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
v2container "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
|
||||||
cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
|
cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
|
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
|
||||||
|
objecttest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/test"
|
||||||
usertest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user/test"
|
usertest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user/test"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
@ -24,3 +26,26 @@ func TestInitCreation(t *testing.T) {
|
||||||
require.Equal(t, cnr, cID)
|
require.Equal(t, cnr, cID)
|
||||||
require.Equal(t, own, o.OwnerID())
|
require.Equal(t, own, o.OwnerID())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_Attributes(t *testing.T) {
|
||||||
|
obj := objecttest.Object()
|
||||||
|
|
||||||
|
t.Run("get user attributes", func(t *testing.T) {
|
||||||
|
// See how we create a test object. It's created with two attributes.
|
||||||
|
require.Len(t, obj.UserAttributes(), 2)
|
||||||
|
})
|
||||||
|
|
||||||
|
userAttrs := obj.UserAttributes()
|
||||||
|
|
||||||
|
sysAttr := *object.NewAttribute()
|
||||||
|
sysAttr.SetKey(v2container.SysAttributePrefix + "key")
|
||||||
|
sysAttr.SetValue("value")
|
||||||
|
|
||||||
|
attr := append(userAttrs, sysAttr)
|
||||||
|
obj.SetAttributes(attr...)
|
||||||
|
|
||||||
|
t.Run("get attributes", func(t *testing.T) {
|
||||||
|
require.ElementsMatch(t, obj.UserAttributes(), userAttrs)
|
||||||
|
require.ElementsMatch(t, obj.Attributes(), attr)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue