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 2021/03/31 06:37:17 UTC

[incubator-tuweni] branch master updated: Fix ethstats flaky test

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 7e37312  Fix ethstats flaky test
     new e51155b  Merge pull request #202 from atoulme/ethstats_flaky_test
7e37312 is described below

commit 7e373120f28ce660dec6e25a32d44c76d9a4ad3f
Author: Antoine Toulme <an...@lunar-ocean.com>
AuthorDate: Tue Mar 30 22:54:16 2021 -0700

    Fix ethstats flaky test
---
 .../tuweni/ethstats/EthStatsReporterTest.java      | 23 +++++++--------
 .../apache/tuweni/ethstats/FakeEthStatsServer.java | 34 ++++++++++++++++------
 2 files changed, 36 insertions(+), 21 deletions(-)

diff --git a/ethstats/src/integrationTest/java/org/apache/tuweni/ethstats/EthStatsReporterTest.java b/ethstats/src/integrationTest/java/org/apache/tuweni/ethstats/EthStatsReporterTest.java
index c28a336..06e08da 100644
--- a/ethstats/src/integrationTest/java/org/apache/tuweni/ethstats/EthStatsReporterTest.java
+++ b/ethstats/src/integrationTest/java/org/apache/tuweni/ethstats/EthStatsReporterTest.java
@@ -12,13 +12,11 @@
  */
 package org.apache.tuweni.ethstats;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.tuweni.bytes.Bytes;
 import org.apache.tuweni.bytes.Bytes32;
-import org.apache.tuweni.concurrent.AsyncResult;
 import org.apache.tuweni.eth.Address;
 import org.apache.tuweni.eth.Hash;
 import org.apache.tuweni.junit.VertxExtension;
@@ -57,14 +55,9 @@ public class EthStatsReporterTest {
         },
         now::toEpochMilli);
 
-    AsyncResult<String> nextMessage = server.captureNextMessage();
     reporter.start().join();
     assertNotNull(server.getWebsocket());
-    assertEquals(
-        "{\"emit\":[\"hello\",{\"id\":\"foo\",\"info\":{\"api\":\"No\",\"canUpdateHistory\":true,\"client\":\"0.1.0\",\"name\":\"name\",\"net\":\"10\",\"node\":\"node\",\"os\":\"Windoz\",\"os_v\":\"64\",\"port\":33030,\"protocol\":\"eth/63\"},\"secret\":\"wat\"}]}",
-        nextMessage.get());
 
-    nextMessage = server.captureNextMessage();
     reporter
         .sendNewHead(
             new BlockStats(
@@ -81,13 +74,19 @@ public class EthStatsReporterTest {
                 Hash.fromBytes(Bytes32.random()),
                 Hash.fromBytes(Bytes32.random()),
                 Collections.emptyList()));
-    assertTrue(nextMessage.get().startsWith("{\"emit\":[\"block\",{\"block\""), nextMessage.get());
-    nextMessage = server.captureNextMessage();
+
     reporter.sendNewNodeStats(new NodeStats(true, false, true, 42, 9, 4000, 100));
-    assertTrue(nextMessage.get().startsWith("{\"emit\":[\"stats\",{\"stats\":"), nextMessage.get());
-    nextMessage = server.captureNextMessage();
     reporter.sendNewPendingTransactionCount(42);
-    assertEquals("{\"emit\":[\"pending\",{\"stats\":{\"pending\":42},\"id\":\"foo\"}]}", nextMessage.get());
+    server.waitForMessages(4);
+    assertTrue(4 <= server.getResults().size());
+    assertTrue(
+        server
+            .messagesContain(
+                "{\"emit\":[\"hello\",{\"id\":\"foo\",\"info\":{\"api\":\"No\",\"canUpdateHistory\":true,\"client\":\"0.1.0\",\"name\":\"name\",\"net\":\"10\",\"node\":\"node\",\"os\":\"Windoz\",\"os_v\":\"64\",\"port\":33030,\"protocol\":\"eth/63\"},\"secret\":\"wat\"}]}"));
+    assertTrue(server.messagesContain("{\"emit\":[\"node-ping\",{\"id\":\"foo\""));
+    assertTrue(server.messagesContain("{\"emit\":[\"block\",{\"block\""));
+    assertTrue(server.messagesContain("{\"emit\":[\"pending\",{\"stats\":{\"pending\":42},\"id\":\"foo\"}]}"));
+    assertTrue(server.messagesContain("{\"emit\":[\"stats\",{\"stats\":"));
 
     reporter.stop();
   }
diff --git a/ethstats/src/integrationTest/java/org/apache/tuweni/ethstats/FakeEthStatsServer.java b/ethstats/src/integrationTest/java/org/apache/tuweni/ethstats/FakeEthStatsServer.java
index ad694fa..cf4b6ae 100644
--- a/ethstats/src/integrationTest/java/org/apache/tuweni/ethstats/FakeEthStatsServer.java
+++ b/ethstats/src/integrationTest/java/org/apache/tuweni/ethstats/FakeEthStatsServer.java
@@ -13,9 +13,10 @@
 package org.apache.tuweni.ethstats;
 
 import org.apache.tuweni.concurrent.AsyncCompletion;
-import org.apache.tuweni.concurrent.AsyncResult;
 import org.apache.tuweni.concurrent.CompletableAsyncCompletion;
-import org.apache.tuweni.concurrent.CompletableAsyncResult;
+
+import java.util.ArrayList;
+import java.util.List;
 
 import io.vertx.core.Vertx;
 import io.vertx.core.http.HttpServer;
@@ -27,7 +28,7 @@ class FakeEthStatsServer {
   private final String networkInterface;
   private int port;
   private ServerWebSocket websocket;
-  private CompletableAsyncResult<String> result;
+  private List<String> results = new ArrayList<>();
 
   FakeEthStatsServer(Vertx vertx, String networkInterface, int port) {
     this.networkInterface = networkInterface;
@@ -55,9 +56,7 @@ class FakeEthStatsServer {
     websocket.accept();
     websocket.writeTextMessage("{\"emit\":[\"ready\"]}");
     websocket.handler(buffer -> {
-      if (result != null) {
-        result.complete(buffer.toString());
-      }
+      results.add(buffer.toString());
     });
   }
 
@@ -73,8 +72,25 @@ class FakeEthStatsServer {
     return port;
   }
 
-  public AsyncResult<String> captureNextMessage() {
-    result = AsyncResult.incomplete();
-    return result;
+  public List<String> getResults() {
+    return results;
+  }
+
+  public void waitForMessages(int numberOfMessages) throws InterruptedException {
+    for (int i = 0; i < 100; i++) {
+      if (getResults().size() >= numberOfMessages) {
+        return;
+      }
+      Thread.sleep(100);
+    }
+  }
+
+  public boolean messagesContain(String test) {
+    for (String message : getResults()) {
+      if (message.contains(test)) {
+        return true;
+      }
+    }
+    return false;
   }
 }

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org