]> git.basschouten.com Git - openhab-addons.git/commitdiff
[network] Fix latency parsing on windows 10 (#8781)
authorConnor Petty <mistercpp2000@gmail.com>
Sun, 18 Oct 2020 18:43:09 +0000 (11:43 -0700)
committerGitHub <noreply@github.com>
Sun, 18 Oct 2020 18:43:09 +0000 (20:43 +0200)
Fixes #8776

Signed-off-by: Connor Petty <mistercpp2000+gitsignoff@gmail.com>
bundles/org.openhab.binding.network/src/main/java/org/openhab/binding/network/internal/discovery/NetworkDiscoveryService.java
bundles/org.openhab.binding.network/src/main/java/org/openhab/binding/network/internal/utils/LatencyParser.java
bundles/org.openhab.binding.network/src/test/java/org/openhab/binding/network/internal/utils/LatencyParserTest.java

index 7c1676d1b95554305bbd1ca4f7643ed7d735cd26..26a913a0c6ca81ed243f0f1e1168adc1d5750daa 100644 (file)
@@ -22,6 +22,7 @@ import java.util.Set;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -65,7 +66,7 @@ public class NetworkDiscoveryService extends AbstractDiscoveryService implements
     // TCP port 1025 (Xbox / MS-RPC)
     private Set<Integer> tcpServicePorts = Collections
             .unmodifiableSet(Stream.of(80, 548, 554, 1025).collect(Collectors.toSet()));
-    private Integer scannedIPcount = 0;
+    private AtomicInteger scannedIPcount = new AtomicInteger(0);
     private @Nullable ExecutorService executorService = null;
     private final NetworkBindingConfiguration configuration = new NetworkBindingConfiguration();
     private final NetworkUtils networkUtils = new NetworkUtils();
@@ -135,7 +136,7 @@ public class NetworkDiscoveryService extends AbstractDiscoveryService implements
         logger.trace("Starting Network Device Discovery");
 
         final Set<String> networkIPs = networkUtils.getNetworkIPs(MAXIMUM_IPS_PER_INTERFACE);
-        scannedIPcount = 0;
+        scannedIPcount.set(0);
 
         for (String ip : networkIPs) {
             final PresenceDetection s = new PresenceDetection(this, 2000);
@@ -152,12 +153,10 @@ public class NetworkDiscoveryService extends AbstractDiscoveryService implements
             service.execute(() -> {
                 Thread.currentThread().setName("Discovery thread " + ip);
                 s.performPresenceDetection(true);
-                synchronized (scannedIPcount) {
-                    scannedIPcount += 1;
-                    if (scannedIPcount == networkIPs.size()) {
-                        logger.trace("Scan of {} IPs successful", scannedIPcount);
-                        stopScan();
-                    }
+                int count = scannedIPcount.incrementAndGet();
+                if (count == networkIPs.size()) {
+                    logger.trace("Scan of {} IPs successful", scannedIPcount);
+                    stopScan();
                 }
             });
         }
index 6217739efbd8701f962927d4fb3131f65300ae2d..0cf6db14307d633b4d0b0fe103ab1c063cc04428 100644 (file)
@@ -26,6 +26,7 @@ import org.slf4j.LoggerFactory;
  */
 public class LatencyParser {
 
+    private static Pattern LATENCY_PATTERN = Pattern.compile(".*time=(.*) ?ms");
     private final Logger logger = LoggerFactory.getLogger(LatencyParser.class);
 
     // This is how the input looks like on Mac and Linux:
@@ -47,8 +48,7 @@ public class LatencyParser {
     public Optional<Double> parseLatency(String inputLine) {
         logger.debug("Parsing latency from input {}", inputLine);
 
-        String pattern = ".*time=(.*) ms";
-        Matcher m = Pattern.compile(pattern).matcher(inputLine);
+        Matcher m = LATENCY_PATTERN.matcher(inputLine);
         if (m.find() && m.groupCount() == 1) {
             return Optional.of(Double.parseDouble(m.group(1)));
         }
index 372f77820e31310a5632fe09d7a4d2abb97eb78a..75661306e1b3f688b60c752792bb8e72b89e31eb 100644 (file)
@@ -58,4 +58,18 @@ public class LatencyParserTest {
             assertFalse(resultLatency.isPresent());
         }
     }
+
+    @Test
+    public void parseWindows10ResultFoundTest() {
+        // Arrange
+        LatencyParser latencyParser = new LatencyParser();
+        String input = "Reply from 192.168.178.207: bytes=32 time=2ms TTL=64";
+
+        // Act
+        Optional<Double> resultLatency = latencyParser.parseLatency(input);
+
+        // Assert
+        assertTrue(resultLatency.isPresent());
+        assertEquals(2, resultLatency.get(), 0);
+    }
 }