From b6a4dc3d1f96c4d4d6354852160e9150b4ef9cf7 Mon Sep 17 00:00:00 2001 From: inphi Date: Thu, 14 Mar 2024 13:27:59 -0400 Subject: [PATCH] Add /network/status tests for ecotone --- optimism/client_status_test.go | 82 +++++++++++++++++++++++++-- optimism/testdata/ecotone_header.json | 27 +++++++++ 2 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 optimism/testdata/ecotone_header.json diff --git a/optimism/client_status_test.go b/optimism/client_status_test.go index 3a10eb9..9562598 100644 --- a/optimism/client_status_test.go +++ b/optimism/client_status_test.go @@ -25,7 +25,6 @@ import ( RosettaTypes "github.com/coinbase/rosetta-sdk-go/types" ethereum "github.com/ethereum-optimism/optimism/l2geth" - "github.com/ethereum-optimism/optimism/l2geth/core/types" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" @@ -92,11 +91,11 @@ func TestStatus_NotSyncing(t *testing.T) { nil, ).Run( func(args mock.Arguments) { - header := args.Get(1).(**types.Header) + header := args.Get(1).(**rpcHeader) file, err := os.ReadFile("testdata/basic_header.json") assert.NoError(t, err) - *header = new(types.Header) + *header = new(rpcHeader) assert.NoError(t, (*header).UnmarshalJSON(file)) }, @@ -165,11 +164,11 @@ func TestStatus_Syncing(t *testing.T) { nil, ).Run( func(args mock.Arguments) { - header := args.Get(1).(**types.Header) + header := args.Get(1).(**rpcHeader) file, err := os.ReadFile("testdata/basic_header.json") assert.NoError(t, err) - *header = new(types.Header) + *header = new(rpcHeader) assert.NoError(t, (*header).UnmarshalJSON(file)) }, @@ -211,3 +210,76 @@ func TestStatus_Syncing(t *testing.T) { mockJSONRPC.AssertExpectations(t) mockGraphQL.AssertExpectations(t) } + +func TestStatus_Ecotone_Syncing(t *testing.T) { + mockJSONRPC := &mocks.JSONRPC{} + mockGraphQL := &mocks.GraphQL{} + cf, err := newERC20CurrencyFetcher(mockJSONRPC) + assert.NoError(t, err) + + c := &Client{ + c: mockJSONRPC, + g: mockGraphQL, + currencyFetcher: cf, + traceSemaphore: semaphore.NewWeighted(100), + supportsSyncing: true, + } + + ctx := context.Background() + mockJSONRPC.On( + "CallContext", + ctx, + mock.Anything, + "eth_getBlockByNumber", + "safe", + false, + ).Return( + nil, + ).Run( + func(args mock.Arguments) { + header := args.Get(1).(**rpcHeader) + file, err := os.ReadFile("testdata/ecotone_header.json") + assert.NoError(t, err) + + *header = new(rpcHeader) + + assert.NoError(t, (*header).UnmarshalJSON(file)) + }, + ).Once() + + mockJSONRPC.On( + "CallContext", + ctx, + mock.Anything, + "eth_syncing", + ).Return( + nil, + ).Run( + func(args mock.Arguments) { + rpcp := args.Get(1).(*json.RawMessage) + j, err := json.Marshal(&rpcProgress{ + CurrentBlock: hexutil.Uint64(117418562), + HighestBlock: hexutil.Uint64(117418562), + }) + assert.NoError(t, err) + rawMessage := json.RawMessage(j) + *rpcp = rawMessage + }, + ).Once() + + block, timestamp, syncStatus, peers, err := c.Status(ctx) + assert.Equal(t, &RosettaTypes.BlockIdentifier{ + Hash: "0x0be3b6bfa35290d847039ae03d72e6d54d9fd053232e8be4facf1aa0d1040588", + Index: 117418562, + }, block) + assert.Equal(t, int64(1710435901000), timestamp) + assert.Equal(t, &RosettaTypes.SyncStatus{ + CurrentIndex: RosettaTypes.Int64(117418562), + TargetIndex: RosettaTypes.Int64(117418562), + }, syncStatus) + assert.Equal(t, peers, []*RosettaTypes.Peer{}) + assert.NoError(t, err) + + mockJSONRPC.AssertExpectations(t) + mockGraphQL.AssertExpectations(t) +} diff --git a/optimism/testdata/ecotone_header.json b/optimism/testdata/ecotone_header.json new file mode 100644 index 0000000..c1e2b24 --- /dev/null +++ b/optimism/testdata/ecotone_header.json @@ -0,0 +1,27 @@ +{ + "hash": "0x0be3b6bfa35290d847039ae03d72e6d54d9fd053232e8be4facf1aa0d1040588", + "parentHash": "0x2a909b91753f374e68c09a381ce8c10a195c26c95702455e5509090ba773fc2f", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "miner": "0x4200000000000000000000000000000000000011", + "stateRoot": "0x0f927021748b9b26d542c75a82ea30c43bfea0e2fa15b2893a74d80a5e0b7df4", + "transactionsRoot": "0x30f71e65a8de43160cb6cf081b0098795d1e091c740f5adc05b86c1b98cef2ba", + "receiptsRoot": "0xa17c4de7b1fe42bba2a435cecaeb79f0cbda1ba7f6a179e8fd5f92cd1ff04b42", + "number": "0x6ffaa42", + "gasUsed": "0x1c9ecf", + "gasLimit": "0x1c9c380", + "extraData": "0x", + "logsBloom": "0x046a60400b00000808000080800100000000400800000000281c0001004900000400108000600041804400102018000000000240020020000500004400242040004040220c0820082140008c008038201081400000040204000000018000000102040000020400014040040001000800000090000100400002000298080900100402000000000000040003001200000004205003aea0221a100000c0038010000280000400004324200002040000008200241000010900000200008002180004c000100a000008080104009600000010708080410408021000090006000060801010810922829000000000080001110000000000805018480402480008010000", + "timestamp": "0x65f32e3d", + "difficulty": "0x0", + "totalDifficulty": "0x0", + "sealFields": [], + "uncles": [], + "mixHash": "0xe6788e8b489cc99818ca79c6c6a8c72fb1232e29b47ab2426087a7a6e981e4d0", + "nonce": "0x0000000000000000", + "baseFeePerGas": "0x3736e3b", + "blobGasUsed": "0x0", + "excessBlobGas": "0x0", + "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawals": [], + "parentBeaconBlockRoot": "0xdbcf5447bf356c3e098700e51ee0f23368901ef052f227e02f3660f079047f3a" +}