core, les: fix les unit tests (#19823)
This commit is contained in:
parent
a32a2b933a
commit
b80c840af3
@ -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.
|
// 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)
|
return pool.addTxs(txs, false, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is like AddRemotes with a single transaction, but waits for pool reorganization. Tests use this method.
|
// 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 {
|
func (pool *TxPool) addRemoteSync(tx *types.Transaction) error {
|
||||||
errs := pool.addRemotesSync([]*types.Transaction{tx})
|
errs := pool.AddRemotesSync([]*types.Transaction{tx})
|
||||||
return errs[0]
|
return errs[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -200,7 +200,7 @@ func TestStateChangeDuringTransactionPoolReset(t *testing.T) {
|
|||||||
t.Fatalf("Invalid nonce, want 0, got %d", nonce)
|
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)
|
nonce = pool.Nonce(address)
|
||||||
if nonce != 2 {
|
if nonce != 2 {
|
||||||
@ -587,7 +587,7 @@ func TestTransactionPostponing(t *testing.T) {
|
|||||||
txs = append(txs, tx)
|
txs = append(txs, tx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for i, err := range pool.addRemotesSync(txs) {
|
for i, err := range pool.AddRemotesSync(txs) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("tx %d: failed to add transactions: %v", i, err)
|
t.Fatalf("tx %d: failed to add transactions: %v", i, err)
|
||||||
}
|
}
|
||||||
@ -683,7 +683,7 @@ func TestTransactionGapFilling(t *testing.T) {
|
|||||||
defer sub.Unsubscribe()
|
defer sub.Unsubscribe()
|
||||||
|
|
||||||
// Create a pending and a queued transaction with a nonce-gap in between
|
// 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(0, 100000, key),
|
||||||
transaction(2, 100000, key),
|
transaction(2, 100000, key),
|
||||||
})
|
})
|
||||||
@ -800,7 +800,7 @@ func testTransactionQueueGlobalLimiting(t *testing.T, nolocals bool) {
|
|||||||
nonces[addr]++
|
nonces[addr]++
|
||||||
}
|
}
|
||||||
// Import the batch and verify that limits have been enforced
|
// Import the batch and verify that limits have been enforced
|
||||||
pool.addRemotesSync(txs)
|
pool.AddRemotesSync(txs)
|
||||||
|
|
||||||
queued := 0
|
queued := 0
|
||||||
for addr, list := range pool.queue {
|
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
|
// Import the batch and verify that limits have been enforced
|
||||||
pool.addRemotesSync(txs)
|
pool.AddRemotesSync(txs)
|
||||||
|
|
||||||
pending := 0
|
pending := 0
|
||||||
for _, list := range pool.pending {
|
for _, list := range pool.pending {
|
||||||
@ -1068,7 +1068,7 @@ func TestTransactionPendingMinimumAllowance(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Import the batch and verify that limits have been enforced
|
// Import the batch and verify that limits have been enforced
|
||||||
pool.addRemotesSync(txs)
|
pool.AddRemotesSync(txs)
|
||||||
|
|
||||||
for addr, list := range pool.pending {
|
for addr, list := range pool.pending {
|
||||||
if list.Len() != int(config.AccountSlots) {
|
if list.Len() != int(config.AccountSlots) {
|
||||||
@ -1124,7 +1124,7 @@ func TestTransactionPoolRepricing(t *testing.T) {
|
|||||||
ltx := pricedTransaction(0, 100000, big.NewInt(1), keys[3])
|
ltx := pricedTransaction(0, 100000, big.NewInt(1), keys[3])
|
||||||
|
|
||||||
// Import the batch and that both pending and queued transactions match up
|
// Import the batch and that both pending and queued transactions match up
|
||||||
pool.addRemotesSync(txs)
|
pool.AddRemotesSync(txs)
|
||||||
pool.AddLocal(ltx)
|
pool.AddLocal(ltx)
|
||||||
|
|
||||||
pending, queued := pool.Stats()
|
pending, queued := pool.Stats()
|
||||||
@ -1404,7 +1404,7 @@ func TestTransactionPoolStableUnderpricing(t *testing.T) {
|
|||||||
for i := uint64(0); i < config.GlobalSlots; i++ {
|
for i := uint64(0); i < config.GlobalSlots; i++ {
|
||||||
txs = append(txs, pricedTransaction(i, 100000, big.NewInt(1), keys[0]))
|
txs = append(txs, pricedTransaction(i, 100000, big.NewInt(1), keys[0]))
|
||||||
}
|
}
|
||||||
pool.addRemotesSync(txs)
|
pool.AddRemotesSync(txs)
|
||||||
|
|
||||||
pending, queued := pool.Stats()
|
pending, queued := pool.Stats()
|
||||||
if pending != int(config.GlobalSlots) {
|
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
|
txs = append(txs, pricedTransaction(2, 100000, big.NewInt(1), keys[2])) // Queued only
|
||||||
|
|
||||||
// Import the transaction and ensure they are correctly added
|
// Import the transaction and ensure they are correctly added
|
||||||
pool.addRemotesSync(txs)
|
pool.AddRemotesSync(txs)
|
||||||
|
|
||||||
pending, queued := pool.Stats()
|
pending, queued := pool.Stats()
|
||||||
if pending != 2 {
|
if pending != 2 {
|
||||||
|
@ -85,6 +85,7 @@ type BlockChain interface {
|
|||||||
|
|
||||||
type txPool interface {
|
type txPool interface {
|
||||||
AddRemotes(txs []*types.Transaction) []error
|
AddRemotes(txs []*types.Transaction) []error
|
||||||
|
AddRemotesSync(txs []*types.Transaction) []error
|
||||||
Status(hashes []common.Hash) []core.TxStatus
|
Status(hashes []common.Hash) []core.TxStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,6 +126,9 @@ type ProtocolManager struct {
|
|||||||
|
|
||||||
// Callbacks
|
// Callbacks
|
||||||
synced func() bool
|
synced func() bool
|
||||||
|
|
||||||
|
// Testing fields
|
||||||
|
addTxsSync bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewProtocolManager returns a new ethereum sub protocol manager. The Ethereum sub protocol manages peers capable
|
// 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()
|
hash := tx.Hash()
|
||||||
stats[i] = pm.txStatus(hash)
|
stats[i] = pm.txStatus(hash)
|
||||||
if stats[i].Status == core.TxStatusUnknown {
|
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()
|
stats[i].Error = errs[0].Error()
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -496,6 +496,7 @@ func TestGetBloombitsProofs(t *testing.T) {
|
|||||||
func TestTransactionStatusLes2(t *testing.T) {
|
func TestTransactionStatusLes2(t *testing.T) {
|
||||||
server, tearDown := newServerEnv(t, 0, 2, nil)
|
server, tearDown := newServerEnv(t, 0, 2, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
server.pm.addTxsSync = true
|
||||||
|
|
||||||
chain := server.pm.blockchain.(*core.BlockChain)
|
chain := server.pm.blockchain.(*core.BlockChain)
|
||||||
config := core.DefaultTxPoolConfig
|
config := core.DefaultTxPoolConfig
|
||||||
|
0
les/transactions.rlp
Executable file
0
les/transactions.rlp
Executable file
Loading…
Reference in New Issue
Block a user