Search in sources :

Example 11 with IAionBlockchain

use of org.aion.zero.impl.blockchain.IAionBlockchain in project aion by aionnetwork.

the class RequestTrieDataHandlerTest method testHeader.

@Test
public void testHeader() {
    Logger log = mock(Logger.class);
    IAionBlockchain chain = mock(AionBlockchainImpl.class);
    IP2pMgr p2p = mock(P2pMgr.class);
    RequestTrieDataHandler handler = new RequestTrieDataHandler(log, chain, p2p);
    // check handler header
    assertThat(handler.getHeader().getVer()).isEqualTo(Ver.V1);
    assertThat(handler.getHeader().getAction()).isEqualTo(Act.REQUEST_TRIE_DATA);
}
Also used : IAionBlockchain(org.aion.zero.impl.blockchain.IAionBlockchain) Logger(org.slf4j.Logger) IP2pMgr(org.aion.p2p.IP2pMgr) Test(org.junit.Test)

Example 12 with IAionBlockchain

use of org.aion.zero.impl.blockchain.IAionBlockchain in project aion by aionnetwork.

the class RequestBlocksHandlerTest method testReceive_correctMessage_nullBlock_withHash.

@Test
public void testReceive_correctMessage_nullBlock_withHash() {
    Logger log = mock(Logger.class);
    when(log.isDebugEnabled()).thenReturn(true);
    byte[] hash = consecutiveBlocks.get(0).getHash();
    IAionBlockchain chain = mock(AionBlockchainImpl.class);
    when(chain.getBlockByHash(hash)).thenReturn(null);
    IP2pMgr p2p = mock(P2pMgr.class);
    RequestBlocksHandler handler = new RequestBlocksHandler(log, chain, p2p);
    // receive correct message
    byte[] encoding = RLP.encodeList(RLP.encodeByte(isFalse), RLP.encode(hash), RLP.encodeInt(10), RLP.encodeByte(isTrue));
    handler.receive(peerId, displayId, encoding);
    verify(log, times(1)).debug("<request-blocks from-block={} count={} order={}>", Hex.toHexString(hash), 10, "DESC");
    verify(chain, times(1)).getBlockByHash(hash);
    verify(chain, times(0)).getBlocksByRange(10L, 1L);
    verifyZeroInteractions(p2p);
}
Also used : IAionBlockchain(org.aion.zero.impl.blockchain.IAionBlockchain) Logger(org.slf4j.Logger) IP2pMgr(org.aion.p2p.IP2pMgr) Test(org.junit.Test)

Example 13 with IAionBlockchain

use of org.aion.zero.impl.blockchain.IAionBlockchain in project aion by aionnetwork.

the class RequestBlocksHandlerTest method testReceive_correctMessage_ascending_withHash.

@Test
public void testReceive_correctMessage_ascending_withHash() {
    Block first = consecutiveBlocks.get(0);
    byte[] hash = first.getHash();
    Block last = consecutiveBlocks.get(3);
    Logger log = mock(Logger.class);
    when(log.isDebugEnabled()).thenReturn(true);
    IAionBlockchain chain = mock(AionBlockchainImpl.class);
    when(chain.getBlockByHash(hash)).thenReturn(first);
    when(chain.getBlocksByRange(first.getNumber(), last.getNumber())).thenReturn(consecutiveBlocks);
    IP2pMgr p2p = mock(P2pMgr.class);
    RequestBlocksHandler handler = new RequestBlocksHandler(log, chain, p2p);
    // receive correct message
    RequestBlocks request = new RequestBlocks(hash, 4, false);
    handler.receive(peerId, displayId, request.encode());
    verify(log, times(1)).debug("<request-blocks from-block={} count={} order={}>", Hex.toHexString(hash), 4, "ASC");
    verify(chain, times(1)).getBlockByHash(hash);
    verify(chain, times(1)).getBlocksByRange(first.getNumber(), last.getNumber());
    ResponseBlocks expectedResponse = new ResponseBlocks(consecutiveBlocks);
    verify(p2p, times(1)).send(peerId, displayId, expectedResponse);
}
Also used : RequestBlocks(org.aion.zero.impl.sync.msg.RequestBlocks) Block(org.aion.zero.impl.types.Block) IAionBlockchain(org.aion.zero.impl.blockchain.IAionBlockchain) Logger(org.slf4j.Logger) IP2pMgr(org.aion.p2p.IP2pMgr) ResponseBlocks(org.aion.zero.impl.sync.msg.ResponseBlocks) Test(org.junit.Test)

Example 14 with IAionBlockchain

use of org.aion.zero.impl.blockchain.IAionBlockchain in project aion by aionnetwork.

the class RequestBlocksHandlerTest method testReceive_correctMessage_descending_withHeight.

@Test
public void testReceive_correctMessage_descending_withHeight() {
    Block first = consecutiveBlocks.get(3);
    Block last = consecutiveBlocks.get(0);
    // reverse the list order
    LinkedList<Block> reverse = new LinkedList<>();
    for (Block b : consecutiveBlocks) {
        reverse.addFirst(b);
    }
    Logger log = mock(Logger.class);
    when(log.isDebugEnabled()).thenReturn(true);
    IAionBlockchain chain = mock(AionBlockchainImpl.class);
    when(chain.getBlocksByRange(first.getNumber(), last.getNumber())).thenReturn(reverse);
    IP2pMgr p2p = mock(P2pMgr.class);
    RequestBlocksHandler handler = new RequestBlocksHandler(log, chain, p2p);
    // receive correct message
    RequestBlocks request = new RequestBlocks(first.getNumber(), 4, true);
    handler.receive(peerId, displayId, request.encode());
    verify(log, times(1)).debug("<request-blocks from-block={} count={} order={}>", first.getNumber(), 4, "DESC");
    verify(chain, times(1)).getBlocksByRange(first.getNumber(), last.getNumber());
    ResponseBlocks expectedResponse = new ResponseBlocks(reverse);
    verify(p2p, times(1)).send(peerId, displayId, expectedResponse);
}
Also used : RequestBlocks(org.aion.zero.impl.sync.msg.RequestBlocks) Block(org.aion.zero.impl.types.Block) IAionBlockchain(org.aion.zero.impl.blockchain.IAionBlockchain) Logger(org.slf4j.Logger) IP2pMgr(org.aion.p2p.IP2pMgr) LinkedList(java.util.LinkedList) ResponseBlocks(org.aion.zero.impl.sync.msg.ResponseBlocks) Test(org.junit.Test)

Example 15 with IAionBlockchain

use of org.aion.zero.impl.blockchain.IAionBlockchain in project aion by aionnetwork.

the class RequestBlocksHandlerTest method testReceive_correctMessage_withException_withHash.

@Test
public void testReceive_correctMessage_withException_withHash() {
    Block first = consecutiveBlocks.get(0);
    byte[] hash = first.getHash();
    Block last = consecutiveBlocks.get(3);
    Logger log = mock(Logger.class);
    when(log.isDebugEnabled()).thenReturn(true);
    IAionBlockchain chain = mock(AionBlockchainImpl.class);
    when(chain.getBlockByHash(hash)).thenReturn(first);
    Exception e = new NullPointerException();
    when(chain.getBlocksByRange(first.getNumber(), last.getNumber())).thenThrow(e);
    IP2pMgr p2p = mock(P2pMgr.class);
    RequestBlocksHandler handler = new RequestBlocksHandler(log, chain, p2p);
    // receive correct message
    byte[] encoding = RLP.encodeList(RLP.encodeByte(isFalse), RLP.encode(hash), RLP.encodeInt(4), RLP.encodeByte(isFalse));
    handler.receive(peerId, displayId, encoding);
    verify(log, times(1)).debug("<request-blocks from-block={} count={} order={}>", Hex.toHexString(hash), 4, "ASC");
    verify(log).error("<request-blocks value retrieval failed>", e);
    verify(chain, times(1)).getBlockByHash(hash);
    verify(chain, times(1)).getBlocksByRange(first.getNumber(), last.getNumber());
    ResponseBlocks expectedResponse = new ResponseBlocks(List.of(first));
    verify(p2p, times(1)).send(peerId, displayId, expectedResponse);
}
Also used : Block(org.aion.zero.impl.types.Block) IAionBlockchain(org.aion.zero.impl.blockchain.IAionBlockchain) Logger(org.slf4j.Logger) IP2pMgr(org.aion.p2p.IP2pMgr) ResponseBlocks(org.aion.zero.impl.sync.msg.ResponseBlocks) Test(org.junit.Test)

Aggregations

IAionBlockchain (org.aion.zero.impl.blockchain.IAionBlockchain)35 Test (org.junit.Test)35 IP2pMgr (org.aion.p2p.IP2pMgr)24 Logger (org.slf4j.Logger)24 Block (org.aion.zero.impl.types.Block)18 AionTransaction (org.aion.base.AionTransaction)11 AionAddress (org.aion.types.AionAddress)10 ForkUtility (org.aion.zero.impl.forks.ForkUtility)10 ResponseBlocks (org.aion.zero.impl.sync.msg.ResponseBlocks)7 RequestBlocks (org.aion.zero.impl.sync.msg.RequestBlocks)5 ResponseTrieData (org.aion.zero.impl.sync.msg.ResponseTrieData)3 LinkedList (java.util.LinkedList)2 ImportResult (org.aion.zero.impl.core.ImportResult)1