package netmap import ( "crypto/rand" "math/big" "strconv" "testing" netmapcontract "git.frostfs.info/TrueCloudLab/frostfs-contract/netmap" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" "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].SetStatus(netmap.Offline) case int(netmapcontract.NodeStateOnline): expected[i].SetStatus(netmap.Online) case int(netmapcontract.NodeStateMaintenance): expected[i].SetStatus(netmap.Maintenance) } 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 expected[i].Status() { case netmap.Online: state = int64(netmapcontract.NodeStateOnline) case netmap.Offline: state = int64(netmapcontract.NodeStateOffline) case netmap.Maintenance: 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) }