package com.limegroup.gnutella.downloader; import junit.framework.Test; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.limegroup.gnutella.ActivityCallback; import com.limegroup.gnutella.ErrorService; import com.limegroup.gnutella.FileManager; import com.limegroup.gnutella.MessageRouter; import com.limegroup.gnutella.RouterService; import com.limegroup.gnutella.SaveLocationException; import com.limegroup.gnutella.browser.MagnetOptions; import com.limegroup.gnutella.settings.ConnectionSettings; import com.limegroup.gnutella.stubs.ActivityCallbackStub; import com.limegroup.gnutella.stubs.ConnectionManagerStub; import com.limegroup.gnutella.stubs.DownloadManagerStub; import com.limegroup.gnutella.stubs.FileManagerStub; import com.limegroup.gnutella.stubs.MessageRouterStub; import com.limegroup.gnutella.util.BaseTestCase; import com.limegroup.gnutella.util.PrivilegedAccessor; /** * Tests the magnet downloader class. * * TODO: lots more tests to add here!!! */ public class MagnetDownloaderTest extends BaseTestCase { private static final Log LOG = LogFactory.getLog(MagnetDownloaderTest.class); final static int PORT=6666; private DownloadManagerStub manager; private FileManager fileman; private ActivityCallback callback; private MessageRouter router; /** * 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); } public static void globalSetUp() throws Exception{ ConnectionManagerStub cmStub = new ConnectionManagerStub() { public boolean isConnected() { return true; } }; PrivilegedAccessor.setValue(RouterService.class,"manager",cmStub); assertTrue(RouterService.isConnected()); } public void setUp() throws Exception { ConnectionSettings.EVER_ACCEPTED_INCOMING.setValue(true); ConnectionSettings.LOCAL_IS_PRIVATE.setValue(false); manager = new DownloadManagerStub(); fileman = new FileManagerStub(); callback = new ActivityCallbackStub(); router = new MessageRouterStub(); manager.initialize(callback, router, fileman); PrivilegedAccessor.setValue(RouterService.class,"callback",callback); PrivilegedAccessor.setValue(RouterService.class,"router",router); } 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 { manager.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 { manager.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 { manager.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()); manager.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()); manager.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()); manager.download(opts[0], true, null, null); // downloadable: has kt and hash opts = MagnetOptions.parseMagnet("magnet:?kt=test&xt=urn:sha1:MRCIRZV5ZO56CWMNHFV4FRGNPWPPDVKT"); assertEquals("Wrong number of parsed magnets", 1, opts.length); assertTrue("Should be valid", opts[0].isDownloadable()); manager.download(opts[0], true, null, null); // downloadable: has dn and hash opts = MagnetOptions.parseMagnet("magnet:?dn=test&xt=urn:sha1:TRCIRZV5ZO56CWMNHFV4FRGNPWPPDVKT"); assertEquals("Wrong number of parsed magnets", 1, opts.length); assertTrue("Should be valid", opts[0].isDownloadable()); manager.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()); manager.download(opts[0], true, null, null); } }