forked from TrueCloudLab/frostfs-node
[#971] morph/event: Change notification parser's signature
Parsers should have original notification structure to be able to construct internal event structure that contains necessary for unique nonce calculation information. So notification parsers take raw notification structure instead of slice of stack items. Signed-off-by: Pavel Karpy <carpawell@nspcc.ru>
This commit is contained in:
parent
3666ae7ad2
commit
c167ae26f9
35 changed files with 365 additions and 203 deletions
|
@ -3,8 +3,9 @@ package balance
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/util"
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
)
|
)
|
||||||
|
@ -37,12 +38,17 @@ func (l Lock) Amount() int64 { return l.amount }
|
||||||
func (l Lock) Until() int64 { return l.until }
|
func (l Lock) Until() int64 { return l.until }
|
||||||
|
|
||||||
// ParseLock from notification into lock structure.
|
// ParseLock from notification into lock structure.
|
||||||
func ParseLock(params []stackitem.Item) (event.Event, error) {
|
func ParseLock(e *subscriptions.NotificationEvent) (event.Event, error) {
|
||||||
var (
|
var (
|
||||||
ev Lock
|
ev Lock
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
|
params, err := event.ParseStackArray(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not parse stack items from notify event: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
if ln := len(params); ln != 5 {
|
if ln := len(params); ln != 5 {
|
||||||
return nil, event.WrongNumberOfParameters(5, ln)
|
return nil, event.WrongNumberOfParameters(5, ln)
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,8 @@ import (
|
||||||
"math/big"
|
"math/big"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/core/state"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/util"
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
|
@ -26,68 +28,68 @@ func TestParseLock(t *testing.T) {
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := ParseLock(prms)
|
_, err := ParseLock(createNotifyEventFromItems(prms))
|
||||||
require.EqualError(t, err, event.WrongNumberOfParameters(5, len(prms)).Error())
|
require.EqualError(t, err, event.WrongNumberOfParameters(5, len(prms)).Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong id parameter", func(t *testing.T) {
|
t.Run("wrong id parameter", func(t *testing.T) {
|
||||||
_, err := ParseLock([]stackitem.Item{
|
_, err := ParseLock(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong from parameter", func(t *testing.T) {
|
t.Run("wrong from parameter", func(t *testing.T) {
|
||||||
_, err := ParseLock([]stackitem.Item{
|
_, err := ParseLock(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(id),
|
stackitem.NewByteArray(id),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong lock parameter", func(t *testing.T) {
|
t.Run("wrong lock parameter", func(t *testing.T) {
|
||||||
_, err := ParseLock([]stackitem.Item{
|
_, err := ParseLock(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(id),
|
stackitem.NewByteArray(id),
|
||||||
stackitem.NewByteArray(user.BytesBE()),
|
stackitem.NewByteArray(user.BytesBE()),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong amount parameter", func(t *testing.T) {
|
t.Run("wrong amount parameter", func(t *testing.T) {
|
||||||
_, err := ParseLock([]stackitem.Item{
|
_, err := ParseLock(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(id),
|
stackitem.NewByteArray(id),
|
||||||
stackitem.NewByteArray(user.BytesBE()),
|
stackitem.NewByteArray(user.BytesBE()),
|
||||||
stackitem.NewByteArray(lock.BytesBE()),
|
stackitem.NewByteArray(lock.BytesBE()),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong until parameter", func(t *testing.T) {
|
t.Run("wrong until parameter", func(t *testing.T) {
|
||||||
_, err := ParseLock([]stackitem.Item{
|
_, err := ParseLock(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(id),
|
stackitem.NewByteArray(id),
|
||||||
stackitem.NewByteArray(user.BytesBE()),
|
stackitem.NewByteArray(user.BytesBE()),
|
||||||
stackitem.NewByteArray(lock.BytesBE()),
|
stackitem.NewByteArray(lock.BytesBE()),
|
||||||
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("correct behavior", func(t *testing.T) {
|
t.Run("correct behavior", func(t *testing.T) {
|
||||||
ev, err := ParseLock([]stackitem.Item{
|
ev, err := ParseLock(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(id),
|
stackitem.NewByteArray(id),
|
||||||
stackitem.NewByteArray(user.BytesBE()),
|
stackitem.NewByteArray(user.BytesBE()),
|
||||||
stackitem.NewByteArray(lock.BytesBE()),
|
stackitem.NewByteArray(lock.BytesBE()),
|
||||||
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
||||||
stackitem.NewBigInteger(new(big.Int).SetInt64(until)),
|
stackitem.NewBigInteger(new(big.Int).SetInt64(until)),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, Lock{
|
require.Equal(t, Lock{
|
||||||
|
@ -99,3 +101,11 @@ func TestParseLock(t *testing.T) {
|
||||||
}, ev)
|
}, ev)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createNotifyEventFromItems(items []stackitem.Item) *subscriptions.NotificationEvent {
|
||||||
|
return &subscriptions.NotificationEvent{
|
||||||
|
NotificationEvent: state.NotificationEvent{
|
||||||
|
Item: stackitem.NewArray(items),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -3,8 +3,9 @@ package container
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/network/payload"
|
"github.com/nspcc-dev/neo-go/pkg/network/payload"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
)
|
)
|
||||||
|
@ -46,12 +47,17 @@ const expectedItemNumDelete = 3
|
||||||
// ParseDelete from notification into container event structure.
|
// ParseDelete from notification into container event structure.
|
||||||
//
|
//
|
||||||
// Expects 3 stack items.
|
// Expects 3 stack items.
|
||||||
func ParseDelete(params []stackitem.Item) (event.Event, error) {
|
func ParseDelete(e *subscriptions.NotificationEvent) (event.Event, error) {
|
||||||
var (
|
var (
|
||||||
ev Delete
|
ev Delete
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
|
params, err := event.ParseStackArray(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not parse stack items from notify event: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
if ln := len(params); ln != expectedItemNumDelete {
|
if ln := len(params); ln != expectedItemNumDelete {
|
||||||
return nil, event.WrongNumberOfParameters(expectedItemNumDelete, ln)
|
return nil, event.WrongNumberOfParameters(expectedItemNumDelete, ln)
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,43 +20,43 @@ func TestParseDelete(t *testing.T) {
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := ParseDelete(prms)
|
_, err := ParseDelete(createNotifyEventFromItems(prms))
|
||||||
require.EqualError(t, err, event.WrongNumberOfParameters(3, len(prms)).Error())
|
require.EqualError(t, err, event.WrongNumberOfParameters(3, len(prms)).Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong container parameter", func(t *testing.T) {
|
t.Run("wrong container parameter", func(t *testing.T) {
|
||||||
_, err := ParseDelete([]stackitem.Item{
|
_, err := ParseDelete(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong signature parameter", func(t *testing.T) {
|
t.Run("wrong signature parameter", func(t *testing.T) {
|
||||||
_, err := ParseDelete([]stackitem.Item{
|
_, err := ParseDelete(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(containerID),
|
stackitem.NewByteArray(containerID),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong session token parameter", func(t *testing.T) {
|
t.Run("wrong session token parameter", func(t *testing.T) {
|
||||||
_, err := ParseDelete([]stackitem.Item{
|
_, err := ParseDelete(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(containerID),
|
stackitem.NewByteArray(containerID),
|
||||||
stackitem.NewByteArray(signature),
|
stackitem.NewByteArray(signature),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("correct behavior", func(t *testing.T) {
|
t.Run("correct behavior", func(t *testing.T) {
|
||||||
ev, err := ParseDelete([]stackitem.Item{
|
ev, err := ParseDelete(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(containerID),
|
stackitem.NewByteArray(containerID),
|
||||||
stackitem.NewByteArray(signature),
|
stackitem.NewByteArray(signature),
|
||||||
stackitem.NewByteArray(token),
|
stackitem.NewByteArray(token),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/network/payload"
|
"github.com/nspcc-dev/neo-go/pkg/network/payload"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
)
|
)
|
||||||
|
@ -58,36 +58,41 @@ const expectedItemNumEACL = 4
|
||||||
// ParseSetEACL parses SetEACL notification event from list of stack items.
|
// ParseSetEACL parses SetEACL notification event from list of stack items.
|
||||||
//
|
//
|
||||||
// Expects 4 stack items.
|
// Expects 4 stack items.
|
||||||
func ParseSetEACL(items []stackitem.Item) (event.Event, error) {
|
func ParseSetEACL(e *subscriptions.NotificationEvent) (event.Event, error) {
|
||||||
var (
|
var (
|
||||||
ev SetEACL
|
ev SetEACL
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
if ln := len(items); ln != expectedItemNumEACL {
|
params, err := event.ParseStackArray(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not parse stack items from notify event: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if ln := len(params); ln != expectedItemNumEACL {
|
||||||
return nil, event.WrongNumberOfParameters(expectedItemNumEACL, ln)
|
return nil, event.WrongNumberOfParameters(expectedItemNumEACL, ln)
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse table
|
// parse table
|
||||||
ev.table, err = client.BytesFromStackItem(items[0])
|
ev.table, err = client.BytesFromStackItem(params[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not parse binary table: %w", err)
|
return nil, fmt.Errorf("could not parse binary table: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse signature
|
// parse signature
|
||||||
ev.signature, err = client.BytesFromStackItem(items[1])
|
ev.signature, err = client.BytesFromStackItem(params[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not parse table signature: %w", err)
|
return nil, fmt.Errorf("could not parse table signature: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse public key
|
// parse public key
|
||||||
ev.publicKey, err = client.BytesFromStackItem(items[2])
|
ev.publicKey, err = client.BytesFromStackItem(params[2])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not parse binary public key: %w", err)
|
return nil, fmt.Errorf("could not parse binary public key: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse session token
|
// parse session token
|
||||||
ev.token, err = client.BytesFromStackItem(items[3])
|
ev.token, err = client.BytesFromStackItem(params[3])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not get session token: %w", err)
|
return nil, fmt.Errorf("could not get session token: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
package container_test
|
package container
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/core/state"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event/container"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -23,60 +24,60 @@ func TestParseEACL(t *testing.T) {
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := container.ParseSetEACL(items)
|
_, err := ParseSetEACL(createNotifyEventFromItems(items))
|
||||||
require.EqualError(t, err, event.WrongNumberOfParameters(4, len(items)).Error())
|
require.EqualError(t, err, event.WrongNumberOfParameters(4, len(items)).Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong container parameter", func(t *testing.T) {
|
t.Run("wrong container parameter", func(t *testing.T) {
|
||||||
_, err := container.ParseSetEACL([]stackitem.Item{
|
_, err := ParseSetEACL(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong signature parameter", func(t *testing.T) {
|
t.Run("wrong signature parameter", func(t *testing.T) {
|
||||||
_, err := container.ParseSetEACL([]stackitem.Item{
|
_, err := ParseSetEACL(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(binaryTable),
|
stackitem.NewByteArray(binaryTable),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong key parameter", func(t *testing.T) {
|
t.Run("wrong key parameter", func(t *testing.T) {
|
||||||
_, err := container.ParseSetEACL([]stackitem.Item{
|
_, err := ParseSetEACL(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(binaryTable),
|
stackitem.NewByteArray(binaryTable),
|
||||||
stackitem.NewByteArray(signature),
|
stackitem.NewByteArray(signature),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong session token parameter", func(t *testing.T) {
|
t.Run("wrong session token parameter", func(t *testing.T) {
|
||||||
_, err := container.ParseSetEACL([]stackitem.Item{
|
_, err := ParseSetEACL(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(binaryTable),
|
stackitem.NewByteArray(binaryTable),
|
||||||
stackitem.NewByteArray(signature),
|
stackitem.NewByteArray(signature),
|
||||||
stackitem.NewByteArray(publicKey),
|
stackitem.NewByteArray(publicKey),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("correct behavior", func(t *testing.T) {
|
t.Run("correct behavior", func(t *testing.T) {
|
||||||
ev, err := container.ParseSetEACL([]stackitem.Item{
|
ev, err := ParseSetEACL(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(binaryTable),
|
stackitem.NewByteArray(binaryTable),
|
||||||
stackitem.NewByteArray(signature),
|
stackitem.NewByteArray(signature),
|
||||||
stackitem.NewByteArray(publicKey),
|
stackitem.NewByteArray(publicKey),
|
||||||
stackitem.NewByteArray(token),
|
stackitem.NewByteArray(token),
|
||||||
})
|
}))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
e := ev.(container.SetEACL)
|
e := ev.(SetEACL)
|
||||||
|
|
||||||
require.Equal(t, binaryTable, e.Table())
|
require.Equal(t, binaryTable, e.Table())
|
||||||
require.Equal(t, signature, e.Signature())
|
require.Equal(t, signature, e.Signature())
|
||||||
|
@ -84,3 +85,11 @@ func TestParseEACL(t *testing.T) {
|
||||||
require.Equal(t, token, e.SessionToken())
|
require.Equal(t, token, e.SessionToken())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createNotifyEventFromItems(items []stackitem.Item) *subscriptions.NotificationEvent {
|
||||||
|
return &subscriptions.NotificationEvent{
|
||||||
|
NotificationEvent: state.NotificationEvent{
|
||||||
|
Item: stackitem.NewArray(items),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@ package container
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
|
@ -33,7 +35,12 @@ func (s StartEstimation) Epoch() uint64 { return s.epoch }
|
||||||
func (s StopEstimation) Epoch() uint64 { return s.epoch }
|
func (s StopEstimation) Epoch() uint64 { return s.epoch }
|
||||||
|
|
||||||
// ParseStartEstimation from notification into container event structure.
|
// ParseStartEstimation from notification into container event structure.
|
||||||
func ParseStartEstimation(params []stackitem.Item) (event.Event, error) {
|
func ParseStartEstimation(e *subscriptions.NotificationEvent) (event.Event, error) {
|
||||||
|
params, err := event.ParseStackArray(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not parse stack items from notify event: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
epoch, err := parseEstimation(params)
|
epoch, err := parseEstimation(params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -43,7 +50,12 @@ func ParseStartEstimation(params []stackitem.Item) (event.Event, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParseStopEstimation from notification into container event structure.
|
// ParseStopEstimation from notification into container event structure.
|
||||||
func ParseStopEstimation(params []stackitem.Item) (event.Event, error) {
|
func ParseStopEstimation(e *subscriptions.NotificationEvent) (event.Event, error) {
|
||||||
|
params, err := event.ParseStackArray(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not parse stack items from notify event: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
epoch, err := parseEstimation(params)
|
epoch, err := parseEstimation(params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -19,22 +19,22 @@ func TestStartEstimation(t *testing.T) {
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := ParseStartEstimation(prms)
|
_, err := ParseStartEstimation(createNotifyEventFromItems(prms))
|
||||||
require.EqualError(t, err, event.WrongNumberOfParameters(1, len(prms)).Error())
|
require.EqualError(t, err, event.WrongNumberOfParameters(1, len(prms)).Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong estimation parameter", func(t *testing.T) {
|
t.Run("wrong estimation parameter", func(t *testing.T) {
|
||||||
_, err := ParseStartEstimation([]stackitem.Item{
|
_, err := ParseStartEstimation(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("correct behavior", func(t *testing.T) {
|
t.Run("correct behavior", func(t *testing.T) {
|
||||||
ev, err := ParseStartEstimation([]stackitem.Item{
|
ev, err := ParseStartEstimation(createNotifyEventFromItems([]stackitem.Item{
|
||||||
epochItem,
|
epochItem,
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
@ -54,22 +54,22 @@ func TestStopEstimation(t *testing.T) {
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := ParseStopEstimation(prms)
|
_, err := ParseStopEstimation(createNotifyEventFromItems(prms))
|
||||||
require.EqualError(t, err, event.WrongNumberOfParameters(1, len(prms)).Error())
|
require.EqualError(t, err, event.WrongNumberOfParameters(1, len(prms)).Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong estimation parameter", func(t *testing.T) {
|
t.Run("wrong estimation parameter", func(t *testing.T) {
|
||||||
_, err := ParseStopEstimation([]stackitem.Item{
|
_, err := ParseStopEstimation(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("correct behavior", func(t *testing.T) {
|
t.Run("correct behavior", func(t *testing.T) {
|
||||||
ev, err := ParseStopEstimation([]stackitem.Item{
|
ev, err := ParseStopEstimation(createNotifyEventFromItems([]stackitem.Item{
|
||||||
epochItem,
|
epochItem,
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,9 @@ package container
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/network/payload"
|
"github.com/nspcc-dev/neo-go/pkg/network/payload"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
)
|
)
|
||||||
|
@ -65,12 +66,17 @@ func (x PutNamed) Zone() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParsePut from notification into container event structure.
|
// ParsePut from notification into container event structure.
|
||||||
func ParsePut(params []stackitem.Item) (event.Event, error) {
|
func ParsePut(e *subscriptions.NotificationEvent) (event.Event, error) {
|
||||||
var (
|
var (
|
||||||
ev Put
|
ev Put
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
|
params, err := event.ParseStackArray(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not parse stack items from notify event: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
if ln := len(params); ln != expectedItemNumPut {
|
if ln := len(params); ln != expectedItemNumPut {
|
||||||
return nil, event.WrongNumberOfParameters(expectedItemNumPut, ln)
|
return nil, event.WrongNumberOfParameters(expectedItemNumPut, ln)
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,55 +22,55 @@ func TestParsePut(t *testing.T) {
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := ParsePut(prms)
|
_, err := ParsePut(createNotifyEventFromItems(prms))
|
||||||
require.EqualError(t, err, event.WrongNumberOfParameters(expectedItemNumPut, len(prms)).Error())
|
require.EqualError(t, err, event.WrongNumberOfParameters(expectedItemNumPut, len(prms)).Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong container parameter", func(t *testing.T) {
|
t.Run("wrong container parameter", func(t *testing.T) {
|
||||||
_, err := ParsePut([]stackitem.Item{
|
_, err := ParsePut(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong signature parameter", func(t *testing.T) {
|
t.Run("wrong signature parameter", func(t *testing.T) {
|
||||||
_, err := ParsePut([]stackitem.Item{
|
_, err := ParsePut(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(containerData),
|
stackitem.NewByteArray(containerData),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong key parameter", func(t *testing.T) {
|
t.Run("wrong key parameter", func(t *testing.T) {
|
||||||
_, err := ParsePut([]stackitem.Item{
|
_, err := ParsePut(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(containerData),
|
stackitem.NewByteArray(containerData),
|
||||||
stackitem.NewByteArray(signature),
|
stackitem.NewByteArray(signature),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong session token parameter", func(t *testing.T) {
|
t.Run("wrong session token parameter", func(t *testing.T) {
|
||||||
_, err := ParsePut([]stackitem.Item{
|
_, err := ParsePut(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(containerData),
|
stackitem.NewByteArray(containerData),
|
||||||
stackitem.NewByteArray(signature),
|
stackitem.NewByteArray(signature),
|
||||||
stackitem.NewByteArray(publicKey),
|
stackitem.NewByteArray(publicKey),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("correct behavior", func(t *testing.T) {
|
t.Run("correct behavior", func(t *testing.T) {
|
||||||
ev, err := ParsePut([]stackitem.Item{
|
ev, err := ParsePut(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(containerData),
|
stackitem.NewByteArray(containerData),
|
||||||
stackitem.NewByteArray(signature),
|
stackitem.NewByteArray(signature),
|
||||||
stackitem.NewByteArray(publicKey),
|
stackitem.NewByteArray(publicKey),
|
||||||
stackitem.NewByteArray(token),
|
stackitem.NewByteArray(token),
|
||||||
})
|
}))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Equal(t, Put{
|
require.Equal(t, Put{
|
||||||
|
|
|
@ -285,19 +285,6 @@ func (l listener) parseAndHandleNotification(notifyEvent *subscriptions.Notifica
|
||||||
zap.String("script hash LE", notifyEvent.ScriptHash.StringLE()),
|
zap.String("script hash LE", notifyEvent.ScriptHash.StringLE()),
|
||||||
)
|
)
|
||||||
|
|
||||||
// stack item must be an array of items
|
|
||||||
arr, err := client.ArrayFromStackItem(notifyEvent.Item)
|
|
||||||
if err != nil {
|
|
||||||
log.Warn("stack item is not an array type",
|
|
||||||
zap.String("error", err.Error()),
|
|
||||||
)
|
|
||||||
|
|
||||||
return
|
|
||||||
} else if len(arr) == 0 {
|
|
||||||
log.Warn("stack item array is empty")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// calculate event type from bytes
|
// calculate event type from bytes
|
||||||
typEvent := TypeFromString(notifyEvent.Name)
|
typEvent := TypeFromString(notifyEvent.Name)
|
||||||
|
|
||||||
|
@ -321,7 +308,7 @@ func (l listener) parseAndHandleNotification(notifyEvent *subscriptions.Notifica
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse the notification event
|
// parse the notification event
|
||||||
event, err := parser(arr)
|
event, err := parser(notifyEvent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warn("could not parse notification event",
|
log.Warn("could not parse notification event",
|
||||||
zap.String("error", err.Error()),
|
zap.String("error", err.Error()),
|
||||||
|
|
|
@ -3,6 +3,7 @@ package neofs
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
|
@ -24,12 +25,17 @@ func (b bindCommon) Keys() [][]byte { return b.keys }
|
||||||
|
|
||||||
func (b bindCommon) User() []byte { return b.user }
|
func (b bindCommon) User() []byte { return b.user }
|
||||||
|
|
||||||
func ParseBind(params []stackitem.Item) (event.Event, error) {
|
func ParseBind(e *subscriptions.NotificationEvent) (event.Event, error) {
|
||||||
var (
|
var (
|
||||||
ev Bind
|
ev Bind
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
|
params, err := event.ParseStackArray(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not parse stack items from notify event: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
err = parseBind(&ev.bindCommon, params)
|
err = parseBind(&ev.bindCommon, params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -3,6 +3,8 @@ package neofs
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/core/state"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
@ -23,36 +25,36 @@ func TestParseBind(t *testing.T) {
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := ParseBind(prms)
|
_, err := ParseBind(createNotifyEventFromItems(prms))
|
||||||
require.EqualError(t, err, event.WrongNumberOfParameters(2, len(prms)).Error())
|
require.EqualError(t, err, event.WrongNumberOfParameters(2, len(prms)).Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong first parameter", func(t *testing.T) {
|
t.Run("wrong first parameter", func(t *testing.T) {
|
||||||
_, err := ParseBind([]stackitem.Item{
|
_, err := ParseBind(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong second parameter", func(t *testing.T) {
|
t.Run("wrong second parameter", func(t *testing.T) {
|
||||||
_, err := ParseBind([]stackitem.Item{
|
_, err := ParseBind(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(user),
|
stackitem.NewByteArray(user),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("correct", func(t *testing.T) {
|
t.Run("correct", func(t *testing.T) {
|
||||||
ev, err := ParseBind([]stackitem.Item{
|
ev, err := ParseBind(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(user),
|
stackitem.NewByteArray(user),
|
||||||
stackitem.NewArray([]stackitem.Item{
|
stackitem.NewArray([]stackitem.Item{
|
||||||
stackitem.NewByteArray(publicKeys[0]),
|
stackitem.NewByteArray(publicKeys[0]),
|
||||||
stackitem.NewByteArray(publicKeys[1]),
|
stackitem.NewByteArray(publicKeys[1]),
|
||||||
stackitem.NewByteArray(publicKeys[2]),
|
stackitem.NewByteArray(publicKeys[2]),
|
||||||
}),
|
}),
|
||||||
})
|
}))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
e := ev.(Bind)
|
e := ev.(Bind)
|
||||||
|
@ -61,3 +63,11 @@ func TestParseBind(t *testing.T) {
|
||||||
require.Equal(t, publicKeys, e.Keys())
|
require.Equal(t, publicKeys, e.Keys())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createNotifyEventFromItems(items []stackitem.Item) *subscriptions.NotificationEvent {
|
||||||
|
return &subscriptions.NotificationEvent{
|
||||||
|
NotificationEvent: state.NotificationEvent{
|
||||||
|
Item: stackitem.NewArray(items),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -3,8 +3,8 @@ package neofs
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/util"
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
)
|
)
|
||||||
|
@ -33,12 +33,17 @@ func (c Cheque) Amount() int64 { return c.amount }
|
||||||
func (c Cheque) LockAccount() util.Uint160 { return c.lock }
|
func (c Cheque) LockAccount() util.Uint160 { return c.lock }
|
||||||
|
|
||||||
// ParseCheque from notification into cheque structure.
|
// ParseCheque from notification into cheque structure.
|
||||||
func ParseCheque(params []stackitem.Item) (event.Event, error) {
|
func ParseCheque(e *subscriptions.NotificationEvent) (event.Event, error) {
|
||||||
var (
|
var (
|
||||||
ev Cheque
|
ev Cheque
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
|
params, err := event.ParseStackArray(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not parse stack items from notify event: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
if ln := len(params); ln != 4 {
|
if ln := len(params); ln != 4 {
|
||||||
return nil, event.WrongNumberOfParameters(4, ln)
|
return nil, event.WrongNumberOfParameters(4, ln)
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,55 +25,55 @@ func TestParseCheque(t *testing.T) {
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := ParseCheque(prms)
|
_, err := ParseCheque(createNotifyEventFromItems(prms))
|
||||||
require.EqualError(t, err, event.WrongNumberOfParameters(4, len(prms)).Error())
|
require.EqualError(t, err, event.WrongNumberOfParameters(4, len(prms)).Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong id parameter", func(t *testing.T) {
|
t.Run("wrong id parameter", func(t *testing.T) {
|
||||||
_, err := ParseCheque([]stackitem.Item{
|
_, err := ParseCheque(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong user parameter", func(t *testing.T) {
|
t.Run("wrong user parameter", func(t *testing.T) {
|
||||||
_, err := ParseCheque([]stackitem.Item{
|
_, err := ParseCheque(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(id),
|
stackitem.NewByteArray(id),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong amount parameter", func(t *testing.T) {
|
t.Run("wrong amount parameter", func(t *testing.T) {
|
||||||
_, err := ParseCheque([]stackitem.Item{
|
_, err := ParseCheque(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(id),
|
stackitem.NewByteArray(id),
|
||||||
stackitem.NewByteArray(user.BytesBE()),
|
stackitem.NewByteArray(user.BytesBE()),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong lock parameter", func(t *testing.T) {
|
t.Run("wrong lock parameter", func(t *testing.T) {
|
||||||
_, err := ParseCheque([]stackitem.Item{
|
_, err := ParseCheque(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(id),
|
stackitem.NewByteArray(id),
|
||||||
stackitem.NewByteArray(user.BytesBE()),
|
stackitem.NewByteArray(user.BytesBE()),
|
||||||
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("correct behavior", func(t *testing.T) {
|
t.Run("correct behavior", func(t *testing.T) {
|
||||||
ev, err := ParseCheque([]stackitem.Item{
|
ev, err := ParseCheque(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(id),
|
stackitem.NewByteArray(id),
|
||||||
stackitem.NewByteArray(user.BytesBE()),
|
stackitem.NewByteArray(user.BytesBE()),
|
||||||
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
||||||
stackitem.NewByteArray(lock.BytesBE()),
|
stackitem.NewByteArray(lock.BytesBE()),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, Cheque{
|
require.Equal(t, Cheque{
|
||||||
|
|
|
@ -3,7 +3,7 @@ package neofs
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
)
|
)
|
||||||
|
@ -23,12 +23,17 @@ func (u Config) Key() []byte { return u.key }
|
||||||
|
|
||||||
func (u Config) Value() []byte { return u.value }
|
func (u Config) Value() []byte { return u.value }
|
||||||
|
|
||||||
func ParseConfig(params []stackitem.Item) (event.Event, error) {
|
func ParseConfig(e *subscriptions.NotificationEvent) (event.Event, error) {
|
||||||
var (
|
var (
|
||||||
ev Config
|
ev Config
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
|
params, err := event.ParseStackArray(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not parse stack items from notify event: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
if ln := len(params); ln != 3 {
|
if ln := len(params); ln != 3 {
|
||||||
return nil, event.WrongNumberOfParameters(3, ln)
|
return nil, event.WrongNumberOfParameters(3, ln)
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,43 +20,43 @@ func TestParseConfig(t *testing.T) {
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := ParseConfig(prms)
|
_, err := ParseConfig(createNotifyEventFromItems(prms))
|
||||||
require.EqualError(t, err, event.WrongNumberOfParameters(3, len(prms)).Error())
|
require.EqualError(t, err, event.WrongNumberOfParameters(3, len(prms)).Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong first parameter", func(t *testing.T) {
|
t.Run("wrong first parameter", func(t *testing.T) {
|
||||||
_, err := ParseConfig([]stackitem.Item{
|
_, err := ParseConfig(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong second parameter", func(t *testing.T) {
|
t.Run("wrong second parameter", func(t *testing.T) {
|
||||||
_, err := ParseConfig([]stackitem.Item{
|
_, err := ParseConfig(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(id),
|
stackitem.NewByteArray(id),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong third parameter", func(t *testing.T) {
|
t.Run("wrong third parameter", func(t *testing.T) {
|
||||||
_, err := ParseConfig([]stackitem.Item{
|
_, err := ParseConfig(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(id),
|
stackitem.NewByteArray(id),
|
||||||
stackitem.NewByteArray(key),
|
stackitem.NewByteArray(key),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("correct", func(t *testing.T) {
|
t.Run("correct", func(t *testing.T) {
|
||||||
ev, err := ParseConfig([]stackitem.Item{
|
ev, err := ParseConfig(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(id),
|
stackitem.NewByteArray(id),
|
||||||
stackitem.NewByteArray(key),
|
stackitem.NewByteArray(key),
|
||||||
stackitem.NewByteArray(value),
|
stackitem.NewByteArray(value),
|
||||||
})
|
}))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Equal(t, Config{
|
require.Equal(t, Config{
|
||||||
|
|
|
@ -3,8 +3,8 @@ package neofs
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/util"
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
)
|
)
|
||||||
|
@ -33,9 +33,14 @@ func (d Deposit) To() util.Uint160 { return d.to }
|
||||||
func (d Deposit) Amount() int64 { return d.amount }
|
func (d Deposit) Amount() int64 { return d.amount }
|
||||||
|
|
||||||
// ParseDeposit notification into deposit structure.
|
// ParseDeposit notification into deposit structure.
|
||||||
func ParseDeposit(params []stackitem.Item) (event.Event, error) {
|
func ParseDeposit(e *subscriptions.NotificationEvent) (event.Event, error) {
|
||||||
var ev Deposit
|
var ev Deposit
|
||||||
|
|
||||||
|
params, err := event.ParseStackArray(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not parse stack items from notify event: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
if ln := len(params); ln != 4 {
|
if ln := len(params); ln != 4 {
|
||||||
return nil, event.WrongNumberOfParameters(4, ln)
|
return nil, event.WrongNumberOfParameters(4, ln)
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,55 +25,55 @@ func TestParseDeposit(t *testing.T) {
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := ParseDeposit(prms)
|
_, err := ParseDeposit(createNotifyEventFromItems(prms))
|
||||||
require.EqualError(t, err, event.WrongNumberOfParameters(4, len(prms)).Error())
|
require.EqualError(t, err, event.WrongNumberOfParameters(4, len(prms)).Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong from parameter", func(t *testing.T) {
|
t.Run("wrong from parameter", func(t *testing.T) {
|
||||||
_, err := ParseDeposit([]stackitem.Item{
|
_, err := ParseDeposit(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong amount parameter", func(t *testing.T) {
|
t.Run("wrong amount parameter", func(t *testing.T) {
|
||||||
_, err := ParseDeposit([]stackitem.Item{
|
_, err := ParseDeposit(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(from.BytesBE()),
|
stackitem.NewByteArray(from.BytesBE()),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong to parameter", func(t *testing.T) {
|
t.Run("wrong to parameter", func(t *testing.T) {
|
||||||
_, err := ParseDeposit([]stackitem.Item{
|
_, err := ParseDeposit(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(from.BytesBE()),
|
stackitem.NewByteArray(from.BytesBE()),
|
||||||
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong id parameter", func(t *testing.T) {
|
t.Run("wrong id parameter", func(t *testing.T) {
|
||||||
_, err := ParseDeposit([]stackitem.Item{
|
_, err := ParseDeposit(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(from.BytesBE()),
|
stackitem.NewByteArray(from.BytesBE()),
|
||||||
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
||||||
stackitem.NewByteArray(to.BytesBE()),
|
stackitem.NewByteArray(to.BytesBE()),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("correct behavior", func(t *testing.T) {
|
t.Run("correct behavior", func(t *testing.T) {
|
||||||
ev, err := ParseDeposit([]stackitem.Item{
|
ev, err := ParseDeposit(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(from.BytesBE()),
|
stackitem.NewByteArray(from.BytesBE()),
|
||||||
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
||||||
stackitem.NewByteArray(to.BytesBE()),
|
stackitem.NewByteArray(to.BytesBE()),
|
||||||
stackitem.NewByteArray(id),
|
stackitem.NewByteArray(id),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, Deposit{
|
require.Equal(t, Deposit{
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
package neofs
|
package neofs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -9,12 +11,17 @@ type Unbind struct {
|
||||||
bindCommon
|
bindCommon
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParseUnbind(params []stackitem.Item) (event.Event, error) {
|
func ParseUnbind(e *subscriptions.NotificationEvent) (event.Event, error) {
|
||||||
var (
|
var (
|
||||||
ev Unbind
|
ev Unbind
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
|
params, err := event.ParseStackArray(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not parse stack items from notify event: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
err = parseBind(&ev.bindCommon, params)
|
err = parseBind(&ev.bindCommon, params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -23,36 +23,36 @@ func TestParseUnbind(t *testing.T) {
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := ParseUnbind(prms)
|
_, err := ParseUnbind(createNotifyEventFromItems(prms))
|
||||||
require.EqualError(t, err, event.WrongNumberOfParameters(2, len(prms)).Error())
|
require.EqualError(t, err, event.WrongNumberOfParameters(2, len(prms)).Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong first parameter", func(t *testing.T) {
|
t.Run("wrong first parameter", func(t *testing.T) {
|
||||||
_, err := ParseUnbind([]stackitem.Item{
|
_, err := ParseUnbind(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong second parameter", func(t *testing.T) {
|
t.Run("wrong second parameter", func(t *testing.T) {
|
||||||
_, err := ParseUnbind([]stackitem.Item{
|
_, err := ParseUnbind(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(user),
|
stackitem.NewByteArray(user),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("correct", func(t *testing.T) {
|
t.Run("correct", func(t *testing.T) {
|
||||||
ev, err := ParseUnbind([]stackitem.Item{
|
ev, err := ParseUnbind(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(user),
|
stackitem.NewByteArray(user),
|
||||||
stackitem.NewArray([]stackitem.Item{
|
stackitem.NewArray([]stackitem.Item{
|
||||||
stackitem.NewByteArray(publicKeys[0]),
|
stackitem.NewByteArray(publicKeys[0]),
|
||||||
stackitem.NewByteArray(publicKeys[1]),
|
stackitem.NewByteArray(publicKeys[1]),
|
||||||
stackitem.NewByteArray(publicKeys[2]),
|
stackitem.NewByteArray(publicKeys[2]),
|
||||||
}),
|
}),
|
||||||
})
|
}))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
e := ev.(Unbind)
|
e := ev.(Unbind)
|
||||||
|
|
|
@ -3,8 +3,8 @@ package neofs
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/util"
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
)
|
)
|
||||||
|
@ -29,9 +29,14 @@ func (w Withdraw) User() util.Uint160 { return w.user }
|
||||||
func (w Withdraw) Amount() int64 { return w.amount }
|
func (w Withdraw) Amount() int64 { return w.amount }
|
||||||
|
|
||||||
// ParseWithdraw notification into withdraw structure.
|
// ParseWithdraw notification into withdraw structure.
|
||||||
func ParseWithdraw(params []stackitem.Item) (event.Event, error) {
|
func ParseWithdraw(e *subscriptions.NotificationEvent) (event.Event, error) {
|
||||||
var ev Withdraw
|
var ev Withdraw
|
||||||
|
|
||||||
|
params, err := event.ParseStackArray(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not parse stack items from notify event: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
if ln := len(params); ln != 3 {
|
if ln := len(params); ln != 3 {
|
||||||
return nil, event.WrongNumberOfParameters(3, ln)
|
return nil, event.WrongNumberOfParameters(3, ln)
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,43 +24,43 @@ func TestParseWithdraw(t *testing.T) {
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := ParseWithdraw(prms)
|
_, err := ParseWithdraw(createNotifyEventFromItems(prms))
|
||||||
require.EqualError(t, err, event.WrongNumberOfParameters(3, len(prms)).Error())
|
require.EqualError(t, err, event.WrongNumberOfParameters(3, len(prms)).Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong user parameter", func(t *testing.T) {
|
t.Run("wrong user parameter", func(t *testing.T) {
|
||||||
_, err := ParseWithdraw([]stackitem.Item{
|
_, err := ParseWithdraw(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong amount parameter", func(t *testing.T) {
|
t.Run("wrong amount parameter", func(t *testing.T) {
|
||||||
_, err := ParseWithdraw([]stackitem.Item{
|
_, err := ParseWithdraw(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(user.BytesBE()),
|
stackitem.NewByteArray(user.BytesBE()),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong id parameter", func(t *testing.T) {
|
t.Run("wrong id parameter", func(t *testing.T) {
|
||||||
_, err := ParseWithdraw([]stackitem.Item{
|
_, err := ParseWithdraw(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(user.BytesBE()),
|
stackitem.NewByteArray(user.BytesBE()),
|
||||||
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("correct behavior", func(t *testing.T) {
|
t.Run("correct behavior", func(t *testing.T) {
|
||||||
ev, err := ParseWithdraw([]stackitem.Item{
|
ev, err := ParseWithdraw(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(user.BytesBE()),
|
stackitem.NewByteArray(user.BytesBE()),
|
||||||
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
stackitem.NewBigInteger(new(big.Int).SetInt64(amount)),
|
||||||
stackitem.NewByteArray(id),
|
stackitem.NewByteArray(id),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, Withdraw{
|
require.Equal(t, Withdraw{
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/network/payload"
|
"github.com/nspcc-dev/neo-go/pkg/network/payload"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
)
|
)
|
||||||
|
@ -32,17 +32,22 @@ func (s AddPeer) NotaryRequest() *payload.P2PNotaryRequest {
|
||||||
|
|
||||||
const expectedItemNumAddPeer = 1
|
const expectedItemNumAddPeer = 1
|
||||||
|
|
||||||
func ParseAddPeer(prms []stackitem.Item) (event.Event, error) {
|
func ParseAddPeer(e *subscriptions.NotificationEvent) (event.Event, error) {
|
||||||
var (
|
var (
|
||||||
ev AddPeer
|
ev AddPeer
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
if ln := len(prms); ln != expectedItemNumAddPeer {
|
params, err := event.ParseStackArray(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not parse stack items from notify event: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if ln := len(params); ln != expectedItemNumAddPeer {
|
||||||
return nil, event.WrongNumberOfParameters(expectedItemNumAddPeer, ln)
|
return nil, event.WrongNumberOfParameters(expectedItemNumAddPeer, ln)
|
||||||
}
|
}
|
||||||
|
|
||||||
ev.node, err = client.BytesFromStackItem(prms[0])
|
ev.node, err = client.BytesFromStackItem(params[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not get raw nodeinfo: %w", err)
|
return nil, fmt.Errorf("could not get raw nodeinfo: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@ package netmap
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/core/state"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
@ -15,14 +17,14 @@ func TestParseAddPeer(t *testing.T) {
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := ParseAddPeer(prms)
|
_, err := ParseAddPeer(createNotifyEventFromItems(prms))
|
||||||
require.EqualError(t, err, event.WrongNumberOfParameters(1, len(prms)).Error())
|
require.EqualError(t, err, event.WrongNumberOfParameters(1, len(prms)).Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong first parameter type", func(t *testing.T) {
|
t.Run("wrong first parameter type", func(t *testing.T) {
|
||||||
_, err := ParseAddPeer([]stackitem.Item{
|
_, err := ParseAddPeer(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
@ -30,9 +32,9 @@ func TestParseAddPeer(t *testing.T) {
|
||||||
t.Run("correct behavior", func(t *testing.T) {
|
t.Run("correct behavior", func(t *testing.T) {
|
||||||
info := []byte{1, 2, 3}
|
info := []byte{1, 2, 3}
|
||||||
|
|
||||||
ev, err := ParseAddPeer([]stackitem.Item{
|
ev, err := ParseAddPeer(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(info),
|
stackitem.NewByteArray(info),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, AddPeer{
|
require.Equal(t, AddPeer{
|
||||||
|
@ -40,3 +42,11 @@ func TestParseAddPeer(t *testing.T) {
|
||||||
}, ev)
|
}, ev)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createNotifyEventFromItems(items []stackitem.Item) *subscriptions.NotificationEvent {
|
||||||
|
return &subscriptions.NotificationEvent{
|
||||||
|
NotificationEvent: state.NotificationEvent{
|
||||||
|
Item: stackitem.NewArray(items),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@ package netmap
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
)
|
)
|
||||||
|
@ -24,12 +24,17 @@ func (s NewEpoch) EpochNumber() uint64 {
|
||||||
// ParseNewEpoch is a parser of new epoch notification event.
|
// ParseNewEpoch is a parser of new epoch notification event.
|
||||||
//
|
//
|
||||||
// Result is type of NewEpoch.
|
// Result is type of NewEpoch.
|
||||||
func ParseNewEpoch(prms []stackitem.Item) (event.Event, error) {
|
func ParseNewEpoch(e *subscriptions.NotificationEvent) (event.Event, error) {
|
||||||
if ln := len(prms); ln != 1 {
|
params, err := event.ParseStackArray(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not parse stack items from notify event: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if ln := len(params); ln != 1 {
|
||||||
return nil, event.WrongNumberOfParameters(1, ln)
|
return nil, event.WrongNumberOfParameters(1, ln)
|
||||||
}
|
}
|
||||||
|
|
||||||
prmEpochNum, err := client.IntFromStackItem(prms[0])
|
prmEpochNum, err := client.IntFromStackItem(params[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not get integer epoch number: %w", err)
|
return nil, fmt.Errorf("could not get integer epoch number: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,14 +16,14 @@ func TestParseNewEpoch(t *testing.T) {
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := ParseNewEpoch(prms)
|
_, err := ParseNewEpoch(createNotifyEventFromItems(prms))
|
||||||
require.EqualError(t, err, event.WrongNumberOfParameters(1, len(prms)).Error())
|
require.EqualError(t, err, event.WrongNumberOfParameters(1, len(prms)).Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong first parameter type", func(t *testing.T) {
|
t.Run("wrong first parameter type", func(t *testing.T) {
|
||||||
_, err := ParseNewEpoch([]stackitem.Item{
|
_, err := ParseNewEpoch(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
@ -31,9 +31,9 @@ func TestParseNewEpoch(t *testing.T) {
|
||||||
t.Run("correct behavior", func(t *testing.T) {
|
t.Run("correct behavior", func(t *testing.T) {
|
||||||
epochNum := uint64(100)
|
epochNum := uint64(100)
|
||||||
|
|
||||||
ev, err := ParseNewEpoch([]stackitem.Item{
|
ev, err := ParseNewEpoch(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewBigInteger(new(big.Int).SetUint64(epochNum)),
|
stackitem.NewBigInteger(new(big.Int).SetUint64(epochNum)),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, NewEpoch{
|
require.Equal(t, NewEpoch{
|
||||||
|
|
|
@ -4,9 +4,11 @@ import (
|
||||||
"crypto/elliptic"
|
"crypto/elliptic"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/network/payload"
|
"github.com/nspcc-dev/neo-go/pkg/network/payload"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
"github.com/nspcc-dev/neofs-api-go/pkg/netmap"
|
||||||
v2netmap "github.com/nspcc-dev/neofs-api-go/v2/netmap"
|
v2netmap "github.com/nspcc-dev/neofs-api-go/v2/netmap"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
|
@ -41,18 +43,23 @@ func (s UpdatePeer) NotaryRequest() *payload.P2PNotaryRequest {
|
||||||
|
|
||||||
const expectedItemNumUpdatePeer = 2
|
const expectedItemNumUpdatePeer = 2
|
||||||
|
|
||||||
func ParseUpdatePeer(prms []stackitem.Item) (event.Event, error) {
|
func ParseUpdatePeer(e *subscriptions.NotificationEvent) (event.Event, error) {
|
||||||
var (
|
var (
|
||||||
ev UpdatePeer
|
ev UpdatePeer
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
if ln := len(prms); ln != expectedItemNumUpdatePeer {
|
params, err := event.ParseStackArray(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not parse stack items from notify event: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if ln := len(params); ln != expectedItemNumUpdatePeer {
|
||||||
return nil, event.WrongNumberOfParameters(expectedItemNumUpdatePeer, ln)
|
return nil, event.WrongNumberOfParameters(expectedItemNumUpdatePeer, ln)
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse public key
|
// parse public key
|
||||||
key, err := client.BytesFromStackItem(prms[1])
|
key, err := client.BytesFromStackItem(params[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not get public key: %w", err)
|
return nil, fmt.Errorf("could not get public key: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -63,7 +70,7 @@ func ParseUpdatePeer(prms []stackitem.Item) (event.Event, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse node status
|
// parse node status
|
||||||
st, err := client.IntFromStackItem(prms[0])
|
st, err := client.IntFromStackItem(params[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not get node status: %w", err)
|
return nil, fmt.Errorf("could not get node status: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,32 +25,32 @@ func TestParseUpdatePeer(t *testing.T) {
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := ParseUpdatePeer(prms)
|
_, err := ParseUpdatePeer(createNotifyEventFromItems(prms))
|
||||||
require.EqualError(t, err, event.WrongNumberOfParameters(2, len(prms)).Error())
|
require.EqualError(t, err, event.WrongNumberOfParameters(2, len(prms)).Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong first parameter type", func(t *testing.T) {
|
t.Run("wrong first parameter type", func(t *testing.T) {
|
||||||
_, err := ParseUpdatePeer([]stackitem.Item{
|
_, err := ParseUpdatePeer(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong second parameter type", func(t *testing.T) {
|
t.Run("wrong second parameter type", func(t *testing.T) {
|
||||||
_, err := ParseUpdatePeer([]stackitem.Item{
|
_, err := ParseUpdatePeer(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewByteArray(publicKey.Bytes()),
|
stackitem.NewByteArray(publicKey.Bytes()),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("correct behavior", func(t *testing.T) {
|
t.Run("correct behavior", func(t *testing.T) {
|
||||||
ev, err := ParseUpdatePeer([]stackitem.Item{
|
ev, err := ParseUpdatePeer(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewBigInteger(new(big.Int).SetInt64(int64(state.ToV2()))),
|
stackitem.NewBigInteger(new(big.Int).SetInt64(int64(state.ToV2()))),
|
||||||
stackitem.NewByteArray(publicKey.Bytes()),
|
stackitem.NewByteArray(publicKey.Bytes()),
|
||||||
})
|
}))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Equal(t, UpdatePeer{
|
require.Equal(t, UpdatePeer{
|
||||||
|
|
|
@ -4,12 +4,12 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/network/payload"
|
"github.com/nspcc-dev/neo-go/pkg/network/payload"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NotificationParser is a function that constructs Event
|
// NotificationParser is a function that constructs Event
|
||||||
// from the StackItem list.
|
// from the StackItem list.
|
||||||
type NotificationParser func([]stackitem.Item) (Event, error)
|
type NotificationParser func(*subscriptions.NotificationEvent) (Event, error)
|
||||||
|
|
||||||
// NotificationParserInfo is a structure that groups
|
// NotificationParserInfo is a structure that groups
|
||||||
// the parameters of particular contract
|
// the parameters of particular contract
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/network/payload"
|
"github.com/nspcc-dev/neo-go/pkg/network/payload"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
"github.com/nspcc-dev/neofs-sdk-go/reputation"
|
"github.com/nspcc-dev/neofs-sdk-go/reputation"
|
||||||
|
@ -49,18 +49,23 @@ func (p Put) NotaryRequest() *payload.P2PNotaryRequest {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParsePut from notification into reputation event structure.
|
// ParsePut from notification into reputation event structure.
|
||||||
func ParsePut(prms []stackitem.Item) (event.Event, error) {
|
func ParsePut(e *subscriptions.NotificationEvent) (event.Event, error) {
|
||||||
var (
|
var (
|
||||||
ev Put
|
ev Put
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
if ln := len(prms); ln != 3 {
|
params, err := event.ParseStackArray(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not parse stack items from notify event: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if ln := len(params); ln != 3 {
|
||||||
return nil, event.WrongNumberOfParameters(3, ln)
|
return nil, event.WrongNumberOfParameters(3, ln)
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse epoch number
|
// parse epoch number
|
||||||
epoch, err := client.IntFromStackItem(prms[0])
|
epoch, err := client.IntFromStackItem(params[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not get integer epoch number: %w", err)
|
return nil, fmt.Errorf("could not get integer epoch number: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -68,7 +73,7 @@ func ParsePut(prms []stackitem.Item) (event.Event, error) {
|
||||||
ev.epoch = uint64(epoch)
|
ev.epoch = uint64(epoch)
|
||||||
|
|
||||||
// parse peer ID value
|
// parse peer ID value
|
||||||
peerID, err := client.BytesFromStackItem(prms[1])
|
peerID, err := client.BytesFromStackItem(params[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not get peer ID value: %w", err)
|
return nil, fmt.Errorf("could not get peer ID value: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -82,7 +87,7 @@ func ParsePut(prms []stackitem.Item) (event.Event, error) {
|
||||||
ev.peerID.SetPublicKey(publicKey)
|
ev.peerID.SetPublicKey(publicKey)
|
||||||
|
|
||||||
// parse global trust value
|
// parse global trust value
|
||||||
rawValue, err := client.BytesFromStackItem(prms[2])
|
rawValue, err := client.BytesFromStackItem(params[2])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not get global trust value: %w", err)
|
return nil, fmt.Errorf("could not get global trust value: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,8 @@ import (
|
||||||
"math/big"
|
"math/big"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/core/state"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
"github.com/nspcc-dev/neofs-sdk-go/reputation"
|
"github.com/nspcc-dev/neofs-sdk-go/reputation"
|
||||||
|
@ -39,43 +41,43 @@ func TestParsePut(t *testing.T) {
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := ParsePut(prms)
|
_, err := ParsePut(createNotifyEventFromItems(prms))
|
||||||
require.EqualError(t, err, event.WrongNumberOfParameters(3, len(prms)).Error())
|
require.EqualError(t, err, event.WrongNumberOfParameters(3, len(prms)).Error())
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong epoch parameter", func(t *testing.T) {
|
t.Run("wrong epoch parameter", func(t *testing.T) {
|
||||||
_, err := ParsePut([]stackitem.Item{
|
_, err := ParsePut(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong peerID parameter", func(t *testing.T) {
|
t.Run("wrong peerID parameter", func(t *testing.T) {
|
||||||
_, err := ParsePut([]stackitem.Item{
|
_, err := ParsePut(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewBigInteger(new(big.Int).SetUint64(epoch)),
|
stackitem.NewBigInteger(new(big.Int).SetUint64(epoch)),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("wrong value parameter", func(t *testing.T) {
|
t.Run("wrong value parameter", func(t *testing.T) {
|
||||||
_, err := ParsePut([]stackitem.Item{
|
_, err := ParsePut(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewBigInteger(new(big.Int).SetUint64(epoch)),
|
stackitem.NewBigInteger(new(big.Int).SetUint64(epoch)),
|
||||||
stackitem.NewByteArray(rawPeerID[:]),
|
stackitem.NewByteArray(rawPeerID[:]),
|
||||||
stackitem.NewMap(),
|
stackitem.NewMap(),
|
||||||
})
|
}))
|
||||||
|
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("correct behavior", func(t *testing.T) {
|
t.Run("correct behavior", func(t *testing.T) {
|
||||||
ev, err := ParsePut([]stackitem.Item{
|
ev, err := ParsePut(createNotifyEventFromItems([]stackitem.Item{
|
||||||
stackitem.NewBigInteger(new(big.Int).SetUint64(epoch)),
|
stackitem.NewBigInteger(new(big.Int).SetUint64(epoch)),
|
||||||
stackitem.NewByteArray(rawPeerID[:]),
|
stackitem.NewByteArray(rawPeerID[:]),
|
||||||
stackitem.NewByteArray(rawValue),
|
stackitem.NewByteArray(rawValue),
|
||||||
})
|
}))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Equal(t, Put{
|
require.Equal(t, Put{
|
||||||
|
@ -85,3 +87,11 @@ func TestParsePut(t *testing.T) {
|
||||||
}, ev)
|
}, ev)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createNotifyEventFromItems(items []stackitem.Item) *subscriptions.NotificationEvent {
|
||||||
|
return &subscriptions.NotificationEvent{
|
||||||
|
NotificationEvent: state.NotificationEvent{
|
||||||
|
Item: stackitem.NewArray(items),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core/native/noderoles"
|
"github.com/nspcc-dev/neo-go/pkg/core/native/noderoles"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -17,7 +17,12 @@ type Designate struct {
|
||||||
func (Designate) MorphEvent() {}
|
func (Designate) MorphEvent() {}
|
||||||
|
|
||||||
// ParseDesignate from notification into container event structure.
|
// ParseDesignate from notification into container event structure.
|
||||||
func ParseDesignate(params []stackitem.Item) (event.Event, error) {
|
func ParseDesignate(e *subscriptions.NotificationEvent) (event.Event, error) {
|
||||||
|
params, err := event.ParseStackArray(e)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("could not parse stack items from notify event: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
if len(params) != 2 {
|
if len(params) != 2 {
|
||||||
return nil, event.WrongNumberOfParameters(2, len(params))
|
return nil, event.WrongNumberOfParameters(2, len(params))
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,24 +4,34 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core/native/noderoles"
|
"github.com/nspcc-dev/neo-go/pkg/core/native/noderoles"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/core/state"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestParseRoleUpdate(t *testing.T) {
|
func TestParseRoleUpdate(t *testing.T) {
|
||||||
t.Run("wrong number of arguments", func(t *testing.T) {
|
t.Run("wrong number of arguments", func(t *testing.T) {
|
||||||
_, err := ParseDesignate([]stackitem.Item{})
|
_, err := ParseDesignate(createNotifyEventFromItems([]stackitem.Item{}))
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
t.Run("invalid item type", func(t *testing.T) {
|
t.Run("invalid item type", func(t *testing.T) {
|
||||||
args := []stackitem.Item{stackitem.NewMap(), stackitem.Make(123)}
|
args := []stackitem.Item{stackitem.NewMap(), stackitem.Make(123)}
|
||||||
_, err := ParseDesignate(args)
|
_, err := ParseDesignate(createNotifyEventFromItems(args))
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
t.Run("good", func(t *testing.T) {
|
t.Run("good", func(t *testing.T) {
|
||||||
args := []stackitem.Item{stackitem.Make(int(noderoles.NeoFSAlphabet)), stackitem.Make(123)}
|
args := []stackitem.Item{stackitem.Make(int(noderoles.NeoFSAlphabet)), stackitem.Make(123)}
|
||||||
e, err := ParseDesignate(args)
|
e, err := ParseDesignate(createNotifyEventFromItems(args))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, noderoles.NeoFSAlphabet, e.(Designate).Role)
|
require.Equal(t, noderoles.NeoFSAlphabet, e.(Designate).Role)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createNotifyEventFromItems(items []stackitem.Item) *subscriptions.NotificationEvent {
|
||||||
|
return &subscriptions.NotificationEvent{
|
||||||
|
NotificationEvent: state.NotificationEvent{
|
||||||
|
Item: stackitem.NewArray(items),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,8 +1,14 @@
|
||||||
package event
|
package event
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core/mempoolevent"
|
"github.com/nspcc-dev/neo-go/pkg/core/mempoolevent"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/rpc/response/result/subscriptions"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/util"
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
||||||
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||||
util2 "github.com/nspcc-dev/neofs-node/pkg/util"
|
util2 "github.com/nspcc-dev/neofs-node/pkg/util"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
@ -88,3 +94,18 @@ func WorkerPoolHandler(w util2.WorkerPool, h Handler, log *zap.Logger) Handler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var errEmptyStackArray = errors.New("stack item array is empty")
|
||||||
|
|
||||||
|
// ParseStackArray parses stack array from raw notification
|
||||||
|
// event received from neo-go RPC node.
|
||||||
|
func ParseStackArray(event *subscriptions.NotificationEvent) ([]stackitem.Item, error) {
|
||||||
|
arr, err := client.ArrayFromStackItem(event.Item)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("stack item is not an array type: %w", err)
|
||||||
|
} else if len(arr) == 0 {
|
||||||
|
return nil, errEmptyStackArray
|
||||||
|
}
|
||||||
|
|
||||||
|
return arr, nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue