package org.limewire.net.address;
import java.util.Set;
import junit.framework.Test;
import org.limewire.io.Connectable;
import org.limewire.io.ConnectableImpl;
import org.limewire.io.GUID;
import org.limewire.util.BaseTestCase;
public class FirewalledAddressTest extends BaseTestCase {
public FirewalledAddressTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(FirewalledAddressTest.class);
}
public void testThrowsIllegalArgumentIfFWTAndInvalidPublicAddress() throws Exception {
try {
new FirewalledAddress(ConnectableImpl.INVALID_CONNECTABLE, new ConnectableImpl("192.168.0.1", 1000, true), new GUID(), Connectable.EMPTY_SET, 1);
fail("should have thrown illegal argument");
} catch (IllegalArgumentException iae) {
}
// make sure it doesn't throw if fwt is disabled
new FirewalledAddress(ConnectableImpl.INVALID_CONNECTABLE, new ConnectableImpl("192.168.0.1", 1000, true), new GUID(), Connectable.EMPTY_SET, 0);
}
public void testEquals() throws Exception {
// identity
Connectable publicAddress = new ConnectableImpl("129.0.0.1", 2000, true);
Connectable privateAddress = new ConnectableImpl("192.168.0.1", 1000, true);
GUID clientGuid = new GUID();
Set<Connectable> proxies = new StrictIpPortSet<Connectable>(new ConnectableImpl("200.0.0.0", 1000, true),
new ConnectableImpl("100.0.0.0", 1000, false));
FirewalledAddress address1 = new FirewalledAddress(publicAddress, privateAddress, clientGuid, proxies, 1);
assertEquals(address1, address1);
// copy
assertEquals(address1, new FirewalledAddress(new ConnectableImpl("129.0.0.1", 2000, true),
new ConnectableImpl("192.168.0.1", 1000, true), new GUID(clientGuid.bytes()),
new StrictIpPortSet<Connectable>(new ConnectableImpl("200.0.0.0", 1000, true),
new ConnectableImpl("100.0.0.0", 1000, false)), 1));
// different public address
FirewalledAddress address2 = new FirewalledAddress(new ConnectableImpl("100.0.0.1", 20, false), privateAddress, clientGuid, proxies, 1);
assertNotEquals(address1, address2);
// different private address
address2 = new FirewalledAddress(publicAddress, new ConnectableImpl("10.0.0.1", 20, false), clientGuid, proxies, 1);
assertNotEquals(address1, address2);
// different client guid
address2 = new FirewalledAddress(publicAddress, privateAddress, new GUID(), proxies, 1);
assertNotEquals(address1, address2);
// different proxy
address2 = new FirewalledAddress(publicAddress, privateAddress, clientGuid, new StrictIpPortSet<Connectable>(new ConnectableImpl("200.0.0.0", 1000, true), new ConnectableImpl("100.0.0.0", 5555, false)), 1);
assertNotEquals(address1, address2);
// different fwt
address2 = new FirewalledAddress(publicAddress, privateAddress, clientGuid, proxies, 2);
assertNotEquals(address1, address2);
address2 = new FirewalledAddress(publicAddress, privateAddress, clientGuid, proxies, 0);
assertNotEquals(address1, address2);
}
public void testHashCode() throws Exception {
// identity
Connectable publicAddress = new ConnectableImpl("129.0.0.1", 2000, true);
Connectable privateAddress = new ConnectableImpl("192.168.0.1", 1000, true);
GUID clientGuid = new GUID();
Set<Connectable> proxies = new StrictIpPortSet<Connectable>(new ConnectableImpl("200.0.0.0", 1000, true), new ConnectableImpl("100.0.0.0", 1000, false));
FirewalledAddress address1 = new FirewalledAddress(publicAddress, privateAddress, clientGuid, proxies, 1);
assertEquals(address1.hashCode(), address1.hashCode());
// copy
assertEquals(address1.hashCode(), new FirewalledAddress(new ConnectableImpl("129.0.0.1", 2000, true),
new ConnectableImpl("192.168.0.1", 1000, true), new GUID(clientGuid.bytes()),
new StrictIpPortSet<Connectable>(new ConnectableImpl("200.0.0.0", 1000, true),
new ConnectableImpl("100.0.0.0", 1000, false)), 1).hashCode());
// different public address
FirewalledAddress address2 = new FirewalledAddress(new ConnectableImpl("100.0.0.1", 20, false), privateAddress, clientGuid, proxies, 1);
assertNotEquals(address1.hashCode(), address2.hashCode());
// different private address
address2 = new FirewalledAddress(publicAddress, new ConnectableImpl("10.0.0.1", 20, false), clientGuid, proxies, 1);
assertNotEquals(address1.hashCode(), address2.hashCode());
// different client guid
address2 = new FirewalledAddress(publicAddress, privateAddress, new GUID(), proxies, 1);
assertNotEquals(address1.hashCode(), address2.hashCode());
// different proxy
address2 = new FirewalledAddress(publicAddress, privateAddress, clientGuid, new StrictIpPortSet<Connectable>(new ConnectableImpl("200.0.0.0", 1000, true), new ConnectableImpl("100.0.0.0", 5555, false)), 1);
assertNotEquals(address1.hashCode(), address2.hashCode());
// different fwt
address2 = new FirewalledAddress(publicAddress, privateAddress, clientGuid, proxies, 2);
assertNotEquals(address1.hashCode(), address2.hashCode());
address2 = new FirewalledAddress(publicAddress, privateAddress, clientGuid, proxies, 0);
assertNotEquals(address1.hashCode(), address2.hashCode());
}
}