diff options
Diffstat (limited to 'data/txHandler_test.go')
-rw-r--r-- | data/txHandler_test.go | 172 |
1 files changed, 15 insertions, 157 deletions
diff --git a/data/txHandler_test.go b/data/txHandler_test.go index ad3bbc833..a53d83163 100644 --- a/data/txHandler_test.go +++ b/data/txHandler_test.go @@ -29,18 +29,19 @@ import ( "github.com/algorand/go-algorand/crypto" "github.com/algorand/go-algorand/data/basics" "github.com/algorand/go-algorand/data/bookkeeping" - "github.com/algorand/go-algorand/data/pooldata" "github.com/algorand/go-algorand/data/pools" "github.com/algorand/go-algorand/data/transactions" "github.com/algorand/go-algorand/logging" "github.com/algorand/go-algorand/protocol" - "github.com/algorand/go-algorand/test/partitiontest" "github.com/algorand/go-algorand/util/execpool" ) -func makeTestingTransactionPoolAndLedger(tb testing.TB, N int) (*pools.TransactionPool, *Ledger, []*crypto.SignatureSecrets, []basics.Address) { +func BenchmarkTxHandlerProcessDecoded(b *testing.B) { + b.StopTimer() + b.ResetTimer() + const numRounds = 10 const numUsers = 100 - log := logging.TestingLog(tb) + log := logging.TestingLog(b) secrets := make([]*crypto.SignatureSecrets, numUsers) addresses := make([]basics.Address, numUsers) @@ -61,25 +62,20 @@ func makeTestingTransactionPoolAndLedger(tb testing.TB, N int) (*pools.Transacti MicroAlgos: basics.MicroAlgos{Raw: config.Consensus[protocol.ConsensusCurrentVersion].MinBalance}, } - require.Equal(tb, len(genesis), numUsers+1) + require.Equal(b, len(genesis), numUsers+1) genBal := bookkeeping.MakeGenesisBalances(genesis, sinkAddr, poolAddr) - ledgerName := fmt.Sprintf("%s-mem-%d", tb.Name(), N) + ledgerName := fmt.Sprintf("%s-mem-%d", b.Name(), b.N) const inMem = true cfg := config.GetDefaultLocal() cfg.Archival = true ledger, err := LoadLedger(log, ledgerName, inMem, protocol.ConsensusCurrentVersion, genBal, genesisID, genesisHash, nil, cfg) - require.NoError(tb, err) + require.NoError(b, err) + + l := ledger cfg.TxPoolSize = 20000 cfg.EnableProcessBlockStats = false - tp := pools.MakeTransactionPool(ledger.Ledger, cfg, logging.Base()) - return tp, ledger, secrets, addresses -} - -func BenchmarkTxHandlerProcessDecoded(b *testing.B) { - const numUsers = 100 - tp, l, secrets, addresses := makeTestingTransactionPoolAndLedger(b, b.N) - defer l.Close() + tp := pools.MakeTransactionPool(l.Ledger, cfg, logging.Base()) signedTransactions := make([]transactions.SignedTxn, 0, b.N) for i := 0; i < b.N/numUsers; i++ { for u := 0; u < numUsers; u++ { @@ -104,17 +100,19 @@ func BenchmarkTxHandlerProcessDecoded(b *testing.B) { } backlogPool := execpool.MakeBacklog(nil, 0, execpool.LowPriority, nil) txHandler := MakeTxHandler(tp, l, &mocks.MockNetwork{}, "", crypto.Digest{}, backlogPool) - b.ResetTimer() + b.StartTimer() for _, signedTxn := range signedTransactions { txHandler.processDecoded([]transactions.SignedTxn{signedTxn}) } } func BenchmarkTimeAfter(b *testing.B) { + b.StopTimer() + b.ResetTimer() deadline := time.Now().Add(5 * time.Second) after := 0 before := 0 - b.ResetTimer() + b.StartTimer() for i := 0; i < b.N; i++ { if time.Now().After(deadline) { after++ @@ -123,143 +121,3 @@ func BenchmarkTimeAfter(b *testing.B) { } } } -func TestFilterAlreadyCommitted(t *testing.T) { - partitiontest.PartitionTest(t) - - const numUsers = 100 - tp, l, secrets, addresses := makeTestingTransactionPoolAndLedger(t, 1) - defer l.Close() - signedTransactions := make([]transactions.SignedTxn, 0, 100) - - for u := 0; u < numUsers; u++ { - // generate transactions - tx := transactions.Transaction{ - Type: protocol.PaymentTx, - Header: transactions.Header{ - Sender: addresses[u], - Fee: basics.MicroAlgos{Raw: proto.MinTxnFee * 2}, - FirstValid: 0, - LastValid: basics.Round(proto.MaxTxnLife), - GenesisHash: l.GenesisHash(), - Note: make([]byte, 2), - }, - PaymentTxnFields: transactions.PaymentTxnFields{ - Receiver: addresses[(u+1)%numUsers], - Amount: basics.MicroAlgos{Raw: mockBalancesMinBalance + (rand.Uint64() % 10000)}, - }, - } - signedTx := tx.Sign(secrets[u]) - signedTransactions = append(signedTransactions, signedTx) - } - - backlogPool := execpool.MakeBacklog(nil, 0, execpool.LowPriority, nil) - txHandler := MakeTxHandler(tp, l, &mocks.MockNetwork{}, "", crypto.Digest{}, backlogPool) - - // add the first 10 transactions to the pool. - for i := 0; i < 10; i++ { - tp.Remember(pooldata.SignedTxGroup{Transactions: []transactions.SignedTxn{signedTransactions[i]}}) - } - - allNew := []pooldata.SignedTxGroup{ - pooldata.SignedTxGroup{ - Transactions: signedTransactions[10:11], - }, - pooldata.SignedTxGroup{ - Transactions: signedTransactions[11:12], - }, - } - allNewRef := []pooldata.SignedTxGroup{ - pooldata.SignedTxGroup{ - Transactions: signedTransactions[10:11], - }, - pooldata.SignedTxGroup{ - Transactions: signedTransactions[11:12], - }, - } - allNewTransactions, allNewNonDupFilteredGroups := txHandler.filterAlreadyCommitted(allNew) - require.Equal(t, allNewRef, allNewTransactions) - require.False(t, allNewNonDupFilteredGroups) - - firstTxDup := []pooldata.SignedTxGroup{ - pooldata.SignedTxGroup{ - Transactions: []transactions.SignedTxn{signedTransactions[1]}, - }, - pooldata.SignedTxGroup{ - Transactions: signedTransactions[11:12], - }, - } - firstTxExpectedOutput := []pooldata.SignedTxGroup{ - pooldata.SignedTxGroup{ - Transactions: signedTransactions[11:12], - }, - } - firstTxDupTransactions, firstTxDupNonDupFilteredGroups := txHandler.filterAlreadyCommitted(firstTxDup) - require.Equal(t, firstTxExpectedOutput, firstTxDupTransactions) - require.False(t, firstTxDupNonDupFilteredGroups) - - lastTxDup := []pooldata.SignedTxGroup{ - pooldata.SignedTxGroup{ - Transactions: signedTransactions[11:12], - }, - pooldata.SignedTxGroup{ - Transactions: []transactions.SignedTxn{signedTransactions[1]}, - }, - } - lastTxExpectedOutput := []pooldata.SignedTxGroup{ - pooldata.SignedTxGroup{ - Transactions: signedTransactions[11:12], - }, - } - lastTxDupTransactions, lastTxDupNonDupFilteredGroups := txHandler.filterAlreadyCommitted(lastTxDup) - require.Equal(t, lastTxExpectedOutput, lastTxDupTransactions) - require.False(t, lastTxDupNonDupFilteredGroups) - - midTxDup := []pooldata.SignedTxGroup{ - pooldata.SignedTxGroup{ - Transactions: signedTransactions[10:11], - }, - pooldata.SignedTxGroup{ - Transactions: signedTransactions[11:12], - }, - pooldata.SignedTxGroup{ - Transactions: []transactions.SignedTxn{signedTransactions[1]}, - }, - pooldata.SignedTxGroup{ - Transactions: signedTransactions[13:14], - }, - pooldata.SignedTxGroup{ - Transactions: signedTransactions[14:15], - }, - pooldata.SignedTxGroup{ - Transactions: []transactions.SignedTxn{signedTransactions[2]}, - }, - pooldata.SignedTxGroup{ - Transactions: []transactions.SignedTxn{signedTransactions[3]}, - }, - pooldata.SignedTxGroup{ - Transactions: signedTransactions[15:16], - }, - } - midTxDupExpectedOutput := []pooldata.SignedTxGroup{ - pooldata.SignedTxGroup{ - Transactions: signedTransactions[10:11], - }, - pooldata.SignedTxGroup{ - Transactions: signedTransactions[11:12], - }, - pooldata.SignedTxGroup{ - Transactions: signedTransactions[13:14], - }, - pooldata.SignedTxGroup{ - Transactions: signedTransactions[14:15], - }, - pooldata.SignedTxGroup{ - Transactions: signedTransactions[15:16], - }, - } - midTxDupTransactions, midTxDupNonDupFilteredGroups := txHandler.filterAlreadyCommitted(midTxDup) - require.Equal(t, midTxDupExpectedOutput, midTxDupTransactions) - require.False(t, midTxDupNonDupFilteredGroups) - - return -} |