package com.limegroup.gnutella;
import java.io.File;
import java.io.InterruptedIOException;
import java.util.Iterator;
import junit.framework.Test;
import com.limegroup.gnutella.messages.Message;
import com.limegroup.gnutella.messages.QueryRequest;
import com.limegroup.gnutella.routing.PatchTableMessage;
import com.limegroup.gnutella.routing.QueryRouteTable;
import com.limegroup.gnutella.routing.ResetTableMessage;
import com.limegroup.gnutella.stubs.ActivityCallbackStub;
import com.limegroup.gnutella.util.BitSet;
import com.limegroup.gnutella.util.CommonUtils;
import com.limegroup.gnutella.util.PrivilegedAccessor;
/**
* Checks whether (multi)leaves avoid forwarding messages to ultrapeers, do
* redirects properly, etc. The test includes a leaf attached to 3
* Ultrapeers.
*/
public class LeafQRPTest extends ClientSideTestCase {
public LeafQRPTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(LeafQRPTest.class);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
public static Integer numUPs() {
return new Integer(1);
}
public static ActivityCallback getActivityCallback() {
return new ActivityCallbackStub();
}
///////////////////////// Actual Tests ////////////////////////////
// the only test - make sure the QRP table sent by the leaf is send and is
// valid.
public void testQRPExchange() throws Exception {
// set up the connection
QueryRouteTable qrt = new QueryRouteTable();
BitSet retSet = (BitSet) PrivilegedAccessor.getValue(qrt,"bitTable");
assertEquals(0, retSet.cardinality());
Thread.sleep(15000);
try {
Message m = null;
while (true) {
m = testUP[0].receive(1000);
if (m instanceof ResetTableMessage)
qrt.reset((ResetTableMessage) m);
else if (m instanceof PatchTableMessage)
qrt.patch((PatchTableMessage) m);
}
}
catch (InterruptedIOException bad) {
// we are waiting for all messages to be processed
}
// send a query that should hit in the qrt
QueryRequest query = QueryRequest.createQuery("berkeley");
QueryRequest query2 = QueryRequest.createQuery("susheel");
assertTrue("qrt did not contain: " + query, qrt.contains(query));
assertTrue("qrt did not contain: " + query2, qrt.contains(query2));
}
}