package com.limegroup.gnutella.browser;
import java.net.URLEncoder;
import com.limegroup.gnutella.URN;
import com.limegroup.gnutella.util.BaseTestCase;
public class MagnetOptionsTest extends BaseTestCase {
public MagnetOptionsTest(String name) {
super(name);
}
public void testParseValidMagnet() {
MagnetOptions[] opts = MagnetOptions.parseMagnet("magnet:?dn="
+ URLEncoder.encode("compilc.:fileNm?7ßä") + "&kt="
+ URLEncoder.encode("keyword topic string")
+ "&xt=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C&xs=http://127.0.0.1:6346/uri-res/N2R?urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C");
assertEquals("Should have parsed one magnet", 1, opts.length);
opts = MagnetOptions.parseMagnet(opts[0].toString());
assertEquals("Should have parsed one magnet", 1, opts.length);
opts = MagnetOptions.parseMagnet("magnet:?dn=" + URLEncoder.encode("compile me")
+ "&xt=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO59&xs=http://127.0.0.1:6346/uri-res/N2R?urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO59");
assertEquals("Should have parsed one magnet", 1, opts.length);
opts = MagnetOptions.parseMagnet(opts[0].toString());
assertEquals("Should have parsed one magnet", 1, opts.length);
opts = MagnetOptions.parseMagnet("magnet:?xt.1=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C&xt.2=urn:sha1:TXGCZQTH26NL6OUQAJJPFALHG2LTGBC7");
assertEquals("Should have parsed 2 magnets", 2, opts.length);
// compound magnets
opts = MagnetOptions.parseMagnet("magnet:?xt.1=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C&xt.2=urn:sha1:TXGCZQTH26NL6OUQAJJPFALHG2LTGBC7");
assertEquals("Should have parsed 2 magnets", 2, opts.length);
}
public void testParseInvalidMagnet() {
MagnetOptions[] opts = MagnetOptions.parseMagnet("magnet:?");
assertEquals("Wrong number of parsed magnets", 0, opts.length);
}
public void testisDownloadable() {
// invalid magnets
// 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());
// 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());
// 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());
// valid magnets
// valid: has a url and a sha1
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());
// 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());
// valid: has everything
opts = MagnetOptions.parseMagnet("magnet:?xt=urn:sha1:WRCIRZV5ZO56CWMNHFV4FRGNPWPPDVKT&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());
// downloadable: has kt and hash
opts = MagnetOptions.parseMagnet("magnet:?kt=test&xt=urn:sha1:WRCIRZV5ZO56CWMNHFV4FRGNPWPPDVKT");
assertEquals("Wrong number of parsed magnets", 1, opts.length);
assertTrue("Should be valid", opts[0].isDownloadable());
// downloadable: has dn and hash
opts = MagnetOptions.parseMagnet("magnet:?dn=test&xt=urn:sha1:WRCIRZV5ZO56CWMNHFV4FRGNPWPPDVKT");
assertEquals("Wrong number of parsed magnets", 1, opts.length);
assertTrue("Should be valid", opts[0].isDownloadable());
}
public void testIsHashOnly() {
// hash only
MagnetOptions[] opts = MagnetOptions.parseMagnet("magnet:?xt=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());
assertTrue("Should be hash only", opts[0].isHashOnly());
// not hash only
opts = MagnetOptions.parseMagnet("magnet:?xt=urn:sha1:WRCIRZV5ZO56CWMNHFV4FRGNPWPPDVKT&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());
assertFalse("Should not be hash only", opts[0].isHashOnly());
opts = MagnetOptions.parseMagnet("magnet:?kt=test&xs=http://magnet2.limewire.com:6346");
assertEquals("Wrong number of parsed magnets", 1, opts.length);
assertTrue("Should be invalid", opts[0].isDownloadable());
assertFalse("Should not be hash only", opts[0].isHashOnly());
}
public void testGetFileNameForSaving() throws Exception {
MagnetOptions magnet = MagnetOptions.createMagnet(null, "file name", null, null);
assertEquals("file name", magnet.getFileNameForSaving());
magnet = MagnetOptions.createMagnet("keywords", null, null, null);
assertEquals("keywords", magnet.getFileNameForSaving());
magnet = MagnetOptions.createMagnet("keywords", "", null, null);
assertEquals("keywords", magnet.getFileNameForSaving());
URN urn = URN.createSHA1Urn("urn:sha1:GLSTHIPQGSSZTS5FJUPAKPZWUGYQYPFB");
magnet = MagnetOptions.createMagnet(null, null, urn, null);
assertEquals(urn.toString(), magnet.getFileNameForSaving());
magnet = MagnetOptions.createMagnet("", "", urn, null);
assertEquals(urn.toString(), magnet.getFileNameForSaving());
magnet = MagnetOptions.createMagnet(null, null, null, new String[] { "http://www.limewire.com:4444/test.file" });
assertEquals("test.file", magnet.getFileNameForSaving());
magnet = MagnetOptions.createMagnet(null, null, null, new String[] { "http://www.limewire.com:4444/test.file?notpartofthename" });
assertEquals("test.file", magnet.getFileNameForSaving());
magnet = MagnetOptions.createMagnet("", "", null, new String[] { "http://192.168.0.2/test.file" });
assertEquals("test.file", magnet.getFileNameForSaving());
magnet = MagnetOptions.createMagnet(null, null, null, new String[] { "http://host/" });
assertEquals("MAGNET download from host", magnet.getFileNameForSaving());
magnet = MagnetOptions.createMagnet(null, null, null, null);
assertNotNull(magnet.getFileNameForSaving());
}
}