package com.limegroup.gnutella.messages.vendor;
import java.io.ByteArrayOutputStream;
import java.net.InetSocketAddress;
import java.util.Arrays;
import junit.framework.Test;
import org.limewire.mojito.KUID;
import org.limewire.mojito.routing.Contact;
import org.limewire.mojito.routing.ContactFactory;
import org.limewire.mojito.routing.Vendor;
import org.limewire.mojito.routing.Version;
import com.google.inject.Injector;
import com.limegroup.gnutella.LimeTestUtils;
import com.limegroup.gnutella.messages.Message;
import com.limegroup.gnutella.util.LimeTestCase;
public class DHTContactsMessageTest extends LimeTestCase {
private VendorMessageFactory vendorMessageFactory;
public DHTContactsMessageTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(DHTContactsMessageTest.class);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
@Override
protected void setUp() throws Exception {
Injector injector = LimeTestUtils.createInjector();
vendorMessageFactory = injector.getInstance(VendorMessageFactory.class);
}
public void testSerialization() throws Exception {
Contact c1 = ContactFactory.createUnknownContact(
Vendor.UNKNOWN, Version.ZERO,
KUID.createRandomID(), new InetSocketAddress("localhost", 3000));
Contact c2 = ContactFactory.createUnknownContact(
Vendor.UNKNOWN, Version.ZERO,
KUID.createRandomID(), new InetSocketAddress("localhost", 3001));
DHTContactsMessage msg1 = new DHTContactsMessage(Arrays.asList(c1, c2));
assertEquals(2, msg1.getContacts().size());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
msg1.write(baos);
baos.close();
byte[] raw = baos.toByteArray();
byte[] guid = new byte[16];
System.arraycopy(raw, 0, guid, 0, guid.length);
// byte func = raw[16];
byte ttl = raw[17];
byte hops = raw[18];
byte[] payload = new byte[raw.length - 23];
System.arraycopy(raw, 23, payload, 0, payload.length);
DHTContactsMessage msg2 = (DHTContactsMessage)vendorMessageFactory.deriveVendorMessage(
guid, ttl, hops, payload, Message.Network.UDP);
assertEquals(2, msg2.getContacts().size());
assertTrue(msg2.getContacts().contains(c1));
assertTrue(msg2.getContacts().contains(c2));
}
}