aboutsummaryrefslogtreecommitdiffstats
path: root/rpc
diff options
context:
space:
mode:
Diffstat (limited to 'rpc')
-rw-r--r--rpc/types.go18
-rw-r--r--rpc/types_test.go154
2 files changed, 158 insertions, 14 deletions
diff --git a/rpc/types.go b/rpc/types.go
index 806c9c8a4..bc9a46ed5 100644
--- a/rpc/types.go
+++ b/rpc/types.go
@@ -43,16 +43,11 @@ func (d *hexdata) MarshalJSON() ([]byte, error) {
return json.Marshal(d.String())
}
-func (d *hexdata) UnmarshalJSON(b []byte) (err error) {
- d.data = common.FromHex(string(b))
- return nil
-}
-
func newHexData(input interface{}) *hexdata {
d := new(hexdata)
if input == nil {
- d.data = nil
+ d.isNil = true
return d
}
switch input := input.(type) {
@@ -105,19 +100,19 @@ func newHexData(input interface{}) *hexdata {
case int16:
d.data = big.NewInt(int64(input)).Bytes()
case uint16:
- buff := make([]byte, 8)
+ buff := make([]byte, 2)
binary.BigEndian.PutUint16(buff, input)
d.data = buff
case int32:
d.data = big.NewInt(int64(input)).Bytes()
case uint32:
- buff := make([]byte, 8)
+ buff := make([]byte, 4)
binary.BigEndian.PutUint32(buff, input)
d.data = buff
case string: // hexstring
d.data = common.Big(input).Bytes()
default:
- d.data = nil
+ d.isNil = true
}
return d
@@ -147,11 +142,6 @@ func (d *hexnum) MarshalJSON() ([]byte, error) {
return json.Marshal(d.String())
}
-func (d *hexnum) UnmarshalJSON(b []byte) (err error) {
- d.data = common.FromHex(string(b))
- return nil
-}
-
func newHexNum(input interface{}) *hexnum {
d := new(hexnum)
diff --git a/rpc/types_test.go b/rpc/types_test.go
index 91f0152dc..9ef7b8d38 100644
--- a/rpc/types_test.go
+++ b/rpc/types_test.go
@@ -1,7 +1,13 @@
package rpc
import (
+ "bytes"
+ "encoding/json"
+ "math/big"
"testing"
+
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/core/types"
)
func TestInvalidTypeError(t *testing.T) {
@@ -48,3 +54,151 @@ func TestValidationError(t *testing.T) {
t.Error(err.Error())
}
}
+
+func TestHexdataMarshalNil(t *testing.T) {
+ hd := newHexData([]byte{})
+ hd.isNil = true
+ v, _ := json.Marshal(hd)
+ if string(v) != "null" {
+ t.Errorf("Expected null, got %s", v)
+ }
+}
+
+func TestHexnumMarshalNil(t *testing.T) {
+ hn := newHexNum([]byte{})
+ hn.isNil = true
+ v, _ := json.Marshal(hn)
+ if string(v) != "null" {
+ t.Errorf("Expected null, got %s", v)
+ }
+}
+
+func TestHexdataNil(t *testing.T) {
+ v := newHexData(nil)
+ if v.isNil != true {
+ t.Errorf("Expected isNil to be true, but is %v", v.isNil)
+ }
+}
+
+func TestHexdataPtrHash(t *testing.T) {
+ in := common.Hash{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}
+ v := newHexData(&in)
+ if bytes.Compare(in.Bytes(), v.data) != 0 {
+ t.Errorf("Got % x expected % x", in, v.data)
+ }
+}
+
+func TestHexdataPtrHashNil(t *testing.T) {
+ var in *common.Hash
+ in = nil
+ v := newHexData(in)
+ if !v.isNil {
+ t.Errorf("Expect isNil to be true, but is %v", v.isNil)
+ }
+}
+
+func TestHexdataPtrAddress(t *testing.T) {
+ in := common.Address{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}
+ v := newHexData(&in)
+ if bytes.Compare(in.Bytes(), v.data) != 0 {
+ t.Errorf("Got % x expected % x", in, v.data)
+ }
+}
+
+func TestHexdataPtrAddressNil(t *testing.T) {
+ var in *common.Address
+ in = nil
+ v := newHexData(in)
+ if !v.isNil {
+ t.Errorf("Expect isNil to be true, but is %v", v.isNil)
+ }
+}
+
+func TestHexdataPtrBloom(t *testing.T) {
+ in := types.Bloom{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}
+ v := newHexData(&in)
+ if bytes.Compare(in.Bytes(), v.data) != 0 {
+ t.Errorf("Got % x expected % x", in, v.data)
+ }
+}
+
+func TestHexdataPtrBloomNil(t *testing.T) {
+ var in *types.Bloom
+ in = nil
+ v := newHexData(in)
+ if !v.isNil {
+ t.Errorf("Expect isNil to be true, but is %v", v.isNil)
+ }
+}
+
+func TestHexdataBigintNil(t *testing.T) {
+ var in *big.Int
+ in = nil
+ v := newHexData(in)
+ if !v.isNil {
+ t.Errorf("Expect isNil to be true, but is %v", v.isNil)
+ }
+}
+
+func TestHexdataUint(t *testing.T) {
+ var in = uint(16)
+ var expected = []byte{0x10}
+ v := newHexData(in)
+ if bytes.Compare(expected, v.data) != 0 {
+ t.Errorf("Expected % x got % x", expected, v.data)
+ }
+}
+
+func TestHexdataInt8(t *testing.T) {
+ var in = int8(16)
+ var expected = []byte{0x10}
+ v := newHexData(in)
+ if bytes.Compare(expected, v.data) != 0 {
+ t.Errorf("Expected % x got % x", expected, v.data)
+ }
+}
+
+func TestHexdataUint8(t *testing.T) {
+ var in = uint8(16)
+ var expected = []byte{0x10}
+ v := newHexData(in)
+ if bytes.Compare(expected, v.data) != 0 {
+ t.Errorf("Expected % x got % x", expected, v.data)
+ }
+}
+
+func TestHexdataInt16(t *testing.T) {
+ var in = int16(16)
+ var expected = []byte{0x10}
+ v := newHexData(in)
+ if bytes.Compare(expected, v.data) != 0 {
+ t.Errorf("Expected % x got % x", expected, v.data)
+ }
+}
+
+func TestHexdataUint16(t *testing.T) {
+ var in = uint16(16)
+ var expected = []byte{0x0, 0x10}
+ v := newHexData(in)
+ if bytes.Compare(expected, v.data) != 0 {
+ t.Errorf("Expected % x got % x", expected, v.data)
+ }
+}
+
+func TestHexdataInt32(t *testing.T) {
+ var in = int32(16)
+ var expected = []byte{0x10}
+ v := newHexData(in)
+ if bytes.Compare(expected, v.data) != 0 {
+ t.Errorf("Expected % x got % x", expected, v.data)
+ }
+}
+
+func TestHexdataUint32(t *testing.T) {
+ var in = uint32(16)
+ var expected = []byte{0x0, 0x0, 0x0, 0x10}
+ v := newHexData(in)
+ if bytes.Compare(expected, v.data) != 0 {
+ t.Errorf("Expected % x got % x", expected, v.data)
+ }
+}