From cb8e2a88720abb3d0b12bc03f6e911b7a2705bd1 Mon Sep 17 00:00:00 2001
From: blavenie <benoit.lavenier@e-is.pro>
Date: Fri, 15 Sep 2017 17:22:57 +0200
Subject: [PATCH] - Fix unit test - better log prefix on websocket server

---
 .../core/client/model/bma/NetworkPeering.java | 11 ++++++-
 .../service/local/NetworkServiceImpl.java     | 31 ++++++++++++++++---
 .../service/local/NetworkServiceTest.java     |  2 +-
 .../websocket/WebSocketServer.java            | 12 +++----
 4 files changed, 43 insertions(+), 13 deletions(-)

diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeering.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeering.java
index 560a70e0..06d93e5d 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeering.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/model/bma/NetworkPeering.java
@@ -34,7 +34,7 @@ public class NetworkPeering implements Serializable {
     private String currency;
     private String block;
     private String signature;
-
+    private String status;
 
     private String raw;
 
@@ -82,6 +82,14 @@ public class NetworkPeering implements Serializable {
         this.pubkey = pubkey;
     }
 
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
     @JsonIgnore
     public String getRaw() {
         return raw;
@@ -104,6 +112,7 @@ public class NetworkPeering implements Serializable {
                 "currency=" + currency + "\n" +
                 "pubkey=" + pubkey + "\n" +
                 "signature=" + signature + "\n" +
+                "status=" + status + "\n" +
                 "block=" + block + "\n";
         for(Endpoint endpoint : endpoints) {
             s += endpoint.toString() + "\n";
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/NetworkServiceImpl.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/NetworkServiceImpl.java
index 9d016080..1bf7c5ca 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/NetworkServiceImpl.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/local/NetworkServiceImpl.java
@@ -41,6 +41,7 @@ import org.duniter.core.exception.TechnicalException;
 import org.duniter.core.util.*;
 import org.duniter.core.util.CollectionUtils;
 import org.duniter.core.util.concurrent.CompletableFutures;
+import org.duniter.core.util.http.InetAddressUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -173,8 +174,14 @@ public class NetworkServiceImpl extends BaseRemoteServiceImpl implements Network
                                     peer = mainPeer;
                                 }
 
+                                // Exclude peer with only a local IPv4 address
+                                else if (InetAddressUtils.isLocalIPv4Address(peer.getHost())) {
+                                  return null;
+                                }
+
                                 return asyncRefreshPeer(peer, memberUids, pool);
                             })
+                            .filter(Objects::nonNull)
                             .collect(Collectors.toList());
                 });
     }
@@ -434,14 +441,28 @@ public class NetworkServiceImpl extends BaseRemoteServiceImpl implements Network
 
         if (CollectionUtils.isEmpty(leaves)) return new ArrayList<>(); // should never occur
 
+        List<Peer> result = new ArrayList<>();
+
         // If less than 100 node, get it in ONE call
         if (leaves.size() < 100) {
-            return networkRemoteService.getPeers(peer);
+            List<Peer> peers = networkRemoteService.getPeers(peer);
+
+            if (CollectionUtils.isNotEmpty(peers)) {
+                for (Peer peerEp : peers) {
+                    // Filter on endpoints - fix #18
+                    if (CollectionUtils.isEmpty(filterEndpoints)
+                            || StringUtils.isBlank(peerEp.getApi())
+                            || filterEndpoints.contains(peerEp.getApi())) {
+                        String hash = ServiceLocator.instance().getCryptoService().hash(peerEp.computeKey()); // compute the hash
+                        peerEp.setHash(hash);
+                        result.add(peerEp);
+                    }
+                }
+            }
         }
 
         // Get it by multiple call on /network/peering?leaf=
-        List<Peer> result = new ArrayList<>();
-        if (CollectionUtils.isNotEmpty(leaves)) {
+        else {
             int offset = 0;
             int count = Constants.Config.MAX_SAME_REQUEST_COUNT;
             while (offset < leaves.size()) {
@@ -591,12 +612,12 @@ public class NetworkServiceImpl extends BaseRemoteServiceImpl implements Network
                 peers.forEach(peerFound -> {
                     if (peerFound.getStats().getStatus() == Peer.PeerStatus.DOWN) {
                         String error = peerFound.getStats().getError();
-                        log.trace(String.format("Found peer [%s] [%s] %s",
+                        log.trace(String.format(" peer [%s] [%s] %s",
                                 peerFound.toString(),
                                 peerFound.getStats().getStatus().name(),
                                 error != null ? error : ""));
                     } else {
-                        log.trace(String.format("Found peer [%s] [%s] [v%s] block [%s]", peerFound.toString(),
+                        log.trace(String.format(" peer [%s] [%s] [v%s] block [%s]", peerFound.toString(),
                                 peerFound.getStats().getStatus().name(),
                                 peerFound.getStats().getVersion(),
                                 peerFound.getStats().getBlockNumber()
diff --git a/duniter4j-core-client/src/test/java/org/duniter/core/client/service/local/NetworkServiceTest.java b/duniter4j-core-client/src/test/java/org/duniter/core/client/service/local/NetworkServiceTest.java
index 8106d95f..1cdf0ef4 100644
--- a/duniter4j-core-client/src/test/java/org/duniter/core/client/service/local/NetworkServiceTest.java
+++ b/duniter4j-core-client/src/test/java/org/duniter/core/client/service/local/NetworkServiceTest.java
@@ -53,7 +53,7 @@ public class NetworkServiceTest {
 	}
 
 	@Test
-	public void start() throws Exception {
+	public void getPeers() throws Exception {
 
 		List<Peer> peers = service.getPeers(peer);
 
diff --git a/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/websocket/WebSocketServer.java b/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/websocket/WebSocketServer.java
index 8852808b..77eb1314 100644
--- a/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/websocket/WebSocketServer.java
+++ b/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/websocket/WebSocketServer.java
@@ -42,7 +42,6 @@ import org.duniter.core.exception.TechnicalException;
 import org.duniter.core.util.Preconditions;
 import org.duniter.elasticsearch.PluginSettings;
 import org.duniter.elasticsearch.threadpool.ThreadPool;
-import org.elasticsearch.client.Client;
 import org.elasticsearch.common.inject.Inject;
 import org.elasticsearch.common.logging.ESLogger;
 import org.elasticsearch.common.logging.Loggers;
@@ -59,12 +58,14 @@ public class WebSocketServer {
 
 
     public static final String WS_PATH = "/ws";
-    private final ESLogger log = Loggers.getLogger("duniter.ws");
+
+    private final ESLogger logger;
     private static final String PORT_RANGE_REGEXP = "[0-9]+-[0-9]+";
     private List<Class<?>> endPoints = new ArrayList<>();
 
     @Inject
     public WebSocketServer(final PluginSettings pluginSettings, ThreadPool threadPool) {
+        logger = Loggers.getLogger("duniter.ws", pluginSettings.getSettings(), new String[0]);
         // If WS enable
         if (pluginSettings.getWebSocketEnable()) {
             // When node started
@@ -77,7 +78,6 @@ public class WebSocketServer {
         }
     }
 
-
     public void addEndPoint(Class<?> endPoint) {
         endPoints.add(endPoint);
     }
@@ -93,7 +93,7 @@ public class WebSocketServer {
         Preconditions.checkNotNull(portOrRange);
         Preconditions.checkArgument(portOrRange.matches(PORT_RANGE_REGEXP) || portOrRange.matches("[0-9]+"));
 
-        log.info(String.format("Starting Websocket server... {%s:%s}", host, portOrRange));
+        logger.info(String.format("Starting Websocket server... {%s:%s}", host, portOrRange));
 
         String[] rangeParts = portOrRange.split("-");
         int port =  Integer.parseInt(rangeParts[0]);
@@ -131,11 +131,11 @@ public class WebSocketServer {
         }
 
         if (started) {
-            log.info(String.format("Websocket server started {%s:%s} on path [%s]", host, port, WS_PATH));
+            logger.info(String.format("Websocket server started {%s:%s} on path [%s]", host, port, WS_PATH));
         }
         else {
             String error = String.format("Failed to start Websocket server. Could not bind address {%s:%s}", host, port);
-            log.error(error);
+            logger.error(error);
             throw new TechnicalException(error);
         }
     }
-- 
GitLab