neoneo-go/pkg/rpc/response/result/invoke_test.go
Evgenii Stratonikov 7368ff09ef rpc: marshal GAS correctly
When using ",string" in JSON struct tag, value is first unmarshaled to
a numeric value (float64 in our case), then to our real type via
`UnmarshalJSON()`, which can lead to rounding errors.
2020-12-10 15:32:00 +03:00

40 lines
1,018 B
Go

package result
import (
"encoding/base64"
"encoding/json"
"math/big"
"testing"
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
"github.com/stretchr/testify/require"
)
func TestInvoke_MarshalJSON(t *testing.T) {
result := &Invoke{
State: "HALT",
GasConsumed: 237626000,
Script: []byte{10},
Stack: []stackitem.Item{stackitem.NewBigInteger(big.NewInt(1))},
FaultException: "",
// Transaction represents transaction bytes. Use GetTransaction method to decode it.
Transaction: []byte{1, 2, 3, 4},
}
data, err := json.Marshal(result)
require.NoError(t, err)
expected := `{
"state":"HALT",
"gasconsumed":"2.37626",
"script":"` + base64.StdEncoding.EncodeToString(result.Script) + `",
"stack":[
{"type":"Integer","value":"1"}
],
"tx":"` + base64.StdEncoding.EncodeToString(result.Transaction) + `"
}`
require.JSONEq(t, expected, string(data))
actual := new(Invoke)
require.NoError(t, json.Unmarshal(data, actual))
require.Equal(t, result, actual)
}