From 1c8fb3be6454a47def7a562818c570e4264ba0fe Mon Sep 17 00:00:00 2001 From: Stefano Charissis Date: Tue, 6 May 2025 02:17:58 +1000 Subject: [PATCH 1/2] feat(op-acceptance-tests): base; rpc connectivity. --- op-acceptance-tests/acceptance-tests.yaml | 2 + .../tests/base/rpc_connectivity_test.go | 61 +++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 op-acceptance-tests/tests/base/rpc_connectivity_test.go diff --git a/op-acceptance-tests/acceptance-tests.yaml b/op-acceptance-tests/acceptance-tests.yaml index de7d5accc520d..7740e4bd9a44c 100644 --- a/op-acceptance-tests/acceptance-tests.yaml +++ b/op-acceptance-tests/acceptance-tests.yaml @@ -8,6 +8,8 @@ gates: - id: base description: "Sanity/smoke acceptance tests for all networks." tests: + - name: TestRPCConnectivity + package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - name: TestChainFork package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base diff --git a/op-acceptance-tests/tests/base/rpc_connectivity_test.go b/op-acceptance-tests/tests/base/rpc_connectivity_test.go new file mode 100644 index 0000000000000..526572dcc06d5 --- /dev/null +++ b/op-acceptance-tests/tests/base/rpc_connectivity_test.go @@ -0,0 +1,61 @@ +package base + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/ethereum-optimism/optimism/devnet-sdk/system" + "github.com/ethereum-optimism/optimism/devnet-sdk/testing/systest" + "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/ethereum/go-ethereum/log" + "github.com/stretchr/testify/require" +) + +// TestRPCConnectivity checks we can connect to L2 execution layer RPC endpoints +func TestRPCConnectivity(t *testing.T) { + systest.SystemTest(t, + rpcConnectivityTestScenario(), + ) +} + +func rpcConnectivityTestScenario() systest.SystemTestFunc { + return func(t systest.T, sys system.System) { + logger := testlog.Logger(t, log.LevelInfo) + logger.Info("Started L2 RPC connectivity test") + ctx, cancel := context.WithTimeout(t.Context(), 30*time.Second) + defer cancel() + + // Test each L2 chain's execution RPC + for chainIdx, l2Chain := range sys.L2s() { + chainIdx := chainIdx + t.Run(fmt.Sprintf("L2_Chain_%d", chainIdx), func(t systest.T) { + require.NotEmpty(t, l2Chain.Nodes(), "L2 chain has no nodes") + + // Get the first node + execNode := l2Chain.Nodes()[0] + + // Connect to the node's RPC + client, err := execNode.GethClient() + require.NoError(t, err, "failed to connect to L2 execution RPC") + + // Check if we can get chain ID + chainID, err := client.ChainID(ctx) + require.NoError(t, err, "failed to get chain ID from L2 execution RPC") + require.NotNil(t, chainID, "L2 chain ID is nil") + + // Check if we can get the latest block number + blockNumber, err := client.BlockNumber(ctx) + require.NoError(t, err, "failed to get block number from L2 execution RPC") + require.Greater(t, blockNumber, uint64(0), "L2 block number should be greater than 0") + + logger.Info("L2 execution RPC connectivity test passed", + "chain", chainIdx, + "node", execNode.Name(), + "chain_id", chainID, + "block_number", blockNumber) + }) + } + } +} From 6ab64a035879ff18b7ceee8211cd7f6b3330205f Mon Sep 17 00:00:00 2001 From: Stefano Charissis Date: Thu, 8 May 2025 09:59:33 +1000 Subject: [PATCH 2/2] check chainid --- op-acceptance-tests/tests/base/rpc_connectivity_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op-acceptance-tests/tests/base/rpc_connectivity_test.go b/op-acceptance-tests/tests/base/rpc_connectivity_test.go index 526572dcc06d5..01142c17da960 100644 --- a/op-acceptance-tests/tests/base/rpc_connectivity_test.go +++ b/op-acceptance-tests/tests/base/rpc_connectivity_test.go @@ -43,7 +43,7 @@ func rpcConnectivityTestScenario() systest.SystemTestFunc { // Check if we can get chain ID chainID, err := client.ChainID(ctx) require.NoError(t, err, "failed to get chain ID from L2 execution RPC") - require.NotNil(t, chainID, "L2 chain ID is nil") + require.Equal(t, chainIdx, chainID, "L2 chain ID is not correct") // Check if we can get the latest block number blockNumber, err := client.BlockNumber(ctx)