From b80c840af33aae1ff99ce9879fecc6161a0c1620 Mon Sep 17 00:00:00 2001 From: gary rong Date: Mon, 22 Jul 2019 20:45:40 +0800 Subject: [PATCH] core, les: fix les unit tests (#19823) --- core/tx_pool.go | 4 ++-- core/tx_pool_test.go | 18 +++++++++--------- les/handler.go | 11 ++++++++++- les/handler_test.go | 1 + les/transactions.rlp | 0 5 files changed, 22 insertions(+), 12 deletions(-) create mode 100755 les/transactions.rlp diff --git a/core/tx_pool.go b/core/tx_pool.go index c41d3fbd4..0c422dd99 100644 --- a/core/tx_pool.go +++ b/core/tx_pool.go @@ -745,13 +745,13 @@ func (pool *TxPool) AddRemotes(txs []*types.Transaction) []error { } // This is like AddRemotes, but waits for pool reorganization. Tests use this method. -func (pool *TxPool) addRemotesSync(txs []*types.Transaction) []error { +func (pool *TxPool) AddRemotesSync(txs []*types.Transaction) []error { return pool.addTxs(txs, false, true) } // This is like AddRemotes with a single transaction, but waits for pool reorganization. Tests use this method. func (pool *TxPool) addRemoteSync(tx *types.Transaction) error { - errs := pool.addRemotesSync([]*types.Transaction{tx}) + errs := pool.AddRemotesSync([]*types.Transaction{tx}) return errs[0] } diff --git a/core/tx_pool_test.go b/core/tx_pool_test.go index 7df1a2c6f..388668ed8 100644 --- a/core/tx_pool_test.go +++ b/core/tx_pool_test.go @@ -200,7 +200,7 @@ func TestStateChangeDuringTransactionPoolReset(t *testing.T) { t.Fatalf("Invalid nonce, want 0, got %d", nonce) } - pool.addRemotesSync([]*types.Transaction{tx0, tx1}) + pool.AddRemotesSync([]*types.Transaction{tx0, tx1}) nonce = pool.Nonce(address) if nonce != 2 { @@ -587,7 +587,7 @@ func TestTransactionPostponing(t *testing.T) { txs = append(txs, tx) } } - for i, err := range pool.addRemotesSync(txs) { + for i, err := range pool.AddRemotesSync(txs) { if err != nil { t.Fatalf("tx %d: failed to add transactions: %v", i, err) } @@ -683,7 +683,7 @@ func TestTransactionGapFilling(t *testing.T) { defer sub.Unsubscribe() // Create a pending and a queued transaction with a nonce-gap in between - pool.addRemotesSync([]*types.Transaction{ + pool.AddRemotesSync([]*types.Transaction{ transaction(0, 100000, key), transaction(2, 100000, key), }) @@ -800,7 +800,7 @@ func testTransactionQueueGlobalLimiting(t *testing.T, nolocals bool) { nonces[addr]++ } // Import the batch and verify that limits have been enforced - pool.addRemotesSync(txs) + pool.AddRemotesSync(txs) queued := 0 for addr, list := range pool.queue { @@ -988,7 +988,7 @@ func TestTransactionPendingGlobalLimiting(t *testing.T) { } } // Import the batch and verify that limits have been enforced - pool.addRemotesSync(txs) + pool.AddRemotesSync(txs) pending := 0 for _, list := range pool.pending { @@ -1068,7 +1068,7 @@ func TestTransactionPendingMinimumAllowance(t *testing.T) { } } // Import the batch and verify that limits have been enforced - pool.addRemotesSync(txs) + pool.AddRemotesSync(txs) for addr, list := range pool.pending { if list.Len() != int(config.AccountSlots) { @@ -1124,7 +1124,7 @@ func TestTransactionPoolRepricing(t *testing.T) { ltx := pricedTransaction(0, 100000, big.NewInt(1), keys[3]) // Import the batch and that both pending and queued transactions match up - pool.addRemotesSync(txs) + pool.AddRemotesSync(txs) pool.AddLocal(ltx) pending, queued := pool.Stats() @@ -1404,7 +1404,7 @@ func TestTransactionPoolStableUnderpricing(t *testing.T) { for i := uint64(0); i < config.GlobalSlots; i++ { txs = append(txs, pricedTransaction(i, 100000, big.NewInt(1), keys[0])) } - pool.addRemotesSync(txs) + pool.AddRemotesSync(txs) pending, queued := pool.Stats() if pending != int(config.GlobalSlots) { @@ -1658,7 +1658,7 @@ func TestTransactionStatusCheck(t *testing.T) { txs = append(txs, pricedTransaction(2, 100000, big.NewInt(1), keys[2])) // Queued only // Import the transaction and ensure they are correctly added - pool.addRemotesSync(txs) + pool.AddRemotesSync(txs) pending, queued := pool.Stats() if pending != 2 { diff --git a/les/handler.go b/les/handler.go index 743776bd0..53e2911e4 100644 --- a/les/handler.go +++ b/les/handler.go @@ -85,6 +85,7 @@ type BlockChain interface { type txPool interface { AddRemotes(txs []*types.Transaction) []error + AddRemotesSync(txs []*types.Transaction) []error Status(hashes []common.Hash) []core.TxStatus } @@ -125,6 +126,9 @@ type ProtocolManager struct { // Callbacks synced func() bool + + // Testing fields + addTxsSync bool } // NewProtocolManager returns a new ethereum sub protocol manager. The Ethereum sub protocol manages peers capable @@ -1044,7 +1048,12 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { hash := tx.Hash() stats[i] = pm.txStatus(hash) if stats[i].Status == core.TxStatusUnknown { - if errs := pm.txpool.AddRemotes([]*types.Transaction{tx}); errs[0] != nil { + addFn := pm.txpool.AddRemotes + // Add txs synchronously for testing purpose + if pm.addTxsSync { + addFn = pm.txpool.AddRemotesSync + } + if errs := addFn([]*types.Transaction{tx}); errs[0] != nil { stats[i].Error = errs[0].Error() continue } diff --git a/les/handler_test.go b/les/handler_test.go index 4e16a8979..dae583f6d 100644 --- a/les/handler_test.go +++ b/les/handler_test.go @@ -496,6 +496,7 @@ func TestGetBloombitsProofs(t *testing.T) { func TestTransactionStatusLes2(t *testing.T) { server, tearDown := newServerEnv(t, 0, 2, nil) defer tearDown() + server.pm.addTxsSync = true chain := server.pm.blockchain.(*core.BlockChain) config := core.DefaultTxPoolConfig diff --git a/les/transactions.rlp b/les/transactions.rlp new file mode 100755 index 000000000..e69de29bb