github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/smartcontract/nef/method_token_test.go (about) 1 package nef 2 3 import ( 4 "strings" 5 "testing" 6 7 "github.com/nspcc-dev/neo-go/internal/random" 8 "github.com/nspcc-dev/neo-go/internal/testserdes" 9 "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestMethodToken_Serializable(t *testing.T) { 14 getToken := func() *MethodToken { 15 return &MethodToken{ 16 Hash: random.Uint160(), 17 Method: "MethodName", 18 ParamCount: 2, 19 HasReturn: true, 20 CallFlag: callflag.ReadStates, 21 } 22 } 23 t.Run("good", func(t *testing.T) { 24 testserdes.EncodeDecodeBinary(t, getToken(), new(MethodToken)) 25 }) 26 t.Run("too long name", func(t *testing.T) { 27 tok := getToken() 28 tok.Method = strings.Repeat("s", maxMethodLength+1) 29 data, err := testserdes.EncodeBinary(tok) 30 require.NoError(t, err) 31 require.Error(t, testserdes.DecodeBinary(data, new(MethodToken))) 32 }) 33 t.Run("start with '_'", func(t *testing.T) { 34 tok := getToken() 35 tok.Method = "_method" 36 data, err := testserdes.EncodeBinary(tok) 37 require.NoError(t, err) 38 err = testserdes.DecodeBinary(data, new(MethodToken)) 39 require.ErrorIs(t, err, errInvalidMethodName) 40 }) 41 t.Run("invalid call flag", func(t *testing.T) { 42 tok := getToken() 43 tok.CallFlag = ^callflag.All 44 data, err := testserdes.EncodeBinary(tok) 45 require.NoError(t, err) 46 err = testserdes.DecodeBinary(data, new(MethodToken)) 47 require.ErrorIs(t, err, errInvalidCallFlag) 48 }) 49 }