/*
* This file is part of the Wayback archival access software
* (http://archive-access.sourceforge.net/projects/wayback/).
*
* Licensed to the Internet Archive (IA) by one or more individual
* contributors.
*
* The IA 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.archive.wayback.util;
import junit.framework.TestCase;
public class IPRangeTest extends TestCase {
public void testBitOn() {
byte b = (byte) 0xFF;
for(int i=0; i<8; i++) {
assertTrue(IPRange.isOn(b, i));
}
b = (byte) 0x80;
assertTrue(IPRange.isOn(b, 0));
for(int i=1; i<8; i++) {
assertFalse(IPRange.isOn(b, i));
}
b = (byte) 0xc0;
assertTrue(IPRange.isOn(b, 0));
assertTrue(IPRange.isOn(b, 1));
for(int i=2; i<8; i++) {
assertFalse(IPRange.isOn(b, i));
}
b |= 0x01;
assertTrue(IPRange.isOn(b, 0));
assertTrue(IPRange.isOn(b, 1));
assertTrue(IPRange.isOn(b, 7));
for(int i=2; i<7; i++) {
assertFalse(IPRange.isOn(b, i));
}
b = (byte) 0xf0 & (byte) 0x00;
for(int i=0; i<8; i++) {
assertFalse(IPRange.isOn(b, i));
}
b = (byte) 0xf0 & (byte) 0x80;
assertTrue(IPRange.isOn(b, 0));
for(int i=1; i<8; i++) {
assertFalse(IPRange.isOn(b, i));
}
}
public void testBitString() {
assertEquals("00000000",IPRange.bitString((byte)0x00));
assertEquals("11111111",IPRange.bitString((byte)0xff));
assertEquals("11110000",IPRange.bitString((byte)0xf0));
assertEquals("11100000",IPRange.bitString((byte)0xe0));
assertEquals("11000000",IPRange.bitString((byte)0xc0));
assertEquals("11001100",IPRange.bitString((byte)0xcc));
assertEquals("11001101",IPRange.bitString((byte)0xcd));
assertEquals("00010000",IPRange.bitString((byte)0x10));
assertEquals("00010001",IPRange.bitString((byte)0x11));
}
public void testMask() {
byte[] b = IPRange.maskBits(0);
assertEquals("00000000",IPRange.bitString(b[0]));
assertEquals("00000000",IPRange.bitString(b[1]));
assertEquals("00000000",IPRange.bitString(b[2]));
assertEquals("00000000",IPRange.bitString(b[3]));
b = IPRange.maskBits(1);
assertEquals("10000000",IPRange.bitString(b[0]));
assertEquals("00000000",IPRange.bitString(b[1]));
assertEquals("00000000",IPRange.bitString(b[2]));
assertEquals("00000000",IPRange.bitString(b[3]));
b = IPRange.maskBits(2);
assertEquals("11000000",IPRange.bitString(b[0]));
assertEquals("00000000",IPRange.bitString(b[1]));
assertEquals("00000000",IPRange.bitString(b[2]));
assertEquals("00000000",IPRange.bitString(b[3]));
b = IPRange.maskBits(9);
assertEquals("11111111",IPRange.bitString(b[0]));
assertEquals("10000000",IPRange.bitString(b[1]));
assertEquals("00000000",IPRange.bitString(b[2]));
assertEquals("00000000",IPRange.bitString(b[3]));
b = IPRange.maskBits(23);
assertEquals("11111111",IPRange.bitString(b[0]));
assertEquals("11111111",IPRange.bitString(b[1]));
assertEquals("11111110",IPRange.bitString(b[2]));
assertEquals("00000000",IPRange.bitString(b[3]));
b = IPRange.maskBits(30);
assertEquals("11111111",IPRange.bitString(b[0]));
assertEquals("11111111",IPRange.bitString(b[1]));
assertEquals("11111111",IPRange.bitString(b[2]));
assertEquals("11111100",IPRange.bitString(b[3]));
b = IPRange.maskBits(31);
assertEquals("11111111",IPRange.bitString(b[0]));
assertEquals("11111111",IPRange.bitString(b[1]));
assertEquals("11111111",IPRange.bitString(b[2]));
assertEquals("11111110",IPRange.bitString(b[3]));
b = IPRange.maskBits(32);
assertEquals("11111111",IPRange.bitString(b[0]));
assertEquals("11111111",IPRange.bitString(b[1]));
assertEquals("11111111",IPRange.bitString(b[2]));
assertEquals("11111111",IPRange.bitString(b[3]));
}
public void testParse() {
IPRange r = new IPRange();
assertFalse(r.setRange("127.0.0."));
assertFalse(r.setRange("256.0.0.1"));
assertFalse(r.setRange("0.256.0.0.1"));
assertFalse(r.setRange("0.256.0.0"));
assertFalse(r.setRange("0.0.0.256"));
assertTrue(r.setRange("127.0.0.1"));
assertTrue(r.setRange("255.0.0.0"));
assertTrue(r.setRange("0.0.0.255"));
assertTrue(r.setRange("127.127.127.127"));
assertTrue(r.setRange("127.127.127.255"));
assertTrue(r.setRange("128.0.0.0"));
byte[] b = r.getMask();
assertEquals("11111111",IPRange.bitString(b[0]));
assertEquals("11111111",IPRange.bitString(b[1]));
assertEquals("11111111",IPRange.bitString(b[2]));
assertEquals("11111111",IPRange.bitString(b[3]));
b = r.getIp();
assertEquals("10000000",IPRange.bitString(b[0]));
assertEquals("00000000",IPRange.bitString(b[1]));
assertEquals("00000000",IPRange.bitString(b[2]));
assertEquals("00000000",IPRange.bitString(b[3]));
assertTrue(r.setRange("129.0.0.0"));
b = r.getMask();
assertEquals("11111111",IPRange.bitString(b[0]));
assertEquals("11111111",IPRange.bitString(b[1]));
assertEquals("11111111",IPRange.bitString(b[2]));
assertEquals("11111111",IPRange.bitString(b[3]));
b = r.getIp();
assertEquals("10000001",IPRange.bitString(b[0]));
assertEquals("00000000",IPRange.bitString(b[1]));
assertEquals("00000000",IPRange.bitString(b[2]));
assertEquals("00000000",IPRange.bitString(b[3]));
assertTrue(r.setRange("129.0.0.0/30"));
b = r.getMask();
assertEquals("11111111",IPRange.bitString(b[0]));
assertEquals("11111111",IPRange.bitString(b[1]));
assertEquals("11111111",IPRange.bitString(b[2]));
assertEquals("11111100",IPRange.bitString(b[3]));
b = r.getIp();
assertEquals("10000001",IPRange.bitString(b[0]));
assertEquals("00000000",IPRange.bitString(b[1]));
assertEquals("00000000",IPRange.bitString(b[2]));
assertEquals("00000000",IPRange.bitString(b[3]));
assertTrue(r.setRange("129.129.129.129/24"));
b = r.getMask();
assertEquals("11111111",IPRange.bitString(b[0]));
assertEquals("11111111",IPRange.bitString(b[1]));
assertEquals("11111111",IPRange.bitString(b[2]));
assertEquals("00000000",IPRange.bitString(b[3]));
b = r.getIp();
assertEquals("10000001",IPRange.bitString(b[0]));
assertEquals("10000001",IPRange.bitString(b[1]));
assertEquals("10000001",IPRange.bitString(b[2]));
assertEquals("00000000",IPRange.bitString(b[3]));
}
public void testContains() {
IPRange r = new IPRange();
assertTrue(r.setRange("129.129.129.0/24"));
assertTrue(r.contains("129.129.129.129"));
assertTrue(r.contains("129.129.129.255"));
assertTrue(r.contains("129.129.129.0"));
assertFalse(r.contains("129.129.128.0"));
assertFalse(r.contains("129.129.128.255"));
assertTrue(r.setRange("129.129.129.129/24"));
assertTrue(r.contains("129.129.129.129"));
assertTrue(r.contains("129.129.129.255"));
assertTrue(r.contains("129.129.129.0"));
assertFalse(r.contains("129.129.128.0"));
assertFalse(r.contains("129.129.128.255"));
assertTrue(r.setRange("129.129.129.129/25"));
assertTrue(r.contains("129.129.129.128"));
assertTrue(r.contains("129.129.129.129"));
assertTrue(r.contains("129.129.129.255"));
assertFalse(r.contains("129.129.129.0"));
assertFalse(r.contains("129.129.128.0"));
assertFalse(r.contains("129.129.128.255"));
}
}