You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuweni.apache.org by to...@apache.org on 2020/06/01 06:56:45 UTC
[incubator-tuweni] branch master updated: Add more tests
This is an automated email from the ASF dual-hosted git repository.
toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git
The following commit(s) were added to refs/heads/master by this push:
new 79654d3 Add more tests
79654d3 is described below
commit 79654d3254ac1f71cd129622c20ff0de946540ea
Author: Antoine Toulme <an...@lunar-ocean.com>
AuthorDate: Sun May 31 23:56:32 2020 -0700
Add more tests
---
.../org/apache/tuweni/devp2p/eth/EthHandlerTest.kt | 229 +++++++++++++--------
1 file changed, 141 insertions(+), 88 deletions(-)
diff --git a/devp2p-eth/src/test/kotlin/org/apache/tuweni/devp2p/eth/EthHandlerTest.kt b/devp2p-eth/src/test/kotlin/org/apache/tuweni/devp2p/eth/EthHandlerTest.kt
index 22148ea..d56c398 100644
--- a/devp2p-eth/src/test/kotlin/org/apache/tuweni/devp2p/eth/EthHandlerTest.kt
+++ b/devp2p-eth/src/test/kotlin/org/apache/tuweni/devp2p/eth/EthHandlerTest.kt
@@ -43,7 +43,7 @@ import org.apache.tuweni.units.bigints.UInt64
import org.apache.tuweni.units.ethereum.Gas
import org.apache.tuweni.units.ethereum.Wei
import org.junit.jupiter.api.Assertions.assertEquals
-import org.junit.jupiter.api.BeforeEach
+import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.mockito.ArgumentCaptor
@@ -56,98 +56,101 @@ import java.time.temporal.ChronoUnit
@ExtendWith(LuceneIndexWriterExtension::class, VertxExtension::class, BouncyCastleExtension::class)
class EthHandlerTest {
- private lateinit var genesisBlock: Block
- private lateinit var handler: EthHandler
- private lateinit var repository: BlockchainRepository
- private lateinit var service: RLPxService
-
- @BeforeEach
- fun setup(@LuceneIndexWriter writer: IndexWriter) = runBlocking {
- val header = BlockHeader(
- Hash.fromBytes(Bytes32.random()),
- Hash.fromBytes(Bytes32.random()),
- Address.fromBytes(Bytes.random(20)),
- Hash.fromBytes(Bytes32.random()),
- Hash.fromBytes(Bytes32.random()),
- Hash.fromBytes(Bytes32.random()),
- Bytes32.random(),
- UInt256.fromBytes(Bytes32.random()),
- UInt256.ZERO,
- Gas.valueOf(3000),
- Gas.valueOf(2000),
- Instant.now().plusSeconds(30).truncatedTo(ChronoUnit.SECONDS),
- Bytes.of(2, 3, 4, 5, 6, 7, 8, 9, 10),
- Hash.fromBytes(Bytes32.random()),
- UInt64.ZERO
- )
- val body = BlockBody(
- listOf(
- Transaction(
- UInt256.valueOf(1),
- Wei.valueOf(2),
- Gas.valueOf(2),
- Address.fromBytes(Bytes.random(20)),
- Wei.valueOf(2),
- Bytes.random(12),
- SECP256K1.KeyPair.random()
- )
- ),
- listOf(header)
- )
- genesisBlock = Block(header, body)
- repository = BlockchainRepository.init(
- MapKeyValueStore(),
- MapKeyValueStore(),
- MapKeyValueStore(),
- MapKeyValueStore(),
- BlockchainIndex(writer),
- genesisBlock
- )
- service = mock(RLPxService::class.java)
- handler = EthHandler(
- blockchainInfo = SimpleBlockchainInformation(
- UInt256.valueOf(42L),
- UInt256.ONE,
- genesisBlock.header.hash,
- genesisBlock.header.hash,
- emptyList()
- ),
- service = service,
- repository = repository
- )
- }
+ companion object {
+
+ private lateinit var genesisBlock: Block
+ private lateinit var handler: EthHandler
+ private lateinit var repository: BlockchainRepository
+ private lateinit var service: RLPxService
+
+ @BeforeAll
+ @JvmStatic
+ fun setup(@LuceneIndexWriter writer: IndexWriter) = runBlocking {
+ var header = BlockHeader(
+ Hash.fromBytes(Bytes32.random()),
+ Hash.fromBytes(Bytes32.random()),
+ Address.fromBytes(Bytes.random(20)),
+ Hash.fromBytes(Bytes32.random()),
+ Hash.fromBytes(Bytes32.random()),
+ Hash.fromBytes(Bytes32.random()),
+ Bytes32.random(),
+ UInt256.fromBytes(Bytes32.random()),
+ UInt256.ZERO,
+ Gas.valueOf(3000),
+ Gas.valueOf(2000),
+ Instant.now().plusSeconds(30).truncatedTo(ChronoUnit.SECONDS),
+ Bytes.of(2, 3, 4, 5, 6, 7, 8, 9, 10),
+ Hash.fromBytes(Bytes32.random()),
+ UInt64.ZERO
+ )
+ val body = BlockBody(
+ listOf(
+ Transaction(
+ UInt256.valueOf(1),
+ Wei.valueOf(2),
+ Gas.valueOf(2),
+ Address.fromBytes(Bytes.random(20)),
+ Wei.valueOf(2),
+ Bytes.random(12),
+ SECP256K1.KeyPair.random()
+ )
+ ),
+ listOf(header)
+ )
+ genesisBlock = Block(header, body)
+ repository = BlockchainRepository.init(
+ MapKeyValueStore(),
+ MapKeyValueStore(),
+ MapKeyValueStore(),
+ MapKeyValueStore(),
+ BlockchainIndex(writer),
+ genesisBlock
+ )
+ service = mock(RLPxService::class.java)
+ handler = EthHandler(
+ blockchainInfo = SimpleBlockchainInformation(
+ UInt256.valueOf(42L),
+ UInt256.ONE,
+ genesisBlock.header.hash,
+ genesisBlock.header.hash,
+ emptyList()
+ ),
+ service = service,
+ repository = repository
+ )
+
+ for (i in 1..10) {
+ val newHeader = createChildBlockHeader(header)
+ repository.storeBlockHeader(newHeader)
+ header = newHeader
+ }
+ }
- private fun createChildBlockHeader(parentBlock: BlockHeader): BlockHeader {
- val emptyListHash = Hash.hash(RLP.encodeList { })
- val emptyHash = Hash.hash(RLP.encode { writer -> writer.writeValue(Bytes.EMPTY) })
- return BlockHeader(
- parentBlock.hash,
- emptyListHash,
- Address.fromBytes(Bytes.random(20)),
- parentBlock.stateRoot,
- emptyHash,
- emptyHash,
- Bytes.wrap(ByteArray(256)),
- parentBlock.difficulty,
- parentBlock.number.add(1),
- parentBlock.gasLimit,
- Gas.valueOf(0),
- Instant.now(),
- Bytes.random(45),
- Hash.fromBytes(Bytes32.random()),
- UInt64.ZERO
- )
+ private fun createChildBlockHeader(parentBlock: BlockHeader): BlockHeader {
+ val emptyListHash = Hash.hash(RLP.encodeList { })
+ val emptyHash = Hash.hash(RLP.encode { writer -> writer.writeValue(Bytes.EMPTY) })
+ return BlockHeader(
+ parentBlock.hash,
+ emptyListHash,
+ Address.fromBytes(Bytes.random(20)),
+ parentBlock.stateRoot,
+ emptyHash,
+ emptyHash,
+ Bytes.wrap(ByteArray(256)),
+ parentBlock.difficulty,
+ parentBlock.number.add(1),
+ parentBlock.gasLimit,
+ Gas.valueOf(0),
+ Instant.now(),
+ Bytes.random(45),
+ Hash.fromBytes(Bytes32.random()),
+ UInt64.ZERO
+ )
+ }
}
@Test
fun testGetHeaders() = runBlocking {
- var header = repository.retrieveGenesisBlock().header
- for (i in 1..10) {
- val newHeader = createChildBlockHeader(header)
- repository.storeBlockHeader(newHeader)
- header = newHeader
- }
-
handler.handle(
"foo",
MessageType.GetBlockHeaders.code,
@@ -163,4 +166,54 @@ class EthHandlerTest {
assertEquals(UInt256.valueOf(2), messageRead.headers[1].number)
assertEquals(UInt256.valueOf(4), messageRead.headers[2].number)
}
+
+ @Test
+ fun testGetHeadersTooMany() = runBlocking {
+ handler.handle(
+ "foo2",
+ MessageType.GetBlockHeaders.code,
+ GetBlockHeaders(genesisBlock.header.hash, 100, 1, false).toBytes()
+ ).await()
+
+ val messageCapture = ArgumentCaptor.forClass(Bytes::class.java)
+ verify(service).send(eq(ETH64), eq(MessageType.BlockHeaders.code), eq("foo2"), messageCapture.capture())
+
+ val messageRead = BlockHeaders.read(messageCapture.value)
+ assertEquals(6, messageRead.headers.size)
+ }
+
+ @Test
+ fun testGetHeadersDifferentSkip() = runBlocking {
+ handler.handle(
+ "foo3",
+ MessageType.GetBlockHeaders.code,
+ GetBlockHeaders(genesisBlock.header.hash, 100, 2, false).toBytes()
+ ).await()
+
+ val messageCapture = ArgumentCaptor.forClass(Bytes::class.java)
+ verify(service).send(eq(ETH64), eq(MessageType.BlockHeaders.code), eq("foo3"), messageCapture.capture())
+
+ val messageRead = BlockHeaders.read(messageCapture.value)
+ assertEquals(4, messageRead.headers.size)
+ assertEquals(UInt256.valueOf(3), messageRead.headers[1].number)
+ assertEquals(UInt256.valueOf(6), messageRead.headers[2].number)
+ assertEquals(UInt256.valueOf(9), messageRead.headers[3].number)
+ }
+
+ @Test
+ fun testGetBodies() = runBlocking {
+
+ handler.handle(
+ "foo234",
+ MessageType.GetBlockBodies.code,
+ GetBlockBodies(listOf(genesisBlock.header.hash)).toBytes()
+ ).await()
+
+ val messageCapture = ArgumentCaptor.forClass(Bytes::class.java)
+ verify(service).send(eq(ETH64), eq(MessageType.BlockBodies.code), eq("foo234"), messageCapture.capture())
+
+ val messageRead = BlockBodies.read(messageCapture.value)
+ assertEquals(1, messageRead.bodies.size)
+ assertEquals(genesisBlock.body, messageRead.bodies[0])
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org