From bd1a54f076935d8d42c1f6df2c54fdd4e7f978ac Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Thu, 26 Mar 2015 10:52:32 +0100 Subject: [PATCH] GetStorageArgs --- rpc/api.go | 6 +---- rpc/args.go | 13 +++-------- rpc/args_test.go | 58 +++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 56 insertions(+), 21 deletions(-) diff --git a/rpc/api.go b/rpc/api.go index b5f759711..f5ce8acb6 100644 --- a/rpc/api.go +++ b/rpc/api.go @@ -106,11 +106,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err return err } - if err := args.requirements(); err != nil { - return err - } - - *reply = api.xethAtStateNum(args.BlockNumber).State().SafeGet(args.Address).Storage() + *reply = api.xethAtStateNum(args.BlockNumber).State().SafeGet(args.Address.Hex()).Storage() case "eth_getStorageAt": args := new(GetStorageAtArgs) if err := json.Unmarshal(req.Params, &args); err != nil { diff --git a/rpc/args.go b/rpc/args.go index 2446e778f..8d7427f6f 100644 --- a/rpc/args.go +++ b/rpc/args.go @@ -149,7 +149,7 @@ func (args *NewTxArgs) UnmarshalJSON(b []byte) (err error) { } type GetStorageArgs struct { - Address string + Address common.Address BlockNumber int64 } @@ -165,9 +165,9 @@ func (args *GetStorageArgs) UnmarshalJSON(b []byte) (err error) { addstr, ok := obj[0].(string) if !ok { - return NewDecodeParamError("Address is not a string") + return NewDecodeParamError("address is not a string") } - args.Address = addstr + args.Address = common.HexToAddress(addstr) if len(obj) > 1 { if err := blockHeight(obj[1], &args.BlockNumber); err != nil { @@ -178,13 +178,6 @@ func (args *GetStorageArgs) UnmarshalJSON(b []byte) (err error) { return nil } -func (args *GetStorageArgs) requirements() error { - if len(args.Address) == 0 { - return NewValidationError("Address", "cannot be blank") - } - return nil -} - type GetStorageAtArgs struct { Address string Key string diff --git a/rpc/args_test.go b/rpc/args_test.go index 328eab0ec..20930a3d8 100644 --- a/rpc/args_test.go +++ b/rpc/args_test.go @@ -239,7 +239,7 @@ func TestNewTxArgsFromEmpty(t *testing.T) { func TestGetStorageArgs(t *testing.T) { input := `["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]` expected := new(GetStorageArgs) - expected.Address = "0x407d73d8a49eeb85d32cf465507dd71d507100c1" + expected.Address = common.HexToAddress("0x407d73d8a49eeb85d32cf465507dd71d507100c1") expected.BlockNumber = -1 args := new(GetStorageArgs) @@ -247,10 +247,6 @@ func TestGetStorageArgs(t *testing.T) { t.Error(err) } - if err := args.requirements(); err != nil { - t.Error(err) - } - if expected.Address != args.Address { t.Errorf("Address shoud be %#v but is %#v", expected.Address, args.Address) } @@ -260,13 +256,63 @@ func TestGetStorageArgs(t *testing.T) { } } +func TestGetStorageInvalidArgs(t *testing.T) { + input := `{}` + + args := new(GetStorageArgs) + err := json.Unmarshal([]byte(input), &args) + switch err.(type) { + case nil: + t.Error("Expected error but didn't get one") + case *DecodeParamError: + break + default: + t.Errorf("Expected *rpc.DecodeParamError but got %T with message `%s`", err, err.Error()) + } +} + +func TestGetStorageInvalidBlockheight(t *testing.T) { + input := `["0x407d73d8a49eeb85d32cf465507dd71d507100c1", {}]` + + args := new(GetStorageArgs) + err := json.Unmarshal([]byte(input), &args) + switch err.(type) { + case nil: + t.Error("Expected error but didn't get one") + case *DecodeParamError: + break + default: + t.Errorf("Expected *rpc.DecodeParamError but got %T with message `%s`", err, err.Error()) + } +} + func TestGetStorageEmptyArgs(t *testing.T) { input := `[]` args := new(GetStorageArgs) err := json.Unmarshal([]byte(input), &args) - if err == nil { + switch err.(type) { + case nil: t.Error("Expected error but didn't get one") + case *InsufficientParamsError: + break + default: + t.Errorf("Expected *rpc.InsufficientParamsError but got %T with message `%s`", err, err.Error()) + } +} + +func TestGetStorageAddressInt(t *testing.T) { + input := `[32456785432456, "latest"]` + + args := new(GetStorageArgs) + err := json.Unmarshal([]byte(input), &args) + switch err.(type) { + case nil: + t.Error("Expected error but didn't get one") + case *DecodeParamError: + break + default: + t.Errorf("Expected *rpc.DecodeParamError but got %T with message `%s`", err, err.Error()) } }