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