package com.limegroup.gnutella; import java.io.InterruptedIOException; import junit.framework.Test; import com.google.inject.Injector; import com.google.inject.Stage; import com.limegroup.gnutella.messages.Message; import com.limegroup.gnutella.messages.QueryRequest; import com.limegroup.gnutella.messages.QueryRequestFactory; import com.limegroup.gnutella.routing.PatchTableMessage; import com.limegroup.gnutella.routing.QueryRouteTable; import com.limegroup.gnutella.routing.ResetTableMessage; /** * 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 { private QueryRequestFactory queryRequestFactory; 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()); } @Override public int getNumberOfPeers() { return 1; } @Override protected void setUp() throws Exception { Injector injector = LimeTestUtils.createInjector(Stage.PRODUCTION); super.setUp(injector); queryRequestFactory = injector.getInstance(QueryRequestFactory.class); } // 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(); assertEquals(0.0,qrt.getPercentFull()); 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 = queryRequestFactory.createQuery("berkeley"); QueryRequest query2 = queryRequestFactory.createQuery("susheel"); assertTrue("qrt did not contain: " + query, qrt.contains(query)); assertTrue("qrt did not contain: " + query2, qrt.contains(query2)); } }