package org.limewire.mojito; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.util.Map; import junit.framework.TestSuite; import org.limewire.mojito.db.DHTValueEntity; import org.limewire.mojito.db.DHTValueType; import org.limewire.mojito.db.Database; import org.limewire.mojito.db.impl.DHTValueImpl; import org.limewire.mojito.db.impl.DatabaseImpl; import org.limewire.mojito.routing.Contact; import org.limewire.mojito.routing.ContactFactory; import org.limewire.mojito.routing.RouteTable; import org.limewire.mojito.routing.Vendor; import org.limewire.mojito.routing.Version; import org.limewire.mojito.routing.impl.RouteTableImpl; import org.limewire.util.StringUtils; public class SerializeTest extends MojitoTestCase { public SerializeTest(String name) { super(name); } public static TestSuite suite() { return buildTestSuite(SerializeTest.class); } public static void main(String[] args) throws Exception { junit.textui.TestRunner.run(suite()); } public void testSerializeRouteTable() throws IOException, ClassNotFoundException { RouteTable routeTable1 = new RouteTableImpl(); for (int i = 0; i < 100; i++) { Contact node = ContactFactory.createUnknownContact( Vendor.UNKNOWN, Version.ZERO, KUID.createRandomID(), new InetSocketAddress("localhost", 2000 + i)); routeTable1.add(node); } assertEquals(101, routeTable1.getContacts().size()); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(routeTable1); oos.close(); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); RouteTable routeTable2 = (RouteTable)ois.readObject(); ois.close(); assertNotSame(routeTable1, routeTable2); assertEquals(101, routeTable2.getContacts().size()); for (Contact node : routeTable1.getContacts()) { Contact other = routeTable2.get(node.getNodeID()); assertNotNull(other); assertEquals(node, other); assertNotSame(node, other); } } public void testSerializeDatabase() throws IOException, ClassNotFoundException { Database database1 = new DatabaseImpl(); for (int i = 0; i < 100; i++) { SocketAddress addr = new InetSocketAddress("192.168.1." + i, 2000 + i); Contact node = ContactFactory.createLiveContact( addr, Vendor.UNKNOWN, Version.ZERO, KUID.createRandomID(), addr, 0, Contact.DEFAULT_FLAG); KUID primaryKey = KUID.createRandomID(); DHTValueEntity entity = DHTValueEntity.createFromRemote(node, node, primaryKey, new DHTValueImpl(DHTValueType.TEST, Version.ZERO, StringUtils.toUTF8Bytes("Hello World"))); database1.store(entity); } assertEquals(100, database1.getValueCount()); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(database1); oos.close(); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); Database database2 = (Database)ois.readObject(); ois.close(); assertNotSame(database1, database2); assertEquals(100, database2.getValueCount()); for (DHTValueEntity entity : database1.values()) { Map<KUID, DHTValueEntity> bag = database2.get(entity.getPrimaryKey()); assertNotNull(bag); DHTValueEntity other = bag.get(entity.getSecondaryKey()); assertNotNull(other); assertEquals(entity, other); assertNotSame(entity, other); } } }