neo-go/pkg/smartcontract/manifest/group_test.go
Roman Khimov e861aeec2e manifest: disallow null groups, fix #3522
IsValid() is used by both compiler and ContractManagement then.

Signed-off-by: Roman Khimov <roman@nspcc.ru>
2024-07-26 11:22:44 +03:00

65 lines
1.7 KiB
Go

package manifest
import (
"testing"
"github.com/nspcc-dev/neo-go/internal/testserdes"
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
"github.com/nspcc-dev/neo-go/pkg/util"
"github.com/stretchr/testify/require"
)
func TestGroupJSONInOut(t *testing.T) {
priv, err := keys.NewPrivateKey()
require.NoError(t, err)
pub := priv.PublicKey()
sig := make([]byte, keys.SignatureLen)
g := Group{pub, sig}
testserdes.MarshalUnmarshalJSON(t, &g, new(Group))
}
func TestGroupsAreValid(t *testing.T) {
var gps Groups
require.Error(t, gps.AreValid(util.Uint160{})) // null
h := util.Uint160{42, 42, 42}
priv, err := keys.NewPrivateKey()
require.NoError(t, err)
priv2, err := keys.NewPrivateKey()
require.NoError(t, err)
pub := priv.PublicKey()
pub2 := priv2.PublicKey()
gcorrect := Group{pub, priv.Sign(h.BytesBE())}
gcorrect2 := Group{pub2, priv2.Sign(h.BytesBE())}
gincorrect := Group{pub, priv.Sign(h.BytesLE())}
gps = Groups{gcorrect}
require.NoError(t, gps.AreValid(h))
gps = Groups{gincorrect}
require.Error(t, gps.AreValid(h))
gps = Groups{gcorrect, gcorrect2}
require.NoError(t, gps.AreValid(h))
gps = Groups{gcorrect, gcorrect}
require.Error(t, gps.AreValid(h))
gps = Groups{gincorrect}
require.NoError(t, gps.AreValid(util.Uint160{})) // empty hash.
}
func TestGroupsContains(t *testing.T) {
priv, err := keys.NewPrivateKey()
require.NoError(t, err)
priv2, err := keys.NewPrivateKey()
require.NoError(t, err)
priv3, err := keys.NewPrivateKey()
require.NoError(t, err)
g1 := Group{priv.PublicKey(), nil}
g2 := Group{priv2.PublicKey(), nil}
gps := Groups{g1, g2}
require.True(t, gps.Contains(priv2.PublicKey()))
require.False(t, gps.Contains(priv3.PublicKey()))
}