|
21 | 21 | import org.junit.Test;
|
22 | 22 |
|
23 | 23 | import java.lang.reflect.Field;
|
| 24 | +import java.lang.reflect.Method; |
| 25 | +import java.net.Inet4Address; |
| 26 | +import java.net.InetAddress; |
| 27 | +import java.net.NetworkInterface; |
| 28 | +import java.util.Arrays; |
| 29 | +import java.util.List; |
| 30 | +import java.util.Vector; |
24 | 31 |
|
| 32 | +import static org.junit.Assert.assertFalse; |
25 | 33 | import static org.junit.Assert.assertNotNull;
|
26 | 34 | import static org.junit.Assert.assertThat;
|
27 | 35 | import static org.hamcrest.CoreMatchers.is;
|
| 36 | +import static org.junit.Assert.assertTrue; |
| 37 | +import static org.mockito.Mockito.mock; |
| 38 | +import static org.mockito.Mockito.when; |
28 | 39 |
|
29 | 40 | public final class IpUtilsTest {
|
30 | 41 |
|
31 | 42 | @Test
|
32 | 43 | public void assertGetIp() {
|
33 | 44 | assertNotNull(IpUtils.getIp());
|
34 | 45 | }
|
35 |
| - |
| 46 | + |
| 47 | + @Test |
| 48 | + @SneakyThrows |
| 49 | + public void assertPreferredNetworkInterface() { |
| 50 | + System.setProperty(IpUtils.PREFERRED_NETWORK_INTERFACE, "eth0"); |
| 51 | + Method declaredMethod = IpUtils.class.getDeclaredMethod("isPreferredNetworkInterface", NetworkInterface.class); |
| 52 | + declaredMethod.setAccessible(true); |
| 53 | + NetworkInterface mockNetworkInterface = mock(NetworkInterface.class); |
| 54 | + when(mockNetworkInterface.getDisplayName()).thenReturn("eth0"); |
| 55 | + boolean result = (boolean) declaredMethod.invoke("isPreferredNetworkInterface", mockNetworkInterface); |
| 56 | + assertTrue(result); |
| 57 | + System.clearProperty(IpUtils.PREFERRED_NETWORK_INTERFACE); |
| 58 | + } |
| 59 | + |
| 60 | + @Test |
| 61 | + @SneakyThrows |
| 62 | + public void assertPreferredNetworkAddress() { |
| 63 | + Method declaredMethod = IpUtils.class.getDeclaredMethod("isPreferredAddress", InetAddress.class); |
| 64 | + declaredMethod.setAccessible(true); |
| 65 | + InetAddress inetAddress = mock(InetAddress.class); |
| 66 | + System.setProperty(IpUtils.PREFERRED_NETWORK_IP, "192.168"); |
| 67 | + when(inetAddress.getHostAddress()).thenReturn("192.168.0.100"); |
| 68 | + assertTrue((boolean) declaredMethod.invoke("isPreferredAddress", inetAddress)); |
| 69 | + when(inetAddress.getHostAddress()).thenReturn("10.10.0.100"); |
| 70 | + assertFalse((boolean) declaredMethod.invoke("isPreferredAddress", inetAddress)); |
| 71 | + System.clearProperty(IpUtils.PREFERRED_NETWORK_IP); |
| 72 | + System.setProperty(IpUtils.PREFERRED_NETWORK_IP, "10.10.*"); |
| 73 | + when(inetAddress.getHostAddress()).thenReturn("10.10.0.100"); |
| 74 | + assertTrue((boolean) declaredMethod.invoke("isPreferredAddress", inetAddress)); |
| 75 | + when(inetAddress.getHostAddress()).thenReturn("10.0.0.100"); |
| 76 | + assertFalse((boolean) declaredMethod.invoke("isPreferredAddress", inetAddress)); |
| 77 | + System.clearProperty(IpUtils.PREFERRED_NETWORK_IP); |
| 78 | + } |
| 79 | + |
| 80 | + @Test |
| 81 | + @SneakyThrows |
| 82 | + public void assertGetFirstNetworkInterface() { |
| 83 | + InetAddress address1 = mock(Inet4Address.class); |
| 84 | + when(address1.isLoopbackAddress()).thenReturn(false); |
| 85 | + when(address1.isAnyLocalAddress()).thenReturn(false); |
| 86 | + when(address1.isReachable(100)).thenReturn(true); |
| 87 | + when(address1.getHostAddress()).thenReturn("10.10.0.1"); |
| 88 | + Vector<InetAddress> addresses1 = new Vector<>(); |
| 89 | + addresses1.add(address1); |
| 90 | + InetAddress address2 = mock(Inet4Address.class); |
| 91 | + when(address2.isLoopbackAddress()).thenReturn(false); |
| 92 | + when(address2.isAnyLocalAddress()).thenReturn(false); |
| 93 | + when(address2.isReachable(100)).thenReturn(true); |
| 94 | + when(address2.getHostAddress()).thenReturn("192.168.99.100"); |
| 95 | + Vector<InetAddress> addresses2 = new Vector<>(); |
| 96 | + addresses2.add(address2); |
| 97 | + NetworkInterface networkInterface1 = mock(NetworkInterface.class); |
| 98 | + NetworkInterface networkInterface2 = mock(NetworkInterface.class); |
| 99 | + when(networkInterface1.getInetAddresses()).thenReturn(addresses1.elements()); |
| 100 | + when(networkInterface2.getInetAddresses()).thenReturn(addresses2.elements()); |
| 101 | + when(networkInterface1.getDisplayName()).thenReturn("eth1"); |
| 102 | + when(networkInterface2.getDisplayName()).thenReturn("eth2"); |
| 103 | + Method declaredMethod = IpUtils.class.getDeclaredMethod("getFirstNetworkInterface", List.class); |
| 104 | + declaredMethod.setAccessible(true); |
| 105 | + List<NetworkInterface> validNetworkInterfaces = Arrays.asList(networkInterface1, networkInterface2); |
| 106 | + assertThat(declaredMethod.invoke("getFirstNetworkInterface", validNetworkInterfaces), is(networkInterface2)); |
| 107 | + System.setProperty(IpUtils.PREFERRED_NETWORK_INTERFACE, "eth1"); |
| 108 | + assertThat(declaredMethod.invoke("getFirstNetworkInterface", validNetworkInterfaces), is(networkInterface1)); |
| 109 | + System.clearProperty(IpUtils.PREFERRED_NETWORK_INTERFACE); |
| 110 | + System.setProperty(IpUtils.PREFERRED_NETWORK_IP, "10.10.*"); |
| 111 | + assertThat(declaredMethod.invoke("getFirstNetworkInterface", validNetworkInterfaces), is(networkInterface1)); |
| 112 | + System.clearProperty(IpUtils.PREFERRED_NETWORK_IP); |
| 113 | + } |
| 114 | + |
36 | 115 | @Test
|
37 | 116 | @SneakyThrows
|
38 | 117 | public void assertGetHostName() {
|
|
0 commit comments