core: added a test for missing nonces

This test showed the logic in the queue was slightly flawed sending out
transactions to its peer it couldn't even resolve itself.
This commit is contained in:
obscuren 2015-06-09 00:41:47 +02:00
parent 55b7c14554
commit 5245bd7b20
2 changed files with 24 additions and 1 deletions

View File

@ -331,7 +331,7 @@ func (pool *TxPool) checkQueue() {
// current account nonce. // current account nonce.
sort.Sort(addq) sort.Sort(addq)
for _, e := range addq { for _, e := range addq {
if e.AccountNonce > curnonce+1 { if e.AccountNonce > curnonce {
break break
} }
delete(txs, e.hash) delete(txs, e.hash)

View File

@ -201,3 +201,26 @@ func TestTransactionDoubleNonce(t *testing.T) {
t.Error("expected 2 pending txs. Got", len(pool.pending)) t.Error("expected 2 pending txs. Got", len(pool.pending))
} }
} }
func TestMissingNonce(t *testing.T) {
pool, key := setupTxPool()
addr := crypto.PubkeyToAddress(key.PublicKey)
pool.currentState().AddBalance(addr, big.NewInt(100000000000000))
tx := transaction()
tx.AccountNonce = 1
tx.GasLimit = big.NewInt(100000)
tx.SignECDSA(key)
err := pool.add(tx)
if err != nil {
t.Error("didn't expect error", err)
}
if len(pool.pending) != 0 {
t.Error("expected 0 pending transactions, got", len(pool.pending))
}
if len(pool.queue[addr]) != 1 {
t.Error("expected 1 queued transaction, got", len(pool.queue[addr]))
}
}