This is an automated email from the ASF dual-hosted git repository.

roryqi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-uniffle.git


The following commit(s) were added to refs/heads/master by this push:
     new 04cbdbb  [MINOR] Fix flaky test testGetHostIp (#141)
04cbdbb is described below

commit 04cbdbb6eec98cdd02fcc770e0cf1298db281c4f
Author: Chen Zhang <[email protected]>
AuthorDate: Mon Aug 8 16:35:05 2022 +0800

    [MINOR] Fix flaky test testGetHostIp (#141)
    
    ### What changes were proposed in this pull request?
    
    Do not use `InetAddress.getLocalHost().getHostAddress()`  in test because 
it is indeterminate. The return value may be different on a multi-NIC machine 
or on different system.
    
    ### Why are the changes needed?
    
    In addition to 127.0.0.1, the loopback address 127.0.1.1 can also be 
returned, which happens on Debian.This will make UT fail.
    
    ```
    org.opentest4j.AssertionFailedError:
    Expected :127.0.1.1
    Actual   :10.0.191.230
    
    at 
org.apache.uniffle.common.util.RssUtilsTest.testGetHostIp(RssUtilsTest.java:64)
    ```
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    UT.
---
 .../main/java/org/apache/uniffle/common/util/RssUtils.java |  8 ++++----
 .../java/org/apache/uniffle/common/util/RssUtilsTest.java  | 14 ++++++++------
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/common/src/main/java/org/apache/uniffle/common/util/RssUtils.java 
b/common/src/main/java/org/apache/uniffle/common/util/RssUtils.java
index 8b7f500..1224d8a 100644
--- a/common/src/main/java/org/apache/uniffle/common/util/RssUtils.java
+++ b/common/src/main/java/org/apache/uniffle/common/util/RssUtils.java
@@ -97,10 +97,10 @@ public class RssUtils {
     return result;
   }
 
-  // `InetAddress.getLocalHost().getHostAddress()` could return 127.0.0.1. To 
avoid
-  // this situation, we can get current ip through network interface (filtered 
ipv6,
-  // loop back, etc.). If the network interface in the machine is more than 
one, we
-  // will choose the first IP.
+  // `InetAddress.getLocalHost().getHostAddress()` could return
+  // 127.0.0.1 (127.0.1.1 on Debian). To avoid this situation, we can get 
current
+  // ip through network interface (filtered ipv6, loop back, etc.).
+  // If the network interface in the machine is more than one, we will choose 
the first IP.
   public static String getHostIp() throws Exception {
     // For K8S, there are too many IPs, it's hard to decide which we should 
use.
     // So we use the environment variable to tell RSS to use which one.
diff --git 
a/common/src/test/java/org/apache/uniffle/common/util/RssUtilsTest.java 
b/common/src/test/java/org/apache/uniffle/common/util/RssUtilsTest.java
index 3c946eb..97e732f 100644
--- a/common/src/test/java/org/apache/uniffle/common/util/RssUtilsTest.java
+++ b/common/src/test/java/org/apache/uniffle/common/util/RssUtilsTest.java
@@ -18,7 +18,9 @@
 package org.apache.uniffle.common.util;
 
 import java.lang.reflect.Field;
+import java.net.Inet4Address;
 import java.net.InetAddress;
+import java.net.NetworkInterface;
 import java.nio.ByteBuffer;
 import java.util.Collections;
 import java.util.List;
@@ -35,7 +37,7 @@ import org.apache.uniffle.common.ShuffleDataSegment;
 import org.apache.uniffle.common.ShuffleIndexResult;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotSame;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
@@ -57,12 +59,12 @@ public class RssUtilsTest {
   @Test
   public void testGetHostIp() {
     try {
-      String address = InetAddress.getLocalHost().getHostAddress();
       String realIp = RssUtils.getHostIp();
-      assertNotEquals("127.0.0.1", realIp);
-      if (!address.equals("127.0.0.1")) {
-        assertEquals(address, realIp);
-      }
+      InetAddress ia = InetAddress.getByName(realIp);
+      assertTrue(ia instanceof Inet4Address);
+      assertFalse(ia.isLinkLocalAddress() || ia.isAnyLocalAddress() || 
ia.isLoopbackAddress());
+      assertTrue(NetworkInterface.getByInetAddress(ia) != null);
+      assertTrue(ia.isReachable(5000));
       setEnv("RSS_IP", "8.8.8.8");
       assertEquals("8.8.8.8", RssUtils.getHostIp());
       setEnv("RSS_IP", "xxxx");

Reply via email to