github.com/TrueCloudLab/frostfs-api-go/v2@v2.0.0-20230228134343-196241c4e79a/object/attributes_test.go (about) 1 package object 2 3 import ( 4 "strconv" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestSetNotification(t *testing.T) { 11 o := new(Object) 12 13 var ni = NotificationInfo{ 14 epoch: 10, 15 topic: "test", 16 } 17 18 WriteNotificationInfo(o, ni) 19 20 var foundEpoch, foundTopic bool 21 22 for _, attr := range o.GetHeader().GetAttributes() { 23 switch key := attr.GetKey(); key { 24 case SysAttributeTickEpoch: 25 require.Equal(t, false, foundEpoch) 26 27 uEpoch, err := strconv.ParseUint(attr.GetValue(), 10, 64) 28 require.NoError(t, err) 29 30 require.Equal(t, ni.Epoch(), uEpoch) 31 foundEpoch = true 32 case SysAttributeTickTopic: 33 require.Equal(t, false, foundTopic) 34 require.Equal(t, ni.Topic(), attr.GetValue()) 35 foundTopic = true 36 } 37 } 38 39 require.Equal(t, true, foundEpoch && foundTopic) 40 } 41 42 func TestGetNotification(t *testing.T) { 43 o := new(Object) 44 45 attr := []Attribute{ 46 {SysAttributeTickEpoch, "10"}, 47 {SysAttributeTickTopic, "test"}, 48 } 49 50 h := new(Header) 51 h.SetAttributes(attr) 52 53 o.SetHeader(h) 54 55 t.Run("No error", func(t *testing.T) { 56 ni, err := GetNotificationInfo(o) 57 require.NoError(t, err) 58 59 require.Equal(t, uint64(10), ni.Epoch()) 60 require.Equal(t, "test", ni.Topic()) 61 }) 62 } 63 64 func TestIntegration(t *testing.T) { 65 o := new(Object) 66 67 var ( 68 ni1 = NotificationInfo{ 69 epoch: 10, 70 topic: "", 71 } 72 ni2 = NotificationInfo{ 73 epoch: 11, 74 topic: "test", 75 } 76 ) 77 78 WriteNotificationInfo(o, ni1) 79 WriteNotificationInfo(o, ni2) 80 81 t.Run("double set", func(t *testing.T) { 82 ni, err := GetNotificationInfo(o) 83 require.NoError(t, err) 84 85 require.Equal(t, ni2.epoch, ni.Epoch()) 86 require.Equal(t, ni2.topic, ni.Topic()) 87 require.Equal(t, 2, len(o.GetHeader().GetAttributes())) 88 }) 89 }