frostfs-api-go/object/attributes_test.go
Evgenii Stratonikov fadd47f4fb [#376] object: remove pointer from Attribute slice
```
name                           old time/op    new time/op    delta
AttributesMarshal/marshal-8      4.44µs ± 9%    2.72µs ± 0%  -38.79%  (p=0.000 n=10+9)
AttributesMarshal/unmarshal-8    3.16µs ±13%    0.55µs ± 4%  -82.60%  (p=0.000 n=10+10)

name                           old alloc/op   new alloc/op   delta
AttributesMarshal/marshal-8      4.42kB ± 0%    4.42kB ± 0%     ~     (all equal)
AttributesMarshal/unmarshal-8    2.02kB ± 0%    1.79kB ± 0%  -11.11%  (p=0.000 n=10+10)

name                           old allocs/op  new allocs/op  delta
AttributesMarshal/marshal-8        51.0 ± 0%      51.0 ± 0%     ~     (all equal)
AttributesMarshal/unmarshal-8      51.0 ± 0%       1.0 ± 0%  -98.04%  (p=0.000 n=10+10)
```

Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
2022-03-09 15:23:13 +03:00

89 lines
1.7 KiB
Go

package object
import (
"strconv"
"testing"
"github.com/stretchr/testify/require"
)
func TestSetNotification(t *testing.T) {
o := new(Object)
var ni = NotificationInfo{
epoch: 10,
topic: "test",
}
WriteNotificationInfo(o, ni)
var foundEpoch, foundTopic bool
for _, attr := range o.GetHeader().GetAttributes() {
switch key := attr.GetKey(); key {
case SysAttributeTickEpoch:
require.Equal(t, false, foundEpoch)
uEpoch, err := strconv.ParseUint(attr.GetValue(), 10, 64)
require.NoError(t, err)
require.Equal(t, ni.Epoch(), uEpoch)
foundEpoch = true
case SysAttributeTickTopic:
require.Equal(t, false, foundTopic)
require.Equal(t, ni.Topic(), attr.GetValue())
foundTopic = true
}
}
require.Equal(t, true, foundEpoch && foundTopic)
}
func TestGetNotification(t *testing.T) {
o := new(Object)
attr := []Attribute{
{SysAttributeTickEpoch, "10"},
{SysAttributeTickTopic, "test"},
}
h := new(Header)
h.SetAttributes(attr)
o.SetHeader(h)
t.Run("No error", func(t *testing.T) {
ni, err := GetNotificationInfo(o)
require.NoError(t, err)
require.Equal(t, uint64(10), ni.Epoch())
require.Equal(t, "test", ni.Topic())
})
}
func TestIntegration(t *testing.T) {
o := new(Object)
var (
ni1 = NotificationInfo{
epoch: 10,
topic: "",
}
ni2 = NotificationInfo{
epoch: 11,
topic: "test",
}
)
WriteNotificationInfo(o, ni1)
WriteNotificationInfo(o, ni2)
t.Run("double set", func(t *testing.T) {
ni, err := GetNotificationInfo(o)
require.NoError(t, err)
require.Equal(t, ni2.epoch, ni.Epoch())
require.Equal(t, ni2.topic, ni.Topic())
require.Equal(t, 2, len(o.GetHeader().GetAttributes()))
})
}