package netmap import ( "math/big" "math/rand" "strconv" "testing" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" "github.com/nspcc-dev/neofs-sdk-go/netmap" "github.com/stretchr/testify/require" ) func Test_stackItemsToNodeInfos(t *testing.T) { expected := make([]netmap.NodeInfo, 4) for i := range expected { pub := make([]byte, 33) rand.Read(pub) expected[i].SetState(netmap.NodeState(i % 3)) expected[i].SetPublicKey(pub) var attr netmap.NodeAttribute attr.SetKey("key") attr.SetValue(strconv.Itoa(i)) expected[i].SetAttributes(attr) } items := make([]stackitem.Item, 4) for i := range items { data, err := expected[i].Marshal() require.NoError(t, err) state := int64(expected[i].State()) if state != 0 { // In contract online=1, offline=2, in API it is the other way. state = 3 - state } items[i] = stackitem.NewStruct([]stackitem.Item{ stackitem.NewStruct([]stackitem.Item{ stackitem.NewByteArray(data), }), stackitem.NewBigInteger(big.NewInt(state)), }) } actual, err := nodeInfosFromStackItems([]stackitem.Item{stackitem.NewArray(items)}, "") require.NoError(t, err) require.Equal(t, expected, actual) }