2020-01-14 12:02:38 +00:00
|
|
|
package request
|
2019-11-21 14:42:02 +00:00
|
|
|
|
|
|
|
import (
|
2019-11-26 10:13:17 +00:00
|
|
|
"encoding/hex"
|
2019-11-21 14:42:02 +00:00
|
|
|
"encoding/json"
|
|
|
|
"testing"
|
|
|
|
|
2020-05-13 10:16:42 +00:00
|
|
|
"github.com/nspcc-dev/neo-go/pkg/core/transaction"
|
2020-03-03 14:21:42 +00:00
|
|
|
"github.com/nspcc-dev/neo-go/pkg/encoding/address"
|
|
|
|
"github.com/nspcc-dev/neo-go/pkg/smartcontract"
|
|
|
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
2019-11-26 10:13:17 +00:00
|
|
|
"github.com/stretchr/testify/assert"
|
2019-11-21 14:42:02 +00:00
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestParam_UnmarshalJSON(t *testing.T) {
|
2020-06-08 13:38:44 +00:00
|
|
|
msg := `["str1", 123, null, ["str2", 3], [{"type": "String", "value": "jajaja"}],
|
2020-05-13 10:16:42 +00:00
|
|
|
{"type": "MinerTransaction"},
|
|
|
|
{"contract": "f84d6a337fbc3d3a201d41da99e86b479e7a2554"},
|
|
|
|
{"state": "HALT"}]`
|
|
|
|
contr, err := util.Uint160DecodeStringLE("f84d6a337fbc3d3a201d41da99e86b479e7a2554")
|
|
|
|
require.NoError(t, err)
|
2019-11-21 14:42:02 +00:00
|
|
|
expected := Params{
|
|
|
|
{
|
2020-01-14 12:02:38 +00:00
|
|
|
Type: StringT,
|
2019-11-21 14:42:02 +00:00
|
|
|
Value: "str1",
|
|
|
|
},
|
|
|
|
{
|
2020-01-14 12:02:38 +00:00
|
|
|
Type: NumberT,
|
2019-11-21 14:42:02 +00:00
|
|
|
Value: 123,
|
|
|
|
},
|
2020-06-08 13:38:44 +00:00
|
|
|
{
|
|
|
|
Type: defaultT,
|
|
|
|
},
|
2019-11-21 14:42:02 +00:00
|
|
|
{
|
2020-01-14 12:02:38 +00:00
|
|
|
Type: ArrayT,
|
2019-11-21 14:42:02 +00:00
|
|
|
Value: []Param{
|
|
|
|
{
|
2020-01-14 12:02:38 +00:00
|
|
|
Type: StringT,
|
2019-11-21 14:42:02 +00:00
|
|
|
Value: "str2",
|
|
|
|
},
|
|
|
|
{
|
2020-01-14 12:02:38 +00:00
|
|
|
Type: NumberT,
|
2019-11-21 14:42:02 +00:00
|
|
|
Value: 3,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
2019-11-26 10:13:17 +00:00
|
|
|
{
|
2020-01-14 12:02:38 +00:00
|
|
|
Type: ArrayT,
|
2019-11-26 10:13:17 +00:00
|
|
|
Value: []Param{
|
|
|
|
{
|
2020-01-14 12:02:38 +00:00
|
|
|
Type: FuncParamT,
|
2019-11-26 10:13:17 +00:00
|
|
|
Value: FuncParam{
|
2020-02-21 14:34:18 +00:00
|
|
|
Type: smartcontract.StringType,
|
2019-11-26 10:13:17 +00:00
|
|
|
Value: Param{
|
2020-01-14 12:02:38 +00:00
|
|
|
Type: StringT,
|
2019-11-26 10:13:17 +00:00
|
|
|
Value: "jajaja",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
2020-05-13 10:16:42 +00:00
|
|
|
{
|
|
|
|
Type: TxFilterT,
|
|
|
|
Value: TxFilter{Type: transaction.MinerType},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Type: NotificationFilterT,
|
|
|
|
Value: NotificationFilter{Contract: contr},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
Type: ExecutionFilterT,
|
|
|
|
Value: ExecutionFilter{State: "HALT"},
|
|
|
|
},
|
2019-11-21 14:42:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
var ps Params
|
|
|
|
require.NoError(t, json.Unmarshal([]byte(msg), &ps))
|
|
|
|
require.Equal(t, expected, ps)
|
|
|
|
|
|
|
|
msg = `[{"2": 3}]`
|
|
|
|
require.Error(t, json.Unmarshal([]byte(msg), &ps))
|
|
|
|
}
|
2019-11-26 10:13:17 +00:00
|
|
|
|
|
|
|
func TestParamGetString(t *testing.T) {
|
2020-01-14 12:02:38 +00:00
|
|
|
p := Param{StringT, "jajaja"}
|
2019-11-26 10:13:17 +00:00
|
|
|
str, err := p.GetString()
|
|
|
|
assert.Equal(t, "jajaja", str)
|
|
|
|
require.Nil(t, err)
|
|
|
|
|
2020-01-14 12:02:38 +00:00
|
|
|
p = Param{StringT, int(100500)}
|
2019-11-26 10:13:17 +00:00
|
|
|
_, err = p.GetString()
|
|
|
|
require.NotNil(t, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestParamGetInt(t *testing.T) {
|
2020-01-14 12:02:38 +00:00
|
|
|
p := Param{NumberT, int(100500)}
|
2019-11-26 10:13:17 +00:00
|
|
|
i, err := p.GetInt()
|
|
|
|
assert.Equal(t, 100500, i)
|
|
|
|
require.Nil(t, err)
|
|
|
|
|
2020-01-14 12:02:38 +00:00
|
|
|
p = Param{NumberT, "jajaja"}
|
2019-11-26 10:13:17 +00:00
|
|
|
_, err = p.GetInt()
|
|
|
|
require.NotNil(t, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestParamGetArray(t *testing.T) {
|
2020-01-14 12:02:38 +00:00
|
|
|
p := Param{ArrayT, []Param{{NumberT, 42}}}
|
2019-11-26 10:13:17 +00:00
|
|
|
a, err := p.GetArray()
|
2020-01-14 12:02:38 +00:00
|
|
|
assert.Equal(t, []Param{{NumberT, 42}}, a)
|
2019-11-26 10:13:17 +00:00
|
|
|
require.Nil(t, err)
|
|
|
|
|
2020-01-14 12:02:38 +00:00
|
|
|
p = Param{ArrayT, 42}
|
2019-11-26 10:13:17 +00:00
|
|
|
_, err = p.GetArray()
|
|
|
|
require.NotNil(t, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestParamGetUint256(t *testing.T) {
|
|
|
|
gas := "602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7"
|
2019-11-27 09:23:18 +00:00
|
|
|
u256, _ := util.Uint256DecodeStringLE(gas)
|
2020-01-14 12:02:38 +00:00
|
|
|
p := Param{StringT, gas}
|
2019-11-26 10:13:17 +00:00
|
|
|
u, err := p.GetUint256()
|
|
|
|
assert.Equal(t, u256, u)
|
|
|
|
require.Nil(t, err)
|
|
|
|
|
2020-01-14 12:02:38 +00:00
|
|
|
p = Param{StringT, 42}
|
2019-11-26 10:13:17 +00:00
|
|
|
_, err = p.GetUint256()
|
|
|
|
require.NotNil(t, err)
|
|
|
|
|
2020-01-14 12:02:38 +00:00
|
|
|
p = Param{StringT, "qq2c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7"}
|
2019-11-26 10:13:17 +00:00
|
|
|
_, err = p.GetUint256()
|
|
|
|
require.NotNil(t, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestParamGetUint160FromHex(t *testing.T) {
|
|
|
|
in := "50befd26fdf6e4d957c11e078b24ebce6291456f"
|
2019-12-06 16:47:58 +00:00
|
|
|
u160, _ := util.Uint160DecodeStringLE(in)
|
2020-01-14 12:02:38 +00:00
|
|
|
p := Param{StringT, in}
|
2019-11-26 10:13:17 +00:00
|
|
|
u, err := p.GetUint160FromHex()
|
|
|
|
assert.Equal(t, u160, u)
|
|
|
|
require.Nil(t, err)
|
|
|
|
|
2020-01-14 12:02:38 +00:00
|
|
|
p = Param{StringT, 42}
|
2019-11-26 10:13:17 +00:00
|
|
|
_, err = p.GetUint160FromHex()
|
|
|
|
require.NotNil(t, err)
|
|
|
|
|
2020-01-14 12:02:38 +00:00
|
|
|
p = Param{StringT, "wwbefd26fdf6e4d957c11e078b24ebce6291456f"}
|
2019-11-26 10:13:17 +00:00
|
|
|
_, err = p.GetUint160FromHex()
|
|
|
|
require.NotNil(t, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestParamGetUint160FromAddress(t *testing.T) {
|
|
|
|
in := "AK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y"
|
2019-12-25 14:34:18 +00:00
|
|
|
u160, _ := address.StringToUint160(in)
|
2020-01-14 12:02:38 +00:00
|
|
|
p := Param{StringT, in}
|
2019-11-26 10:13:17 +00:00
|
|
|
u, err := p.GetUint160FromAddress()
|
|
|
|
assert.Equal(t, u160, u)
|
|
|
|
require.Nil(t, err)
|
|
|
|
|
2020-01-14 12:02:38 +00:00
|
|
|
p = Param{StringT, 42}
|
2019-11-26 10:13:17 +00:00
|
|
|
_, err = p.GetUint160FromAddress()
|
|
|
|
require.NotNil(t, err)
|
|
|
|
|
2020-01-14 12:02:38 +00:00
|
|
|
p = Param{StringT, "QK2nJJpJr6o664CWJKi1QRXjqeic2zRp8y"}
|
2019-11-26 10:13:17 +00:00
|
|
|
_, err = p.GetUint160FromAddress()
|
|
|
|
require.NotNil(t, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestParamGetFuncParam(t *testing.T) {
|
|
|
|
fp := FuncParam{
|
2020-02-21 14:34:18 +00:00
|
|
|
Type: smartcontract.StringType,
|
2019-11-26 10:13:17 +00:00
|
|
|
Value: Param{
|
2020-01-14 12:02:38 +00:00
|
|
|
Type: StringT,
|
2019-11-26 10:13:17 +00:00
|
|
|
Value: "jajaja",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
p := Param{
|
2020-01-14 12:02:38 +00:00
|
|
|
Type: FuncParamT,
|
2019-11-26 10:13:17 +00:00
|
|
|
Value: fp,
|
|
|
|
}
|
|
|
|
newfp, err := p.GetFuncParam()
|
|
|
|
assert.Equal(t, fp, newfp)
|
|
|
|
require.Nil(t, err)
|
|
|
|
|
2020-01-14 12:02:38 +00:00
|
|
|
p = Param{FuncParamT, 42}
|
2019-11-26 10:13:17 +00:00
|
|
|
_, err = p.GetFuncParam()
|
|
|
|
require.NotNil(t, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestParamGetBytesHex(t *testing.T) {
|
|
|
|
in := "602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7"
|
|
|
|
inb, _ := hex.DecodeString(in)
|
2020-01-14 12:02:38 +00:00
|
|
|
p := Param{StringT, in}
|
2019-11-26 10:13:17 +00:00
|
|
|
bh, err := p.GetBytesHex()
|
|
|
|
assert.Equal(t, inb, bh)
|
|
|
|
require.Nil(t, err)
|
|
|
|
|
2020-01-14 12:02:38 +00:00
|
|
|
p = Param{StringT, 42}
|
2019-11-26 10:13:17 +00:00
|
|
|
_, err = p.GetBytesHex()
|
|
|
|
require.NotNil(t, err)
|
|
|
|
|
2020-01-14 12:02:38 +00:00
|
|
|
p = Param{StringT, "qq2c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7"}
|
2019-11-26 10:13:17 +00:00
|
|
|
_, err = p.GetBytesHex()
|
|
|
|
require.NotNil(t, err)
|
|
|
|
}
|