package com.limegroup.gnutella.routing;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.Arrays;
import junit.framework.Test;
import com.limegroup.gnutella.messages.Message;
import com.limegroup.gnutella.util.BaseTestCase;
/**
* Unit tests for PatchTableMessage
*/
public class PatchTableMessageTest extends BaseTestCase {
public PatchTableMessageTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(PatchTableMessageTest.class);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
/** Unit test */
public void testLegacy() throws Exception {
//From scratch. Check encode.
PatchTableMessage m=new PatchTableMessage(
(short)3, (short)255, PatchTableMessage.COMPRESSOR_NONE, (byte)2,
new byte[] {(byte)0, (byte)0xAB, (byte)0xCD, (byte)0},
1, 3);
assertEquals(ResetTableMessage.PATCH_VARIANT, m.getVariant());
assertEquals((byte)1, m.getTTL());
assertEquals(255, m.getSequenceSize());
assertEquals(3, m.getSequenceNumber());
assertEquals(PatchTableMessage.COMPRESSOR_NONE, m.getCompressor());
assertEquals(2, m.getEntryBits());
assertTrue(Arrays.equals(m.getData(),
new byte[] {(byte)0xAB, (byte)0xCD }));
ByteArrayOutputStream out=new ByteArrayOutputStream();
m.write(out);
out.flush();
assertEquals(ResetTableMessage.PATCH_VARIANT, m.getVariant());
assertEquals((byte)1, m.getTTL());
assertEquals(255, m.getSequenceSize());
assertEquals(3, m.getSequenceNumber());
assertEquals(PatchTableMessage.COMPRESSOR_NONE, m.getCompressor());
assertEquals(2, m.getEntryBits());
assertTrue(Arrays.equals(m.getData(),
new byte[] {(byte)0xAB, (byte)0xCD }));
//Read from bytes
byte[] message=new byte[23+5+2];
message[16]=Message.F_ROUTE_TABLE_UPDATE; //function code
message[17]=(byte)1; //TTL
message[19]=(byte)7; //payload length
message[23+0]=(byte)RouteTableMessage.PATCH_VARIANT; //patch variant
message[23+1]=(byte)1; //sequence 1...
message[23+2]=(byte)0xFF; //...of 255
message[23+3]=PatchTableMessage.COMPRESSOR_DEFLATE; //comrpessor
message[23+4]=(byte)2; //entry bits
message[23+5]=(byte)0xAB; //data
message[23+6]=(byte)0xCD;
m=read(message);
assertEquals(RouteTableMessage.PATCH_VARIANT, m.getVariant());
assertEquals((byte)1, m.getTTL());
assertEquals(1, m.getSequenceNumber());
assertEquals(255, m.getSequenceSize());
assertEquals(PatchTableMessage.COMPRESSOR_DEFLATE, m.getCompressor());
assertEquals(2, m.getEntryBits());
assertEquals(2, m.getData().length);
assertEquals((byte)0xAB, m.getData()[0]);
assertEquals((byte)0xCD, m.getData()[1]);
}
static PatchTableMessage read(byte[] bytes) throws Exception {
InputStream in=new ByteArrayInputStream(bytes);
return (PatchTableMessage)Message.read(in);
}
}