def test_block_4098_4099(self, m_is_full_transaction_pool, m_config): """ TxPool = [4095-4100, 4200] Block = [4098, 4099] TxPool Afterwards = [4095, 4100, 4200] """ # Ensure that a "large OTS index" is 4096 m_config.dev.max_ots_tracking_index = 4096 m_block = Mock(autospec=Block) m_block.transactions = [CoinBase(), self.tx_4098, self.tx_4099] self.txpool.remove_tx_in_block_from_pool(m_block) txs_in_txpool = [ t[1].transaction for t in self.txpool.transaction_pool ] self.assertEqual(len(self.txpool.transaction_pool), 3) self.assertNotIn(self.tx_4097, txs_in_txpool) self.assertNotIn(self.tx_4098, txs_in_txpool) self.assertNotIn(self.tx_4099, txs_in_txpool) self.assertIn(self.tx_4095, txs_in_txpool) self.assertIn(self.tx_4100, txs_in_txpool) self.assertIn(self.tx_4200, txs_in_txpool)
def test_txpool_3907_block_4098_4099(self, m_is_full_transaction_pool, m_config): """ TxPool = [3907, 4095-4100, 4200] Block = [4098, 4099] TxPool Afterwards = [3907, 4095, 4100, 4200] """ # Ensure that a "large OTS index" is 4096 m_config.dev.max_ots_tracking_index = 4096 m_block = Mock(autospec=Block) m_block.transactions = [CoinBase(), self.tx_4098, self.tx_4099] self.txpool.add_tx_to_pool(self.tx_3907, 5) self.txpool.remove_tx_in_block_from_pool(m_block) txs_in_txpool = [ t[1].transaction for t in self.txpool.transaction_pool ] # 3907 should also be in the Pool since it is exempt from the counter self.assertEqual(len(self.txpool.transaction_pool), 4) self.assertNotIn(self.tx_4097, txs_in_txpool) self.assertNotIn(self.tx_4098, txs_in_txpool) self.assertNotIn(self.tx_4099, txs_in_txpool) self.assertIn(self.tx_3907, txs_in_txpool) self.assertIn(self.tx_4095, txs_in_txpool) self.assertIn(self.tx_4100, txs_in_txpool) self.assertIn(self.tx_4200, txs_in_txpool)
def test_txpool_4095_4096_4097_otherppl_block_4098_4099(self, m_is_full_transaction_pool, m_config): """ TxPool = [4096-4100, 4200, 4095-4097_otherppl] Block = [4200] TxPool Afterwards = [4095, 4095-4097_otherppl] """ # Ensure that a "large OTS index" is 4096 m_config.dev.max_ots_tracking_index = 4096 m_block = Mock(autospec=Block) m_block.transactions = [CoinBase(), self.tx_4200] tx_other_4095 = make_tx(name='Mock TX 4095', txhash=b'h4095_other', ots_key=4095, PK='otherppl') tx_other_4096 = make_tx(name='Mock TX 4096', txhash=b'h4096_other', ots_key=4096, PK='otherppl') tx_other_4097 = make_tx(name='Mock TX 4097', txhash=b'h4097_other', ots_key=4097, PK='otherppl') self.txpool.add_tx_to_pool(tx_other_4095, 5) self.txpool.add_tx_to_pool(tx_other_4096, 5) self.txpool.add_tx_to_pool(tx_other_4097, 5) self.txpool.remove_tx_in_block_from_pool(m_block) txs_in_txpool = [t[1].transaction for t in self.txpool.transaction_pool] self.assertEqual(len(self.txpool.transaction_pool), 4) self.assertIn(self.tx_4095, txs_in_txpool) self.assertIn(tx_other_4095, txs_in_txpool) self.assertIn(tx_other_4096, txs_in_txpool) self.assertIn(tx_other_4097, txs_in_txpool)
def test_update_pending_tx_pool_rejects_coinbase_txs(self, m_is_full_pending_transaction_pool, m_logger): tx1 = CoinBase() ip = '127.0.0.1' m_is_full_pending_transaction_pool.return_value = False result = self.txpool.update_pending_tx_pool(tx1, ip) self.assertFalse(result)
def test_add_tx_from_block_to_pool(self, m_add_tx_to_pool, m_from_pbdata, m_logger): m_block = Mock(autospec=Block, block_number=5, headerhash=b'test block header') m_block.transactions = [CoinBase(), make_tx(), make_tx()] self.txpool.add_tx_from_block_to_pool(m_block, 5) self.assertEqual(m_add_tx_to_pool.call_count, 2) # 2 because the function ignores the Coinbase tx # If there is a problem adding to the tx_pool, the logger should be invoked. m_add_tx_to_pool.return_value = False self.txpool.add_tx_from_block_to_pool(m_block, 5) m_logger.warning.assert_called()
def test_remove_tx_in_block_from_pool(self): m_block = Mock(autospec=Block) tx1 = make_tx(name='Mock TX 1', ots_key=1, PK=b'pk') tx2 = make_tx(name='Mock TX 2', ots_key=2, PK=b'pk') m_block.transactions = [CoinBase(), tx1, tx2] # To remove the tx from the pool we have to add it first! self.txpool.add_tx_to_pool(tx1, 5) self.txpool.add_tx_to_pool(tx2, 5) self.assertEqual(len(self.txpool.transaction_pool), 2) self.txpool.remove_tx_in_block_from_pool(m_block) self.assertEqual(len(self.txpool.transaction_pool), 0)
def test_block_1000(self, m_is_full_transaction_pool, m_config): """ TxPool = [4095-4100, 4200] Block = [1000] TxPool Afterwards = [4095-4100, 4200] """ # Ensure that a "large OTS index" is 4096 m_config.dev.max_ots_tracking_index = 4096 tx_1000 = make_tx(name='Mock TX 1000', txhash=b'h1000', ots_key=1000) m_block = Mock(autospec=Block) m_block.transactions = [CoinBase(), tx_1000] self.assertEqual(7, len(self.txpool.transaction_pool)) self.txpool.remove_tx_in_block_from_pool(m_block) txs_in_txpool = [t[1].transaction for t in self.txpool.transaction_pool] self.assertEqual(7, len(txs_in_txpool))