package com.limegroup.gnutella.filters;
import junit.framework.Test;
import junit.framework.TestSuite;
import com.limegroup.gnutella.Response;
import com.limegroup.gnutella.messages.PingReply;
import com.limegroup.gnutella.messages.PushRequest;
import com.limegroup.gnutella.messages.QueryReply;
import com.limegroup.gnutella.messages.QueryRequest;
import com.limegroup.gnutella.settings.FilterSettings;
/**
* Unit tests for IP, IPFilter, IPList
*/
public class IPTest extends com.limegroup.gnutella.util.BaseTestCase {
SpamFilter filter;
byte[] guid;
public IPTest(String name) {
super(name);
}
public static Test suite() {
return new TestSuite(IPTest.class);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
private byte[] bytes(int one, int two, int three, int four) {
return new byte[] { (byte)one, (byte)two, (byte)three, (byte)four };
}
public void testIPListLegacy() {
IPList iplist = new IPList();
iplist.add ("255.255.255.255");
iplist.add ("0.0.0.0");
iplist.add ("255.255.255.255");
iplist.add ("255.255.0.255");
iplist.add ("255.255.255.0");
iplist.add ("0.255.255.255");
iplist.add ("255.255.0.0");
iplist.add ("0.255.0.255");
iplist.add ("192.168.0.1/255.255.255.0");
iplist.add ("10.0.*.*");
assertTrue(iplist.contains (new IP("0.0.0.0")));
assertTrue(iplist.contains (new IP(bytes(0, 0, 0, 0))));
assertTrue(iplist.contains (new IP("255.255.255.255")));
assertTrue(iplist.contains (new IP(bytes(255,255,255,255))));
assertTrue(iplist.contains (new IP("255.255.255.0")));
assertTrue(iplist.contains (new IP(bytes(255,255,255,0))));
assertTrue(!iplist.contains (new IP("255.0.255.255")));
assertTrue(!iplist.contains (new IP(bytes(255,0,255,255))));
assertTrue(!iplist.contains (new IP("192.168.1.2/255.255.255.0")));
assertTrue(iplist.contains (new IP("192.168.0.2")));
assertTrue(iplist.contains (new IP(bytes(192,168,0,2))));
assertTrue(iplist.contains (new IP("192.168.0.1")));
assertTrue(iplist.contains (new IP(bytes(192,168,0,1))));
assertTrue(!iplist.contains (new IP("192.168.1.1")));
assertTrue(!iplist.contains (new IP(bytes(192,168,1,1))));
assertTrue(iplist.contains (new IP("10.0.1.1")));
assertTrue(iplist.contains (new IP(bytes(10,0,1,1))));
assertTrue(!iplist.contains (new IP("10.1.0.1")));
assertTrue(!iplist.contains (new IP(bytes(10,1,0,1))));
}
public void testIPLegacy() {
IP a=new IP("1.1.1.*");
IP b=new IP("1.1.1.2");
IP c=new IP("1.1.2.1");
IP b1 = new IP(bytes(1,1,1,2));
IP c1 = new IP(bytes(1,1,2,1));
assertTrue(a.contains(b));
assertTrue(! b.contains(a));
assertTrue(! a.contains(c));
assertTrue(! c.contains(a));
assertTrue(b.contains(b1));
assertTrue(c.contains(c1));
assertTrue(b1.contains(b));
assertTrue(c1.contains(c));
assertNotEquals(a,c);
assertNotEquals(a,b);
assertNotEquals(b,a);
assertNotEquals(b,c);
assertEquals(a, a);
assertEquals(b,b);
assertEquals(b, b1);
assertEquals(c, c1);
assertEquals(b.hashCode(), b1.hashCode());
assertEquals(c.hashCode(), c1.hashCode());
assertNotEquals("asdf", a);
IP d=new IP("1.1.1.0/255.255.255.0");
IP e=new IP("1.1.1.0/24");
IP f=new IP("1.1.1/24");
assertEquals(a,d);
assertEquals(d,a);
assertEquals(a.hashCode(),d.hashCode());
assertEquals(a,e);
assertEquals(e,a);
assertEquals(a.hashCode(),e.hashCode());
assertEquals(a,f);
assertEquals(f,a);
assertEquals(a.hashCode(),f.hashCode());
assertEquals(d,e);
assertEquals(f,e);
try {
new IP("this should fail.");
fail("illegal argument expected.");
} catch(IllegalArgumentException ignored) {}
try {
new IP("821.1.1.0");
fail("illegal argument excepted.");
} catch(IllegalArgumentException ignored) {}
try {
new IP("1.1*.1.0");
fail("illegal argument expected.");
} catch(IllegalArgumentException ignored) {}
try {
new IP("1.256.0.0");
fail("illegal argument expected.");
} catch(IllegalArgumentException ignored) {}
try {
new IP("1.1.1.1/33");
fail("illegal argument expected.");
} catch(IllegalArgumentException ignored) {}
try {
new IP("1.1.1.1/-1");
fail("illegal argument expected.");
} catch(IllegalArgumentException ignored) {}
try {
new IP("1.1..1");
fail("illegal argument expected.");
} catch(IllegalArgumentException ignored) {}
try {
new IP("1.1.1.1/255.255.256.255");
fail("illegal argument expected.");
} catch(IllegalArgumentException ignored) {}
try {
new IP("1.1234.1.1");
fail("illegal argument expected.");
} catch(IllegalArgumentException ignored) {}
try {
new IP("1.1.1.1/255.1234.255.255");
fail("illegal argument expected.");
} catch(IllegalArgumentException ignored) {}
try {
new IP(new byte[] {0,0,0});
fail("illegal argument expected.");
} catch(IllegalArgumentException ignored) {}
try {
new IP(new byte[] {0,0,0,0,0});
fail("illegal argument expected.");
} catch(IllegalArgumentException ignored) {}
}
public void testIPFilterLegacy() {
FilterSettings.BLACK_LISTED_IP_ADDRESSES.setValue(
new String[] {"18.239.0.*", "13.0.0.0"});
FilterSettings.WHITE_LISTED_IP_ADDRESSES.setValue(
new String[] {"18.239.0.144"});
IPFilter filter = IPFilter.instance();
assertTrue(filter.allow("18.240.0.0"));
assertTrue(! filter.allow("18.239.0.142"));
assertTrue(filter.allow("18.239.0.144"));
assertTrue(! filter.allow("13.0.0.0"));
assertTrue(filter.allow("13.0.0.1"));
byte[] address={(byte)18, (byte)239, (byte)0, (byte)144};
assertTrue(filter.allow(
PingReply.createExternal(new byte[16], (byte)3, 6346, address, false)));
byte[] address2=new byte[] {(byte)18, (byte)239, (byte)0, (byte)143};
assertTrue(! filter.allow(
new QueryReply(new byte[16], (byte)3, 6346, address2, 0,
new Response[0], new byte[16], false)));
assertTrue(filter.allow(QueryRequest.createQuery("test", (byte)3)));
PushRequest push1=new PushRequest(
new byte[16], (byte)3, new byte[16], 0l, address, 6346);
assertTrue(filter.allow(push1));
PushRequest push2=new PushRequest(
new byte[16], (byte)3, new byte[16], 0l, address2, 6346);
assertTrue(! filter.allow(push2));
}
public void testGetDistanceTo() {
IP ipRange = new IP("18.194.0.1/16");
IP ip = new IP("18.194.0.37");
assertEquals("Distance between an IP and its subnet should be zero.", 0, ipRange.getDistanceTo(ip));
ip = new IP("128.0.0.1");
assertLessThan("Expect the high-order bit of the xor distance to be set", 0 , ipRange.getDistanceTo(ip));
ipRange = new IP("0.0.0.0/16");
ip = new IP("127.255.255.255"); // = Integer.MAX_VALUE
assertEquals(0x7FFF0000, ipRange.getDistanceTo(ip));
IP ipRange2 = new IP("10.1.2.3/8");
assertEquals("Incorrect distance between two ranges", 0x0A000000,ipRange.getDistanceTo(ipRange2));
}
}