package org.limewire.rudp.messages.impl;
import java.io.ByteArrayOutputStream;
import java.nio.ByteBuffer;
import junit.framework.Test;
import org.limewire.rudp.messages.RUDPMessage;
import org.limewire.rudp.messages.RUDPMessageFactory;
import org.limewire.rudp.messages.SynMessage.Role;
import org.limewire.util.Base32;
import org.limewire.util.BaseTestCase;
public class RUDPMessagesImplTest extends BaseTestCase {
public RUDPMessagesImplTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(RUDPMessagesImplTest.class);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
public void testMessageFormat() throws Exception {
// 3, 5, 8, 3
byte[] ackData = Base32.decode("AMIAABIABAAAGAAAAAAAAAAAABAQCAAAAAAAA");
// data for dataData
byte[] bufferData = Base32.decode("VNMMPZX6DDIHKZ6UHU34ZYHHVK7TO2FQVRL755B2WS6SSOSQFSALBLJKHCNSJ2WCEKNPGDEGWIBVNQFKZWYKMBW753ERHQXZPJW6N7LAOJA2EIJQZ3CY3OX6XKZ62CXFAYK5G6Y4222UK43TREZYOGNR7RCDHNPH443Q");
// 5, 2, bufferData
byte[] dataData = Base32.decode("AU6AAAVLLDD6N7QY2B2WPVB5G5AQCAC2AAAABTHA46VL6N3IWCWFP7XUHK2L2KJ2KAWIBMFNFI4JWJHKYIRJV4YMQ2ZAGVWAVLG3BJQG37XMSE6C7F5G3ZX5MBZEDIRBGDHMLDN2725LH3IK4UDBLU33DTLLKRLTOOETHBYZWH6EIM5V47TTO");
// 254, 21, 5
byte[] finData = Base32.decode("7ZAAAFIFAAAAAAAAAAAAAAAAABAQCAAAAAAAA");
// 203, 5810, 52
byte[] keepAliveData = Base32.decode("ZMQAAAAWWIADIAAAAAAAAAAAABAQCAAAAAAAA");
// 123, 153
byte[] synData = Base32.decode("TEAAAAD3AAAAAAAAAAAAAAAAABAQCAAAAAAAA");
// protocol version 1, 123, 153, role undefined
byte[] synData1 = Base32.decode("TEAAAAD3AAAQAAAAAAAAAAAAABAQCAAAAAAAA");
// protocol version 1, 123, 153, role requestor
byte[] synData2 = Base32.decode("TEAAAAD3AAAQCAAAAAAAAAAAABAQCAAAAAAAA");
// protocol version 1, 123, 153, role acceptor
byte[] synData3 = Base32.decode("TEAAAAD3AAAQEAAAAAAAAAAAABAQCAAAAAAAA");
RUDPMessageFactory factory = new DefaultMessageFactory();
checkMessage(factory.createAckMessage((byte)3, 5, 8, 3),
factory.createMessage(ByteBuffer.wrap(ackData)),
ackData);
checkMessage(factory.createDataMessage((byte)5, 2, ByteBuffer.wrap(bufferData)),
factory.createMessage(ByteBuffer.wrap(dataData)),
dataData);
checkMessage(factory.createFinMessage((byte)254, 21, (byte)5),
factory.createMessage(ByteBuffer.wrap(finData)),
finData);
checkMessage(factory.createKeepAliveMessage((byte)203, 5810, 52),
factory.createMessage(ByteBuffer.wrap(keepAliveData)),
keepAliveData);
checkMessage(new SynMessageImplProtocolVersion0((byte)123, (byte)153),
new Version0MessageFactory().createMessage(ByteBuffer.wrap(synData)),
synData);
checkMessage(factory.createSynMessage((byte)123, (byte)153, Role.UNDEFINED),
factory.createMessage(ByteBuffer.wrap(synData1)),
synData1);
checkMessage(factory.createSynMessage((byte)123, (byte)153, Role.REQUESTOR),
factory.createMessage(ByteBuffer.wrap(synData2)),
synData2);
checkMessage(factory.createSynMessage((byte)123, (byte)153, Role.ACCEPTOR),
factory.createMessage(ByteBuffer.wrap(synData3)),
synData3);
}
private void checkMessage(RUDPMessage a, RUDPMessage b, byte[] data) throws Exception {
assertEquals(b.getClass(), a.getClass());
ByteArrayOutputStream out = new ByteArrayOutputStream();
a.write(out);
byte[] ba = out.toByteArray();
out.reset();
b.write(out);
byte[] bb = out.toByteArray();
assertEquals(bb.length, ba.length);
assertEquals(data, bb);
assertEquals(data, ba);
assertEquals(bb, ba);
}
}