package com.limegroup.gnutella.downloader; import junit.framework.Test; import com.limegroup.gnutella.RouterService; import com.limegroup.gnutella.UDPService; import com.limegroup.gnutella.settings.DownloadSettings; import com.limegroup.gnutella.util.BaseTestCase; import com.limegroup.gnutella.util.PrivilegedAccessor; /** * tests the selection of source ranker that is appropriate to the system. */ public class SourceRankerSelectionTest extends BaseTestCase { public SourceRankerSelectionTest(String name) { super(name); } public static Test suite() { return buildTestSuite(SourceRankerSelectionTest.class); } public void testSelectRanker() throws Exception { // if we cannot do solicited udp, we get the legacy ranker RouterService.acceptedIncomingConnection(); PrivilegedAccessor.setValue(UDPService.instance(),"_acceptedSolicitedIncoming",Boolean.FALSE); assertFalse(RouterService.canReceiveSolicited()); SourceRanker ranker = SourceRanker.getAppropriateRanker(); assertTrue(ranker instanceof LegacyRanker); // if we can, use the PingRanker PrivilegedAccessor.setValue(UDPService.instance(),"_acceptedSolicitedIncoming",Boolean.TRUE); ranker = SourceRanker.getAppropriateRanker(); assertTrue(ranker instanceof PingRanker); // if headpings are disabled, use legacy DownloadSettings.USE_HEADPINGS.setValue(false); assertTrue(SourceRanker.getAppropriateRanker() instanceof LegacyRanker); // and vice versa DownloadSettings.USE_HEADPINGS.setValue(true); assertTrue(SourceRanker.getAppropriateRanker() instanceof PingRanker); } public void testUpdateRanker() throws Exception { // LegacyRanker -> PingRanker RouterService.acceptedIncomingConnection(); PrivilegedAccessor.setValue(UDPService.instance(),"_acceptedSolicitedIncoming",Boolean.FALSE); assertFalse(RouterService.canReceiveSolicited()); SourceRanker ranker = SourceRanker.getAppropriateRanker(); assertTrue(ranker instanceof LegacyRanker); // now we accept some solicited PrivilegedAccessor.setValue(UDPService.instance(),"_acceptedSolicitedIncoming",Boolean.TRUE); ranker = SourceRanker.getAppropriateRanker(ranker); assertTrue(ranker instanceof PingRanker); // now we try again SourceRanker ranker2 = SourceRanker.getAppropriateRanker(ranker); // it should be the same object assertTrue(ranker == ranker2); } }