diff --git a/bchain/coins/eth/ethrpc.go b/bchain/coins/eth/ethrpc.go index c1c64a28..09988fa3 100644 --- a/bchain/coins/eth/ethrpc.go +++ b/bchain/coins/eth/ethrpc.go @@ -157,6 +157,9 @@ func (b *EthRPC) GetBlockHash(height uint32) (string, error) { defer cancel() h, err := b.client.HeaderByNumber(ctx, &n) if err != nil { + if err == ethereum.NotFound { + return "", bchain.ErrBlockNotFound + } return "", err } return ethHashToHash(h.Hash()), nil @@ -183,6 +186,9 @@ func (b *EthRPC) GetBlockHeader(hash string) (*bchain.BlockHeader, error) { defer cancel() h, err := b.client.HeaderByHash(ctx, ethcommon.HexToHash(hash)) if err != nil { + if err == ethereum.NotFound { + return nil, bchain.ErrBlockNotFound + } return nil, err } return b.ethHeaderToBlockHeader(h) @@ -294,7 +300,7 @@ func (b *EthRPC) GetBlock(hash string, height uint32) (*bchain.Block, error) { if err != nil { return nil, err } else if len(raw) == 0 { - return nil, ethereum.NotFound + return nil, bchain.ErrBlockNotFound } // Decode header and transactions. var head *ethtypes.Header @@ -302,6 +308,9 @@ func (b *EthRPC) GetBlock(hash string, height uint32) (*bchain.Block, error) { if err := json.Unmarshal(raw, &head); err != nil { return nil, err } + if head == nil { + return nil, bchain.ErrBlockNotFound + } if err := json.Unmarshal(raw, &body); err != nil { return nil, err } diff --git a/bchain/coins/eth/ethrpc_test.go b/bchain/coins/eth/ethrpc_test.go index 8b8e5d61..83fba6ae 100644 --- a/bchain/coins/eth/ethrpc_test.go +++ b/bchain/coins/eth/ethrpc_test.go @@ -139,7 +139,7 @@ func TestEthRPC_GetBlockHash(t *testing.T) { fields fields args args want string - wantErr bool + wantErr error }{ { name: "1000000", @@ -161,11 +161,22 @@ func TestEthRPC_GetBlockHash(t *testing.T) { }, want: "eccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903895", }, + { + name: "ErrBlockNotFound", + fields: fields{ + b: setupEthRPC(), + }, + args: args{ + height: 1 << 31, + }, + want: "", + wantErr: bchain.ErrBlockNotFound, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := tt.fields.b.GetBlockHash(tt.args.height) - if (err != nil) != tt.wantErr { + if err != tt.wantErr { t.Errorf("EthRPC.GetBlockHash() error = %v, wantErr %v", err, tt.wantErr) return } @@ -192,7 +203,7 @@ func TestEthRPC_GetBlockHeader(t *testing.T) { fields fields args args want *bchain.BlockHeader - wantErr bool + wantErr error }{ { name: "2870000", @@ -208,11 +219,21 @@ func TestEthRPC_GetBlockHeader(t *testing.T) { Confirmations: int(uint32(bh.Number.Uint64()) - 2870000), }, }, + { + name: "ErrBlockNotFound", + fields: fields{ + b: setupEthRPC(), + }, + args: args{ + hash: "eccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903896", + }, + wantErr: bchain.ErrBlockNotFound, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := tt.fields.b.GetBlockHeader(tt.args.hash) - if (err != nil) != tt.wantErr { + if err != tt.wantErr { t.Errorf("EthRPC.GetBlockHeader() error = %v, wantErr %v", err, tt.wantErr) return } @@ -241,7 +262,7 @@ func TestEthRPC_GetBlock(t *testing.T) { args args want *bchain.Block wantTxCount int - wantErr bool + wantErr error }{ { name: "2870000 by hash", @@ -277,14 +298,27 @@ func TestEthRPC_GetBlock(t *testing.T) { }, wantTxCount: 12, }, + { + name: "ErrBlockNotFound", + fields: fields{ + b: setupEthRPC(), + }, + args: args{ + hash: "eccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903896", + }, + wantErr: bchain.ErrBlockNotFound, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := tt.fields.b.GetBlock(tt.args.hash, tt.args.height) - if (err != nil) != tt.wantErr { + if err != tt.wantErr { t.Errorf("EthRPC.GetBlock() error = %v, wantErr %v", err, tt.wantErr) return } + if got == nil && tt.want == nil { + return + } if got.Hash != tt.want.Hash { t.Errorf("EthRPC.GetBlock().Hash = %v, want %v", got.Hash, tt.want.Hash) return