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 { default: expected[i].SetOffline() case int(netmapcontract.NodeStateOnline): expected[i].SetOnline() case int(netmapcontract.NodeStateMaintenance): expected[i].SetMaintenance() } 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.NodeStateOnline) case expected[i].IsOffline(): state = int64(netmapcontract.NodeStateOffline) case expected[i].IsMaintenance(): state = int64(netmapcontract.NodeStateMaintenance) } items[i] = stackitem.NewStruct([]stackitem.Item{ stackitem.NewByteArray(data), stackitem.NewBigInteger(big.NewInt(state)), }) } actual, err := decodeNodeList(stackitem.NewArray(items)) require.NoError(t, err) require.Equal(t, expected, actual) }