package com.limegroup.gnutella.downloader; import junit.framework.Test; import org.jmock.Mockery; import org.limewire.gnutella.tests.LimeTestCase; import org.limewire.gnutella.tests.LimeTestUtils; import org.limewire.io.LocalSocketAddressProvider; import org.limewire.io.LocalSocketAddressProviderStub; import com.google.inject.AbstractModule; import com.google.inject.Injector; import com.google.inject.name.Names; import com.limegroup.gnutella.ConnectionManager; import com.limegroup.gnutella.DownloadManager; import com.limegroup.gnutella.MessageRouter; import com.limegroup.gnutella.browser.MagnetOptions; import com.limegroup.gnutella.dht.db.PushEndpointService; import com.limegroup.gnutella.library.LibraryStubModule; import com.limegroup.gnutella.stubs.ConnectionManagerStub; import com.limegroup.gnutella.stubs.MessageRouterStub; /** * Tests the magnet downloader class. * * TODO: lots more tests to add here!!! */ public class MagnetDownloaderTest extends LimeTestCase { //private static final Log LOG = LogFactory.getLog(MagnetDownloaderTest.class); private DownloadManager downloadManager; private Mockery context; private PushEndpointService pushEndpointService; /** * Creates a new test instance. * * @param name the test name */ public MagnetDownloaderTest(String name) { super(name); } public static void main(java.lang.String[] args) { junit.textui.TestRunner.run(suite()); } public static Test suite() { return buildTestSuite(MagnetDownloaderTest.class); } @Override public void setUp() throws Exception { final LocalSocketAddressProviderStub localSocketAddressProviderStub = new LocalSocketAddressProviderStub(); localSocketAddressProviderStub.setLocalAddressPrivate(false); context = new Mockery(); pushEndpointService = context.mock(PushEndpointService.class); Injector injector = LimeTestUtils.createInjectorNonEagerly(new AbstractModule() { @Override protected void configure() { bind(MessageRouter.class).to(MessageRouterStub.class); bind(ConnectionManager.class).to(ConnectionManagerStub.class); bind(LocalSocketAddressProvider.class).toInstance(localSocketAddressProviderStub); bind(PushEndpointService.class).annotatedWith(Names.named("pushEndpointManager")).toInstance(pushEndpointService); } }, new LibraryStubModule()); ConnectionManagerStub connectionManager = (ConnectionManagerStub)injector.getInstance(ConnectionManager.class); connectionManager.setConnected(true); downloadManager = injector.getInstance(DownloadManager.class); downloadManager.start(); } public void testInvalidMagnetDownloads() throws Exception { // is invalid because we don't have a url MagnetOptions[] opts = MagnetOptions.parseMagnet("magnet:?xt=urn:sha1:WRCIRZV5ZO56CWMNHFV4FRGNPWPPDVKT"); assertEquals("Wrong number of parsed magnets", 1, opts.length); assertFalse("Should not be downloadable", opts[0].isDownloadable()); try { downloadManager.download(opts[0], false, null, null); fail("No illegal argument exception thrown"); } catch (IllegalArgumentException iae) { } // invalid: has empty kt opts = MagnetOptions.parseMagnet("magnet:?kt=&xt=urn:sha1:WRCIRZV5ZO56CWMNHFV4FRGNPWPPDVKT"); assertEquals("Wrong number of parsed magnets", 1, opts.length); assertFalse("Should not be downloadable", opts[0].isDownloadable()); try { downloadManager.download(opts[0], false, null, null); fail("No illegal argument exception thrown"); } catch (IllegalArgumentException iae) { } // invalid: has only a display name opts = MagnetOptions.parseMagnet("magnet:?dn=me"); assertEquals("Wrong number of parsed magnets", 1, opts.length); assertFalse("Should not be downloadable", opts[0].isDownloadable()); try { downloadManager.download(opts[0], false, null, null); fail("No illegal argument exception thrown"); } catch (IllegalArgumentException iae) { } } public void testValidMagnetDownloads() throws Exception { // valid: has a url and a sha1 MagnetOptions[] opts = MagnetOptions.parseMagnet("magnet:?xs=http://magnet2.limewire.com:6346/uri-res/N2R?urn:sha1:WRCIRZV5ZO56CWMNHFV4FRGNPWPPDVKT"); assertEquals("Wrong number of parsed magnets", 1, opts.length); assertTrue("Should be valid", opts[0].isDownloadable()); downloadManager.download(opts[0], true, null, null); // valid: has a url and keyword topic opts = MagnetOptions.parseMagnet("magnet:?kt=test&xs=http://magnet2.limewire.com:6346"); assertEquals("Wrong number of parsed magnets", 1, opts.length); assertTrue("Should be valid", opts[0].isDownloadable()); downloadManager.download(opts[0], true, null, null); // valid: has everything opts = MagnetOptions.parseMagnet("magnet:?xt=urn:sha1:KRCIRZV5ZO56CWMNHFV4FRGNPWPPDVKT&dn=-weed-Soul%20Coughing-Rolling.wma&xs=http://magnet2.limewire.com:6346/uri-res/N2R?urn:sha1:WRCIRZV5ZO56CWMNHFV4FRGNPWPPDVKT"); assertEquals("Wrong number of parsed magnets", 1, opts.length); assertTrue("Should be invalid", opts[0].isDownloadable()); downloadManager.download(opts[0], true, null, null); // downloadable: has kt and hash opts = MagnetOptions.parseMagnet("magnet:?kt=test2&xt=urn:sha1:MRCIRZV5ZO56CWMNHFV4FRGNPWPPDVKT"); assertEquals("Wrong number of parsed magnets", 1, opts.length); assertTrue("Should be valid", opts[0].isDownloadable()); downloadManager.download(opts[0], true, null, null); // downloadable: has dn and hash opts = MagnetOptions.parseMagnet("magnet:?dn=test3&xt=urn:sha1:TRCIRZV5ZO56CWMNHFV4FRGNPWPPDVKT"); assertEquals("Wrong number of parsed magnets", 1, opts.length); assertTrue("Should be valid", opts[0].isDownloadable()); downloadManager.download(opts[0], true, null, null); // downloadable hash only magnet opts = MagnetOptions.parseMagnet("magnet:?xt=http://magnet2.limewire.com:6346/uri-res/N2R?urn:sha1:YRCIRZV5ZO56CWMNHFV4FRGNPWPPDVKT"); assertEquals("Wrong number of parsed magnets", 1, opts.length); assertTrue("Should be valid", opts[0].isDownloadable()); assertTrue("Should be hash only", opts[0].isHashOnly()); downloadManager.download(opts[0], true, null, null); } }