| /** |
| * 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 java.io.File; |
| import java.io.IOException; |
| import java.util.Arrays; |
| |
| import org.apache.commons.io.FileUtils; |
| import org.apache.hadoop.util.FileBasedIPList; |
| import org.apache.hadoop.util.IPList; |
| import org.junit.After; |
| import org.junit.Test; |
| |
| import junit.framework.TestCase; |
| |
| public class TestFileBasedIPList extends TestCase { |
| |
| @After |
| public void tearDown() { |
| removeFile("ips.txt"); |
| } |
| |
| /** |
| * Add a bunch of IPS to the file |
| * Check for inclusion |
| * Check for exclusion |
| */ |
| @Test |
| public void testSubnetsAndIPs() throws IOException { |
| |
| String[] ips = {"10.119.103.112", "10.221.102.0/23"}; |
| |
| createFileWithEntries ("ips.txt", ips); |
| |
| IPList ipList = new FileBasedIPList("ips.txt"); |
| |
| assertTrue ("10.119.103.112 is not in the list", |
| ipList.isIn("10.119.103.112")); |
| assertFalse ("10.119.103.113 is in the list", |
| ipList.isIn("10.119.103.113")); |
| |
| assertTrue ("10.221.102.0 is not in the list", |
| ipList.isIn("10.221.102.0")); |
| assertTrue ("10.221.102.1 is not in the list", |
| ipList.isIn("10.221.102.1")); |
| assertTrue ("10.221.103.1 is not in the list", |
| ipList.isIn("10.221.103.1")); |
| assertTrue ("10.221.103.255 is not in the list", |
| ipList.isIn("10.221.103.255")); |
| assertFalse("10.221.104.0 is in the list", |
| ipList.isIn("10.221.104.0")); |
| assertFalse("10.221.104.1 is in the list", |
| ipList.isIn("10.221.104.1")); |
| } |
| |
| /** |
| * Add a bunch of IPS to the file |
| * Check for inclusion |
| * Check for exclusion |
| */ |
| @Test |
| public void testNullIP() throws IOException { |
| |
| String[] ips = {"10.119.103.112", "10.221.102.0/23"}; |
| createFileWithEntries ("ips.txt", ips); |
| |
| IPList ipList = new FileBasedIPList("ips.txt"); |
| |
| assertFalse ("Null Ip is in the list", |
| ipList.isIn(null)); |
| } |
| |
| /** |
| * Add a bunch of subnets and IPSs to the file |
| * Check for inclusion |
| * Check for exclusion |
| */ |
| @Test |
| public void testWithMultipleSubnetAndIPs() throws IOException { |
| |
| String[] ips = {"10.119.103.112", "10.221.102.0/23", "10.222.0.0/16", |
| "10.113.221.221"}; |
| |
| createFileWithEntries ("ips.txt", ips); |
| |
| IPList ipList = new FileBasedIPList("ips.txt"); |
| |
| assertTrue ("10.119.103.112 is not in the list", |
| ipList.isIn("10.119.103.112")); |
| assertFalse ("10.119.103.113 is in the list", |
| ipList.isIn("10.119.103.113")); |
| |
| assertTrue ("10.221.103.121 is not in the list", |
| ipList.isIn("10.221.103.121")); |
| assertFalse("10.221.104.0 is in the list", |
| ipList.isIn("10.221.104.0")); |
| |
| assertTrue ("10.222.103.121 is not in the list", |
| ipList.isIn("10.222.103.121")); |
| assertFalse("10.223.104.0 is in the list", |
| ipList.isIn("10.223.104.0")); |
| |
| assertTrue ("10.113.221.221 is not in the list", |
| ipList.isIn("10.113.221.221")); |
| assertFalse("10.113.221.222 is in the list", |
| ipList.isIn("10.113.221.222")); |
| } |
| |
| /** |
| * Do not specify the file |
| * test for inclusion |
| * should be true as if the feature is turned off |
| */ |
| public void testFileNotSpecified() { |
| |
| IPList ipl = new FileBasedIPList(null); |
| |
| assertFalse("110.113.221.222 is in the list", |
| ipl.isIn("110.113.221.222")); |
| } |
| |
| /** |
| * Specify a non existent file |
| * test for inclusion |
| * should be true as if the feature is turned off |
| */ |
| public void testFileMissing() { |
| |
| IPList ipl = new FileBasedIPList("missingips.txt"); |
| |
| assertFalse("110.113.221.222 is in the list", |
| ipl.isIn("110.113.221.222")); |
| } |
| |
| /** |
| * Specify an existing file, but empty |
| * test for inclusion |
| * should be true as if the feature is turned off |
| */ |
| public void testWithEmptyList() throws IOException { |
| String[] ips = {}; |
| |
| createFileWithEntries ("ips.txt", ips); |
| IPList ipl = new FileBasedIPList("ips.txt"); |
| |
| assertFalse("110.113.221.222 is in the list", |
| ipl.isIn("110.113.221.222")); |
| } |
| |
| /** |
| * Specify an existing file, but ips in wrong format |
| * test for inclusion |
| * should be true as if the feature is turned off |
| */ |
| public void testForBadFIle() throws IOException { |
| String[] ips = { "10.221.102/23"}; |
| |
| createFileWithEntries ("ips.txt", ips); |
| |
| try { |
| new FileBasedIPList("ips.txt"); |
| fail(); |
| } catch (Exception e) { |
| //expects Exception |
| } |
| } |
| |
| /** |
| * Add a bunch of subnets and IPSs to the file. Keep one entry wrong. |
| * The good entries will still be used. |
| * Check for inclusion with good entries |
| * Check for exclusion |
| */ |
| public void testWithAWrongEntry() throws IOException { |
| |
| String[] ips = {"10.119.103.112", "10.221.102/23", "10.221.204.1/23"}; |
| |
| createFileWithEntries ("ips.txt", ips); |
| |
| try { |
| new FileBasedIPList("ips.txt"); |
| fail(); |
| } catch (Exception e) { |
| //expects Exception |
| } |
| } |
| |
| public static void createFileWithEntries(String fileName, String[] ips) |
| throws IOException { |
| FileUtils.writeLines(new File(fileName), Arrays.asList(ips)); |
| } |
| |
| public static void removeFile(String fileName) { |
| File file = new File(fileName); |
| if (file.exists()) { |
| new File(fileName).delete(); |
| } |
| } |
| } |