Search in sources :

Example 1 with TxHandler

use of co.rsk.net.handler.TxHandler in project rskj by rsksmart.

the class NodeMessageHandlerTest method processTooMuchGasTransactionMessage.

@Test
public void processTooMuchGasTransactionMessage() throws UnknownHostException {
    PeerScoringManager scoring = createPeerScoringManager();
    final SimpleChannelManager channelManager = new SimpleChannelManager();
    final World world = new World();
    final Blockchain blockchain = world.getBlockChain();
    TransactionPool state = mock(TransactionPool.class);
    BlockProcessor blockProcessor = mock(BlockProcessor.class);
    Mockito.when(blockProcessor.hasBetterBlockToSync()).thenReturn(false);
    TxHandler txHandler = new TxHandlerImpl(config, mock(CompositeEthereumListener.class), mock(RepositoryImpl.class), blockchain);
    final NodeMessageHandler handler = new NodeMessageHandler(config, blockProcessor, null, channelManager, state, txHandler, scoring, new ProofOfWorkRule(config).setFallbackMiningEnabled(false));
    final SimpleMessageChannel sender = new SimpleMessageChannel();
    final List<Transaction> txs = new ArrayList<>();
    BigInteger value = BigInteger.ONE;
    BigInteger nonce = BigInteger.ZERO;
    BigInteger gasPrice = BigInteger.ONE;
    BigInteger gasLimit = BigDecimal.valueOf(Math.pow(2, 60)).add(BigDecimal.ONE).toBigInteger();
    txs.add(TransactionUtils.createTransaction(TransactionUtils.getPrivateKeyBytes(), TransactionUtils.getAddress(), value, nonce, gasPrice, gasLimit));
    final TransactionsMessage message = new TransactionsMessage(txs);
    handler.processMessage(sender, message);
    Assert.assertNotNull(channelManager.getTransactions());
    Assert.assertEquals(0, channelManager.getTransactions().size());
    Assert.assertFalse(scoring.isEmpty());
    PeerScoring pscoring = scoring.getPeerScoring(sender.getPeerNodeID());
    Assert.assertNotNull(pscoring);
    Assert.assertFalse(pscoring.isEmpty());
    // besides this
    Assert.assertEquals(1, pscoring.getTotalEventCounter());
    Assert.assertEquals(1, pscoring.getEventCounter(EventType.VALID_TRANSACTION));
}
Also used : SimpleTransactionPool(co.rsk.net.simples.SimpleTransactionPool) TxHandler(co.rsk.net.handler.TxHandler) SimpleMessageChannel(co.rsk.net.simples.SimpleMessageChannel) World(co.rsk.test.World) TxHandlerImpl(co.rsk.net.handler.TxHandlerImpl) ProofOfWorkRule(co.rsk.validators.ProofOfWorkRule) PeerScoring(co.rsk.scoring.PeerScoring) PeerScoringManager(co.rsk.scoring.PeerScoringManager) SimpleChannelManager(org.ethereum.rpc.Simples.SimpleChannelManager) CompositeEthereumListener(org.ethereum.listener.CompositeEthereumListener) SimpleBlockProcessor(co.rsk.net.simples.SimpleBlockProcessor) RepositoryImpl(co.rsk.db.RepositoryImpl) BigInteger(java.math.BigInteger) Test(org.junit.Test)

Example 2 with TxHandler

use of co.rsk.net.handler.TxHandler in project rskj by rsksmart.

the class NodeMessageHandlerTest method processTransactionsMessageDoesNothingBecauseNodeIsSyncing.

@Test
public void processTransactionsMessageDoesNothingBecauseNodeIsSyncing() {
    ChannelManager channelManager = mock(ChannelManager.class);
    TxHandler txHandler = mock(TxHandler.class);
    BlockProcessor blockProcessor = mock(BlockProcessor.class);
    Mockito.when(blockProcessor.hasBetterBlockToSync()).thenReturn(true);
    final NodeMessageHandler handler = new NodeMessageHandler(config, blockProcessor, null, channelManager, null, txHandler, null, new ProofOfWorkRule(config).setFallbackMiningEnabled(false));
    Message message = mock(Message.class);
    Mockito.when(message.getMessageType()).thenReturn(MessageType.TRANSACTIONS);
    handler.processMessage(null, message);
    verify(channelManager, never()).broadcastTransactionMessage(any(), any());
}
Also used : SimpleChannelManager(org.ethereum.rpc.Simples.SimpleChannelManager) ChannelManager(org.ethereum.net.server.ChannelManager) TxHandler(co.rsk.net.handler.TxHandler) SimpleBlockProcessor(co.rsk.net.simples.SimpleBlockProcessor) ProofOfWorkRule(co.rsk.validators.ProofOfWorkRule) Test(org.junit.Test)

Example 3 with TxHandler

use of co.rsk.net.handler.TxHandler in project rskj by rsksmart.

the class NodeMessageHandlerTest method processTransactionsMessageUsingTransactionPool.

@Test
public void processTransactionsMessageUsingTransactionPool() throws UnknownHostException {
    final SimpleTransactionPool transactionPool = new SimpleTransactionPool();
    final SimpleChannelManager channelManager = new SimpleChannelManager();
    TxHandler txmock = mock(TxHandler.class);
    BlockProcessor blockProcessor = mock(BlockProcessor.class);
    Mockito.when(blockProcessor.hasBetterBlockToSync()).thenReturn(false);
    final NodeMessageHandler handler = new NodeMessageHandler(config, blockProcessor, null, channelManager, transactionPool, txmock, RskMockFactory.getPeerScoringManager(), new ProofOfWorkRule(config).setFallbackMiningEnabled(false));
    final SimpleMessageChannel sender = new SimpleMessageChannel();
    sender.setPeerNodeID(new NodeID(new byte[] { 1 }));
    final SimpleMessageChannel sender2 = new SimpleMessageChannel();
    sender2.setPeerNodeID(new NodeID(new byte[] { 2 }));
    final List<Transaction> txs = TransactionUtils.getTransactions(10);
    Mockito.when(txmock.retrieveValidTxs(any(List.class))).thenReturn(txs);
    final TransactionsMessage message = new TransactionsMessage(txs);
    handler.processMessage(sender, message);
    Assert.assertNotNull(channelManager.getTransactions());
    Assert.assertEquals(10, channelManager.getTransactions().size());
    for (int k = 0; k < 10; k++) Assert.assertSame(txs.get(k), channelManager.getTransactions().get(k));
    Assert.assertNotNull(channelManager.getLastSkip());
    Assert.assertEquals(1, channelManager.getLastSkip().size());
    Assert.assertTrue(channelManager.getLastSkip().contains(sender.getPeerNodeID()));
    channelManager.setLastSkip(null);
    handler.processMessage(sender2, message);
    Assert.assertNull(channelManager.getLastSkip());
}
Also used : TxHandler(co.rsk.net.handler.TxHandler) SimpleMessageChannel(co.rsk.net.simples.SimpleMessageChannel) SimpleTransactionPool(co.rsk.net.simples.SimpleTransactionPool) ProofOfWorkRule(co.rsk.validators.ProofOfWorkRule) SimpleChannelManager(org.ethereum.rpc.Simples.SimpleChannelManager) SimpleBlockProcessor(co.rsk.net.simples.SimpleBlockProcessor) Test(org.junit.Test)

Example 4 with TxHandler

use of co.rsk.net.handler.TxHandler in project rskj by rsksmart.

the class NodeMessageHandlerTest method processRejectedTransactionsMessage.

@Test
public void processRejectedTransactionsMessage() throws UnknownHostException {
    PeerScoringManager scoring = createPeerScoringManager();
    final SimpleChannelManager channelManager = new SimpleChannelManager();
    TxHandler txmock = mock(TxHandler.class);
    TransactionPool state = mock(TransactionPool.class);
    BlockProcessor blockProcessor = mock(BlockProcessor.class);
    Mockito.when(blockProcessor.hasBetterBlockToSync()).thenReturn(false);
    final NodeMessageHandler handler = new NodeMessageHandler(config, blockProcessor, null, channelManager, state, txmock, scoring, new ProofOfWorkRule(config).setFallbackMiningEnabled(false));
    final SimpleMessageChannel sender = new SimpleMessageChannel();
    final List<Transaction> txs = TransactionUtils.getTransactions(0);
    Mockito.when(txmock.retrieveValidTxs(any(List.class))).thenReturn(txs);
    final TransactionsMessage message = new TransactionsMessage(txs);
    handler.processMessage(sender, message);
    Assert.assertNotNull(channelManager.getTransactions());
    Assert.assertEquals(0, channelManager.getTransactions().size());
    Assert.assertTrue(scoring.isEmpty());
    PeerScoring pscoring = scoring.getPeerScoring(sender.getPeerNodeID());
    Assert.assertNotNull(pscoring);
    Assert.assertTrue(pscoring.isEmpty());
    Assert.assertEquals(0, pscoring.getTotalEventCounter());
    Assert.assertEquals(0, pscoring.getEventCounter(EventType.INVALID_TRANSACTION));
}
Also used : SimpleTransactionPool(co.rsk.net.simples.SimpleTransactionPool) TxHandler(co.rsk.net.handler.TxHandler) SimpleMessageChannel(co.rsk.net.simples.SimpleMessageChannel) ProofOfWorkRule(co.rsk.validators.ProofOfWorkRule) PeerScoring(co.rsk.scoring.PeerScoring) PeerScoringManager(co.rsk.scoring.PeerScoringManager) SimpleChannelManager(org.ethereum.rpc.Simples.SimpleChannelManager) SimpleBlockProcessor(co.rsk.net.simples.SimpleBlockProcessor) Test(org.junit.Test)

Example 5 with TxHandler

use of co.rsk.net.handler.TxHandler in project rskj by rsksmart.

the class NodeMessageHandlerTest method processTransactionsMessage.

@Test
public void processTransactionsMessage() throws UnknownHostException {
    PeerScoringManager scoring = createPeerScoringManager();
    final SimpleChannelManager channelManager = new SimpleChannelManager();
    TxHandler txmock = mock(TxHandler.class);
    TransactionPool state = mock(TransactionPool.class);
    Mockito.when(state.addTransactions(any())).thenAnswer(i -> i.getArguments()[0]);
    BlockProcessor blockProcessor = mock(BlockProcessor.class);
    Mockito.when(blockProcessor.hasBetterBlockToSync()).thenReturn(false);
    final NodeMessageHandler handler = new NodeMessageHandler(config, blockProcessor, null, channelManager, state, txmock, scoring, new ProofOfWorkRule(config).setFallbackMiningEnabled(false));
    final SimpleMessageChannel sender = new SimpleMessageChannel();
    sender.setPeerNodeID(new NodeID(new byte[] { 1 }));
    final SimpleMessageChannel sender2 = new SimpleMessageChannel();
    sender2.setPeerNodeID(new NodeID(new byte[] { 2 }));
    final List<Transaction> txs = TransactionUtils.getTransactions(10);
    Mockito.when(txmock.retrieveValidTxs(any(List.class))).thenReturn(txs);
    final TransactionsMessage message = new TransactionsMessage(txs);
    handler.processMessage(sender, message);
    Assert.assertNotNull(channelManager.getTransactions());
    Assert.assertEquals(10, channelManager.getTransactions().size());
    for (int k = 0; k < 10; k++) Assert.assertSame(txs.get(k), channelManager.getTransactions().get(k));
    Assert.assertNotNull(channelManager.getLastSkip());
    Assert.assertEquals(1, channelManager.getLastSkip().size());
    Assert.assertTrue(channelManager.getLastSkip().contains(sender.getPeerNodeID()));
    handler.processMessage(sender2, message);
    Assert.assertNotNull(channelManager.getLastSkip());
    Assert.assertEquals(2, channelManager.getLastSkip().size());
    Assert.assertTrue(channelManager.getLastSkip().contains(sender.getPeerNodeID()));
    Assert.assertTrue(channelManager.getLastSkip().contains(sender2.getPeerNodeID()));
    Assert.assertFalse(scoring.isEmpty());
    PeerScoring pscoring = scoring.getPeerScoring(sender.getPeerNodeID());
    Assert.assertNotNull(pscoring);
    Assert.assertFalse(pscoring.isEmpty());
    Assert.assertEquals(10, pscoring.getTotalEventCounter());
    Assert.assertEquals(10, pscoring.getEventCounter(EventType.VALID_TRANSACTION));
    pscoring = scoring.getPeerScoring(sender2.getPeerNodeID());
    Assert.assertNotNull(pscoring);
    Assert.assertFalse(pscoring.isEmpty());
    Assert.assertEquals(10, pscoring.getTotalEventCounter());
    Assert.assertEquals(10, pscoring.getEventCounter(EventType.VALID_TRANSACTION));
}
Also used : SimpleTransactionPool(co.rsk.net.simples.SimpleTransactionPool) TxHandler(co.rsk.net.handler.TxHandler) SimpleMessageChannel(co.rsk.net.simples.SimpleMessageChannel) ProofOfWorkRule(co.rsk.validators.ProofOfWorkRule) PeerScoring(co.rsk.scoring.PeerScoring) PeerScoringManager(co.rsk.scoring.PeerScoringManager) SimpleChannelManager(org.ethereum.rpc.Simples.SimpleChannelManager) SimpleBlockProcessor(co.rsk.net.simples.SimpleBlockProcessor) Test(org.junit.Test)

Aggregations

TxHandler (co.rsk.net.handler.TxHandler)6 SimpleBlockProcessor (co.rsk.net.simples.SimpleBlockProcessor)6 ProofOfWorkRule (co.rsk.validators.ProofOfWorkRule)6 Test (org.junit.Test)6 SimpleChannelManager (org.ethereum.rpc.Simples.SimpleChannelManager)5 SimpleMessageChannel (co.rsk.net.simples.SimpleMessageChannel)4 SimpleTransactionPool (co.rsk.net.simples.SimpleTransactionPool)4 PeerScoring (co.rsk.scoring.PeerScoring)3 PeerScoringManager (co.rsk.scoring.PeerScoringManager)3 RepositoryImpl (co.rsk.db.RepositoryImpl)1 TxHandlerImpl (co.rsk.net.handler.TxHandlerImpl)1 World (co.rsk.test.World)1 BigInteger (java.math.BigInteger)1 CompositeEthereumListener (org.ethereum.listener.CompositeEthereumListener)1 ChannelManager (org.ethereum.net.server.ChannelManager)1