package com.limegroup.gnutella.connection;
import junit.framework.Test;
import com.limegroup.gnutella.Response;
import com.limegroup.gnutella.messages.*;
import com.limegroup.gnutella.routing.PatchTableMessage;
import com.limegroup.gnutella.routing.ResetTableMessage;
import com.limegroup.gnutella.util.BaseTestCase;
/**
* Tests that the basic queue is just that -- basic.
*/
public class BasicQueueTest extends BaseTestCase {
private BasicQueue QUEUE = new BasicQueue();
private static final byte[] IP = new byte[] { 1, 1, 1, 1 };
public BasicQueueTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(BasicQueueTest.class);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
// test buffer doesn't get re-ordered.
public void testBuffer() throws Exception {
Message m = null;
QUEUE.add(q("first"));
QUEUE.add(q("second"));
QUEUE.add(g(7000));
QUEUE.add(q("third"));
QUEUE.add(p(4));
QUEUE.add(p(3));
QUEUE.add(q("fourth"));
QUEUE.add(s(6340));
QUEUE.add(s(6341));
QUEUE.add(r(6342));
QUEUE.add(t());
QUEUE.add(c(1));
QUEUE.add(q("fifth"));
QUEUE.add(c(2));
m = QUEUE.removeNext();
assertInstanceof(QueryRequest.class, m);
assertEquals("first", ((QueryRequest)m).getQuery());
m = QUEUE.removeNext();
assertInstanceof(QueryRequest.class, m);
assertEquals("second", ((QueryRequest)m).getQuery());
m = QUEUE.removeNext();
assertInstanceof(PingReply.class, m);
assertEquals(7000, ((PingReply)m).getPort());
m = QUEUE.removeNext();
assertInstanceof(QueryRequest.class, m);
assertEquals("third", ((QueryRequest)m).getQuery());
m = QUEUE.removeNext();
assertInstanceof(PingRequest.class, m);
assertEquals(4, m.getTTL());
m = QUEUE.removeNext();
assertInstanceof(PingRequest.class, m);
assertEquals(3, m.getTTL());
m = QUEUE.removeNext();
assertInstanceof(QueryRequest.class, m);
assertEquals("fourth", ((QueryRequest)m).getQuery());
m = QUEUE.removeNext();
assertInstanceof(PushRequest.class, m);
assertEquals(6340, ((PushRequest)m).getPort());
m = QUEUE.removeNext();
assertInstanceof(PushRequest.class, m);
assertEquals(6341, ((PushRequest)m).getPort());
m = QUEUE.removeNext();
assertInstanceof(QueryReply.class, m);
assertEquals(6342, ((QueryReply)m).getPort());
m = QUEUE.removeNext();
assertInstanceof(ResetTableMessage.class, m);
m = QUEUE.removeNext();
assertInstanceof(PatchTableMessage.class, m);
assertEquals(1, ((PatchTableMessage)m).getSequenceNumber());
m = QUEUE.removeNext();
assertInstanceof(QueryRequest.class, m);
assertEquals("fifth", ((QueryRequest)m).getQuery());
m = QUEUE.removeNext();
assertInstanceof(PatchTableMessage.class, m);
assertEquals(2, ((PatchTableMessage)m).getSequenceNumber());
assertNull(QUEUE.removeNext());
}
private QueryRequest q(String query) {
return QueryRequest.createQuery(query, (byte)5);
}
private PingReply g(int port) {
return PingReply.create(new byte[16], (byte)5, port, IP);
}
private PingRequest p(int ttl) {
return new PingRequest((byte)ttl);
}
private PushRequest s(int port) {
return new PushRequest(new byte[16], (byte)5, new byte[16], 0, IP, port);
}
private QueryReply r(int port) {
return new QueryReply(new byte[16], (byte)5, port, IP, 0, new Response[0], new byte[16], false);
}
private ResetTableMessage t() {
return new ResetTableMessage(1024, (byte)2);
}
private PatchTableMessage c(int sequence) {
return new PatchTableMessage((short)sequence, (short)sequence,
PatchTableMessage.COMPRESSOR_NONE,
(byte)8, new byte[10], 5, 9);
}
}