package org.limewire.net.address; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.LinkedHashSet; import java.util.Set; import junit.framework.Test; import org.limewire.io.Connectable; import org.limewire.io.ConnectableImpl; import org.limewire.io.GGEP; import org.limewire.io.GUID; import org.limewire.io.IOUtils; import org.limewire.util.BaseTestCase; import org.limewire.util.TestUtils; public class FirewalledAddressSerializerTest extends BaseTestCase { private FirewalledAddressSerializer serializer; private ConnectableSerializer connectableSerializer; public FirewalledAddressSerializerTest(String name) { super(name); } public static Test suite() { return buildTestSuite(FirewalledAddressSerializerTest.class); } @Override protected void setUp() throws Exception { serializer = new FirewalledAddressSerializer(new ConnectableSerializer()); connectableSerializer = new ConnectableSerializer(); } public void testSerialize() throws Exception { GUID guid = new GUID(); Set<Connectable> proxies = new LinkedHashSet<Connectable>(); Connectable proxy1 = new ConnectableImpl("127.0.0.1", 10, true); Connectable proxy2 = new ConnectableImpl("129.0.0.1", 15, false); proxies.add(proxy1); proxies.add(proxy2); FirewalledAddress address = new FirewalledAddress(proxy1, proxy2, guid, proxies, 1); byte[] serialized = serializer.serialize(address); GGEP ggep = new GGEP(serialized, 0); assertTrue(ggep.hasKey("PU")); assertTrue(ggep.hasKey("PR")); assertTrue(ggep.hasKey("PX")); assertTrue(ggep.hasKey("GU")); assertTrue(ggep.hasKey("FW")); Connectable readAddress = connectableSerializer.deserialize(ggep.getBytes("PU")); assertEquals("127.0.0.1", readAddress.getAddress()); assertEquals(10, readAddress.getPort()); assertTrue(readAddress.isTLSCapable()); readAddress = connectableSerializer.deserialize(ggep.getBytes("PR")); assertEquals("129.0.0.1", readAddress.getAddress()); assertEquals(15, readAddress.getPort()); assertFalse(readAddress.isTLSCapable()); Set<Connectable> readproxies = connectableSerializer.deserializeSet(ggep.getBytes("PX")); assertContains(readproxies, proxy1); assertContains(readproxies, proxy2); assertEquals(guid.bytes(), ggep.getBytes("GU")); assertEquals(1, ggep.getInt("FW")); } public void testDeserializeFromBytes() throws IOException { File serializedAddressFile = TestUtils.getResourceInPackage("firewalled_address.txt", FirewalledAddressSerializerTest.class); byte [] serialzedAddress = IOUtils.readFully(new FileInputStream(serializedAddressFile)); Object address = serializer.deserialize(serialzedAddress); assertInstanceof(FirewalledAddress.class, address); FirewalledAddress firewalledAddress = (FirewalledAddress)address; GUID guid = new GUID("8D342E7D874A0AB26B0A4E3627C76F00"); Set<Connectable> proxies = new LinkedHashSet<Connectable>(); Connectable proxy1 = new ConnectableImpl("127.0.0.1", 10, true); Connectable proxy2 = new ConnectableImpl("129.0.0.1", 15, false); proxies.add(proxy1); proxies.add(proxy2); FirewalledAddress expectedAddress = new FirewalledAddress(proxy1, proxy2, guid, proxies, 1); assertEquals(expectedAddress, firewalledAddress); } public void testDeserializeFromString() { try { serializer.deserialize("192.168.1.1"); fail(); } catch (IOException e) { // expected result } } public void testDeserializeNotEnoughData() { try { serializer.deserialize(new byte[0]); fail("io exception excepted, because of end of stream"); } catch (IOException ie) { } try { serializer.deserialize(new byte[1]); fail("io exception excepted, because of end of stream"); } catch (IOException ie) { } } }