[#7] Add container delete event

Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
Alex Vanin 2020-09-02 16:05:31 +03:00
parent 2422d8bbfe
commit 480b3fd1a9
2 changed files with 118 additions and 0 deletions

View file

@ -0,0 +1,49 @@
package container
import (
"github.com/nspcc-dev/neo-go/pkg/smartcontract"
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
"github.com/pkg/errors"
)
// Delete structure of container.Delete notification from morph chain.
type Delete struct {
containerID []byte
signature []byte
}
// MorphEvent implements Neo:Morph Event interface.
func (Delete) MorphEvent() {}
// Container is a marshalled container structure, defined in API.
func (d Delete) ContainerID() []byte { return d.containerID }
// Signature of marshalled container by container owner.
func (d Delete) Signature() []byte { return d.signature }
// ParseDelete from notification into container event structure.
func ParseDelete(params []smartcontract.Parameter) (event.Event, error) {
var (
ev Delete
err error
)
if ln := len(params); ln != 2 {
return nil, event.WrongNumberOfParameters(2, ln)
}
// parse container
ev.containerID, err = client.BytesFromStackParameter(params[0])
if err != nil {
return nil, errors.Wrap(err, "could not get container")
}
// parse signature
ev.signature, err = client.BytesFromStackParameter(params[1])
if err != nil {
return nil, errors.Wrap(err, "could not get signature")
}
return ev, nil
}

View file

@ -0,0 +1,69 @@
package container
import (
"testing"
"github.com/nspcc-dev/neo-go/pkg/smartcontract"
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
"github.com/stretchr/testify/require"
)
func TestParseDelete(t *testing.T) {
var (
containerID = []byte("containreID")
signature = []byte("signature")
)
t.Run("wrong number of parameters", func(t *testing.T) {
prms := []smartcontract.Parameter{
{},
}
_, err := ParseDelete(prms)
require.EqualError(t, err, event.WrongNumberOfParameters(2, len(prms)).Error())
})
t.Run("wrong container parameter", func(t *testing.T) {
_, err := ParsePut([]smartcontract.Parameter{
{
Type: smartcontract.ArrayType,
},
})
require.Error(t, err)
})
t.Run("wrong signature parameter", func(t *testing.T) {
_, err := ParseDelete([]smartcontract.Parameter{
{
Type: smartcontract.ByteArrayType,
Value: containerID,
},
{
Type: smartcontract.ArrayType,
},
})
require.Error(t, err)
})
t.Run("correct behavior", func(t *testing.T) {
ev, err := ParseDelete([]smartcontract.Parameter{
{
Type: smartcontract.ByteArrayType,
Value: containerID,
},
{
Type: smartcontract.ByteArrayType,
Value: signature,
},
})
require.NoError(t, err)
require.Equal(t, Delete{
containerID: containerID,
signature: signature,
}, ev)
})
}