package netmap import ( "math/big" "math/rand" "strconv" "testing" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" netmapcontract "github.com/nspcc-dev/neofs-contract/netmap" "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) switch i % 3 { case int(netmapcontract.OfflineState): expected[i].SetOffline() case int(netmapcontract.OnlineState): expected[i].SetOnline() } expected[i].SetPublicKey(pub) expected[i].SetAttribute("key", strconv.Itoa(i)) } items := make([]stackitem.Item, 4) for i := range items { data := expected[i].Marshal() var state int64 switch { case expected[i].IsOnline(): state = int64(netmapcontract.OnlineState) case expected[i].IsOffline(): state = int64(netmapcontract.OfflineState) } 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) }