|
@@ -0,0 +1,291 @@
|
|
|
+/**
|
|
|
+ * Licensed to the Apache Software Foundation (ASF) under one
|
|
|
+ * or more contributor license agreements. See the NOTICE file
|
|
|
+ * distributed with this work for additional information
|
|
|
+ * regarding copyright ownership. The ASF licenses this file
|
|
|
+ * to you under the Apache License, Version 2.0 (the
|
|
|
+ * "License"); you may not use this file except in compliance
|
|
|
+ * with the License. You may obtain a copy of the License at
|
|
|
+ *
|
|
|
+ * http://www.apache.org/licenses/LICENSE-2.0
|
|
|
+ *
|
|
|
+ * Unless required by applicable law or agreed to in writing, software
|
|
|
+ * distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
+ * See the License for the specific language governing permissions and
|
|
|
+ * limitations under the License.
|
|
|
+ */
|
|
|
+package org.apache.hadoop.util;
|
|
|
+
|
|
|
+import static org.junit.Assert.assertEquals;
|
|
|
+import static org.junit.Assert.assertFalse;
|
|
|
+import static org.junit.Assert.assertTrue;
|
|
|
+import static org.junit.Assert.fail;
|
|
|
+
|
|
|
+import java.net.InetAddress;
|
|
|
+import java.net.UnknownHostException;
|
|
|
+import java.util.Collection;
|
|
|
+
|
|
|
+import org.junit.Test;
|
|
|
+import org.mockito.Mockito;
|
|
|
+
|
|
|
+public class TestMachineList {
|
|
|
+ private static String IP_LIST = "10.119.103.110,10.119.103.112,10.119.103.114";
|
|
|
+ private static String IP_LIST_SPACES =
|
|
|
+ " 10.119.103.110 , 10.119.103.112,10.119.103.114 ,10.119.103.110, ";
|
|
|
+ private static String CIDR_LIST = "10.222.0.0/16,10.241.23.0/24";
|
|
|
+ private static String CIDR_LIST1 = "10.222.0.0/16";
|
|
|
+ private static String CIDR_LIST2 = "10.241.23.0/24";
|
|
|
+ private static String INVALID_CIDR = "10.241/24";
|
|
|
+ private static String IP_CIDR_LIST =
|
|
|
+ "10.222.0.0/16,10.119.103.110,10.119.103.112,10.119.103.114,10.241.23.0/24";
|
|
|
+ private static String HOST_LIST = "host1,host4";
|
|
|
+ private static String HOSTNAME_IP_CIDR_LIST =
|
|
|
+ "host1,10.222.0.0/16,10.119.103.110,10.119.103.112,10.119.103.114,10.241.23.0/24,host4,";
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testWildCard() {
|
|
|
+ //create MachineList with a list of of IPs
|
|
|
+ MachineList ml = new MachineList("*");
|
|
|
+
|
|
|
+ //test for inclusion with any IP
|
|
|
+ assertTrue(ml.includes("10.119.103.112"));
|
|
|
+ assertTrue(ml.includes("1.2.3.4"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testIPList() {
|
|
|
+ //create MachineList with a list of of IPs
|
|
|
+ MachineList ml = new MachineList(IP_LIST);
|
|
|
+
|
|
|
+ //test for inclusion with an known IP
|
|
|
+ assertTrue(ml.includes("10.119.103.112"));
|
|
|
+
|
|
|
+ //test for exclusion with an unknown IP
|
|
|
+ assertFalse(ml.includes("10.119.103.111"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testIPListSpaces() {
|
|
|
+ //create MachineList with a ip string which has duplicate ip and spaces
|
|
|
+ MachineList ml = new MachineList(IP_LIST_SPACES);
|
|
|
+
|
|
|
+ //test for inclusion with an known IP
|
|
|
+ assertTrue(ml.includes("10.119.103.112"));
|
|
|
+
|
|
|
+ //test for exclusion with an unknown IP
|
|
|
+ assertFalse(ml.includes("10.119.103.111"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testStaticIPHostNameList()throws UnknownHostException {
|
|
|
+ //create MachineList with a list of of Hostnames
|
|
|
+ InetAddress addressHost1 = InetAddress.getByName("1.2.3.1");
|
|
|
+ InetAddress addressHost4 = InetAddress.getByName("1.2.3.4");
|
|
|
+
|
|
|
+ MachineList.InetAddressFactory addressFactory =
|
|
|
+ Mockito.mock(MachineList.InetAddressFactory.class);
|
|
|
+ Mockito.when(addressFactory.getByName("host1")).thenReturn(addressHost1);
|
|
|
+ Mockito.when(addressFactory.getByName("host4")).thenReturn(addressHost4);
|
|
|
+
|
|
|
+ MachineList ml = new MachineList(
|
|
|
+ StringUtils.getTrimmedStringCollection(HOST_LIST), addressFactory);
|
|
|
+
|
|
|
+ //test for inclusion with an known IP
|
|
|
+ assertTrue(ml.includes("1.2.3.4"));
|
|
|
+
|
|
|
+ //test for exclusion with an unknown IP
|
|
|
+ assertFalse(ml.includes("1.2.3.5"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testHostNames() throws UnknownHostException {
|
|
|
+ //create MachineList with a list of of Hostnames
|
|
|
+ InetAddress addressHost1 = InetAddress.getByName("1.2.3.1");
|
|
|
+ InetAddress addressHost4 = InetAddress.getByName("1.2.3.4");
|
|
|
+ InetAddress addressMockHost4 = Mockito.mock(InetAddress.class);
|
|
|
+ Mockito.when(addressMockHost4.getCanonicalHostName()).thenReturn("differentName");
|
|
|
+
|
|
|
+ InetAddress addressMockHost5 = Mockito.mock(InetAddress.class);
|
|
|
+ Mockito.when(addressMockHost5.getCanonicalHostName()).thenReturn("host5");
|
|
|
+
|
|
|
+ MachineList.InetAddressFactory addressFactory =
|
|
|
+ Mockito.mock(MachineList.InetAddressFactory.class);
|
|
|
+ Mockito.when(addressFactory.getByName("1.2.3.4")).thenReturn(addressMockHost4);
|
|
|
+ Mockito.when(addressFactory.getByName("1.2.3.5")).thenReturn(addressMockHost5);
|
|
|
+ Mockito.when(addressFactory.getByName("host1")).thenReturn(addressHost1);
|
|
|
+ Mockito.when(addressFactory.getByName("host4")).thenReturn(addressHost4);
|
|
|
+
|
|
|
+ MachineList ml = new MachineList(
|
|
|
+ StringUtils.getTrimmedStringCollection(HOST_LIST), addressFactory );
|
|
|
+
|
|
|
+ //test for inclusion with an known IP
|
|
|
+ assertTrue(ml.includes("1.2.3.4"));
|
|
|
+
|
|
|
+ //test for exclusion with an unknown IP
|
|
|
+ assertFalse(ml.includes("1.2.3.5"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testHostNamesReverserIpMatch() throws UnknownHostException {
|
|
|
+ //create MachineList with a list of of Hostnames
|
|
|
+ InetAddress addressHost1 = InetAddress.getByName("1.2.3.1");
|
|
|
+ InetAddress addressHost4 = InetAddress.getByName("1.2.3.4");
|
|
|
+ InetAddress addressMockHost4 = Mockito.mock(InetAddress.class);
|
|
|
+ Mockito.when(addressMockHost4.getCanonicalHostName()).thenReturn("host4");
|
|
|
+
|
|
|
+ InetAddress addressMockHost5 = Mockito.mock(InetAddress.class);
|
|
|
+ Mockito.when(addressMockHost5.getCanonicalHostName()).thenReturn("host5");
|
|
|
+
|
|
|
+ MachineList.InetAddressFactory addressFactory =
|
|
|
+ Mockito.mock(MachineList.InetAddressFactory.class);
|
|
|
+ Mockito.when(addressFactory.getByName("1.2.3.4")).thenReturn(addressMockHost4);
|
|
|
+ Mockito.when(addressFactory.getByName("1.2.3.5")).thenReturn(addressMockHost5);
|
|
|
+ Mockito.when(addressFactory.getByName("host1")).thenReturn(addressHost1);
|
|
|
+ Mockito.when(addressFactory.getByName("host4")).thenReturn(addressHost4);
|
|
|
+
|
|
|
+ MachineList ml = new MachineList(
|
|
|
+ StringUtils.getTrimmedStringCollection(HOST_LIST), addressFactory );
|
|
|
+
|
|
|
+ //test for inclusion with an known IP
|
|
|
+ assertTrue(ml.includes("1.2.3.4"));
|
|
|
+
|
|
|
+ //test for exclusion with an unknown IP
|
|
|
+ assertFalse(ml.includes("1.2.3.5"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testCIDRs() {
|
|
|
+ //create MachineList with a list of of ip ranges specified in CIDR format
|
|
|
+ MachineList ml = new MachineList(CIDR_LIST);
|
|
|
+
|
|
|
+ //test for inclusion/exclusion
|
|
|
+ assertFalse(ml.includes("10.221.255.255"));
|
|
|
+ assertTrue(ml.includes("10.222.0.0"));
|
|
|
+ assertTrue(ml.includes("10.222.0.1"));
|
|
|
+ assertTrue(ml.includes("10.222.0.255"));
|
|
|
+ assertTrue(ml.includes("10.222.255.0"));
|
|
|
+ assertTrue(ml.includes("10.222.255.254"));
|
|
|
+ assertTrue(ml.includes("10.222.255.255"));
|
|
|
+ assertFalse(ml.includes("10.223.0.0"));
|
|
|
+
|
|
|
+ assertTrue(ml.includes("10.241.23.0"));
|
|
|
+ assertTrue(ml.includes("10.241.23.1"));
|
|
|
+ assertTrue(ml.includes("10.241.23.254"));
|
|
|
+ assertTrue(ml.includes("10.241.23.255"));
|
|
|
+
|
|
|
+ //test for exclusion with an unknown IP
|
|
|
+ assertFalse(ml.includes("10.119.103.111"));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testCIDRWith16bitmask() {
|
|
|
+ //create MachineList with a list of of ip ranges specified in CIDR format
|
|
|
+ MachineList ml = new MachineList(CIDR_LIST1);
|
|
|
+
|
|
|
+ //test for inclusion/exclusion
|
|
|
+ assertFalse(ml.includes("10.221.255.255"));
|
|
|
+ assertTrue(ml.includes("10.222.0.0"));
|
|
|
+ assertTrue(ml.includes("10.222.0.1"));
|
|
|
+ assertTrue(ml.includes("10.222.0.255"));
|
|
|
+ assertTrue(ml.includes("10.222.255.0"));
|
|
|
+ assertTrue(ml.includes("10.222.255.254"));
|
|
|
+ assertTrue(ml.includes("10.222.255.255"));
|
|
|
+ assertFalse(ml.includes("10.223.0.0"));
|
|
|
+
|
|
|
+ //test for exclusion with an unknown IP
|
|
|
+ assertFalse(ml.includes("10.119.103.111"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testCIDRWith8BitMask() {
|
|
|
+ //create MachineList with a list of of ip ranges specified in CIDR format
|
|
|
+ MachineList ml = new MachineList(CIDR_LIST2);
|
|
|
+
|
|
|
+ //test for inclusion/exclusion
|
|
|
+ assertFalse(ml.includes("10.241.22.255"));
|
|
|
+ assertTrue(ml.includes("10.241.23.0"));
|
|
|
+ assertTrue(ml.includes("10.241.23.1"));
|
|
|
+ assertTrue(ml.includes("10.241.23.254"));
|
|
|
+ assertTrue(ml.includes("10.241.23.255"));
|
|
|
+ assertFalse(ml.includes("10.241.24.0"));
|
|
|
+
|
|
|
+ //test for exclusion with an unknown IP
|
|
|
+ assertFalse(ml.includes("10.119.103.111"));
|
|
|
+ }
|
|
|
+
|
|
|
+ //test invalid cidr
|
|
|
+ @Test
|
|
|
+ public void testInvalidCIDR() {
|
|
|
+ //create MachineList with an Invalid CIDR
|
|
|
+ try {
|
|
|
+ new MachineList(INVALID_CIDR);
|
|
|
+ fail("Expected IllegalArgumentException");
|
|
|
+ } catch (IllegalArgumentException e) {
|
|
|
+ //expected Exception
|
|
|
+ } catch (Throwable t) {
|
|
|
+ fail ("Expected only IllegalArgumentException");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //
|
|
|
+ @Test
|
|
|
+ public void testIPandCIDRs() {
|
|
|
+ //create MachineList with a list of of ip ranges and ip addresses
|
|
|
+ MachineList ml = new MachineList(IP_CIDR_LIST);
|
|
|
+
|
|
|
+ //test for inclusion with an known IP
|
|
|
+ assertTrue(ml.includes("10.119.103.112"));
|
|
|
+
|
|
|
+ //test for exclusion with an unknown IP
|
|
|
+ assertFalse(ml.includes("10.119.103.111"));
|
|
|
+
|
|
|
+ //CIDR Ranges
|
|
|
+ assertFalse(ml.includes("10.221.255.255"));
|
|
|
+ assertTrue(ml.includes("10.222.0.0"));
|
|
|
+ assertTrue(ml.includes("10.222.255.255"));
|
|
|
+ assertFalse(ml.includes("10.223.0.0"));
|
|
|
+
|
|
|
+ assertFalse(ml.includes("10.241.22.255"));
|
|
|
+ assertTrue(ml.includes("10.241.23.0"));
|
|
|
+ assertTrue(ml.includes("10.241.23.255"));
|
|
|
+ assertFalse(ml.includes("10.241.24.0"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testHostNameIPandCIDRs() {
|
|
|
+ //create MachineList with a mix of ip addresses , hostnames and ip ranges
|
|
|
+ MachineList ml = new MachineList(HOSTNAME_IP_CIDR_LIST);
|
|
|
+
|
|
|
+ //test for inclusion with an known IP
|
|
|
+ assertTrue(ml.includes("10.119.103.112"));
|
|
|
+
|
|
|
+ //test for exclusion with an unknown IP
|
|
|
+ assertFalse(ml.includes("10.119.103.111"));
|
|
|
+
|
|
|
+ //CIDR Ranges
|
|
|
+ assertFalse(ml.includes("10.221.255.255"));
|
|
|
+ assertTrue(ml.includes("10.222.0.0"));
|
|
|
+ assertTrue(ml.includes("10.222.255.255"));
|
|
|
+ assertFalse(ml.includes("10.223.0.0"));
|
|
|
+
|
|
|
+ assertFalse(ml.includes("10.241.22.255"));
|
|
|
+ assertTrue(ml.includes("10.241.23.0"));
|
|
|
+ assertTrue(ml.includes("10.241.23.255"));
|
|
|
+ assertFalse(ml.includes("10.241.24.0"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testGetCollection() {
|
|
|
+ //create MachineList with a mix of ip addresses , hostnames and ip ranges
|
|
|
+ MachineList ml = new MachineList(HOSTNAME_IP_CIDR_LIST);
|
|
|
+
|
|
|
+ Collection<String> col = ml.getCollection();
|
|
|
+ //test getCollectionton to return the full collection
|
|
|
+ assertEquals(7,ml.getCollection().size());
|
|
|
+
|
|
|
+ for (String item:StringUtils.getTrimmedStringCollection(HOSTNAME_IP_CIDR_LIST)) {
|
|
|
+ assertTrue(col.contains(item));
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|