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  }