From 9b06a09a8fd349aabc042b6503f792ca5e0e5fba Mon Sep 17 00:00:00 2001 From: allen Date: Wed, 29 Oct 2025 13:46:44 -0400 Subject: [PATCH 1/2] ethclient/gethclient: fix flaky testcase for TestSubscribePendingTxHashes --- ethclient/gethclient/gethclient_test.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/ethclient/gethclient/gethclient_test.go b/ethclient/gethclient/gethclient_test.go index 0eed63cacfe..5debf4964e5 100644 --- a/ethclient/gethclient/gethclient_test.go +++ b/ethclient/gethclient/gethclient_test.go @@ -23,6 +23,7 @@ import ( "math/big" "strings" "testing" + "time" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" @@ -413,12 +414,20 @@ func testSubscribePendingTransactions(t *testing.T, client *rpc.Client) { // Subscribe to Transactions ch1 := make(chan common.Hash) - ec.SubscribePendingTransactions(context.Background(), ch1) + sub1, err := ec.SubscribePendingTransactions(context.Background(), ch1) + if err != nil { + t.Fatalf("Failed to subscribe to pending transactions: %v", err) + } + defer sub1.Unsubscribe() // Subscribe to Transactions ch2 := make(chan *types.Transaction) - ec.SubscribeFullPendingTransactions(context.Background(), ch2) - + sub2, err := ec.SubscribeFullPendingTransactions(context.Background(), ch2) + if err != nil { + t.Fatalf("Failed to subscribe to full pending transactions: %v", err) + } + defer sub2.Unsubscribe() + time.Sleep(100 * time.Millisecond) // Send a transaction chainID, err := ethcl.ChainID(context.Background()) if err != nil { From 0ecf792f98505cca7a3b4c488b45a965966b5cc5 Mon Sep 17 00:00:00 2001 From: allen Date: Wed, 29 Oct 2025 13:57:36 -0400 Subject: [PATCH 2/2] add timeout for channel receiving --- ethclient/gethclient/gethclient_test.go | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/ethclient/gethclient/gethclient_test.go b/ethclient/gethclient/gethclient_test.go index 5debf4964e5..05a66961a8c 100644 --- a/ethclient/gethclient/gethclient_test.go +++ b/ethclient/gethclient/gethclient_test.go @@ -454,14 +454,26 @@ func testSubscribePendingTransactions(t *testing.T, client *rpc.Client) { t.Fatal(err) } // Check that the transaction was sent over the channel - hash := <-ch1 - if hash != signedTx.Hash() { - t.Fatalf("Invalid tx hash received, got %v, want %v", hash, signedTx.Hash()) + select { + case hash := <-ch1: + if hash != signedTx.Hash() { + t.Fatalf("Invalid tx hash received, got %v, want %v", hash, signedTx.Hash()) + } + case err := <-sub1.Err(): + t.Fatalf("Subscription error: %v", err) + case <-time.After(5 * time.Second): + t.Fatal("Timeout waiting for pending transaction hash") } // Check that the transaction was sent over the channel - tx = <-ch2 - if tx.Hash() != signedTx.Hash() { - t.Fatalf("Invalid tx hash received, got %v, want %v", tx.Hash(), signedTx.Hash()) + select { + case tx = <-ch2: + if tx.Hash() != signedTx.Hash() { + t.Fatalf("Invalid tx hash received, got %v, want %v", tx.Hash(), signedTx.Hash()) + } + case err := <-sub2.Err(): + t.Fatalf("Subscription error: %v", err) + case <-time.After(5 * time.Second): + t.Fatal("Timeout waiting for full pending transaction") } }