package com.limegroup.gnutella.downloader.serial.conversion; import java.io.EOFException; import java.io.File; import java.io.FileInputStream; import java.io.ObjectInputStream; import java.io.Serializable; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; import junit.framework.Test; import org.limewire.util.BaseTestCase; import org.limewire.util.GenericsUtils; import org.limewire.util.TestUtils; import org.limewire.util.GenericsUtils.ScanMode; import com.limegroup.gnutella.browser.MagnetOptions; import com.limegroup.gnutella.helpers.UrnHelper; public class DownloadConversionTest extends BaseTestCase { public DownloadConversionTest(String name) { super(name); } public static Test suite() { return buildTestSuite(DownloadConversionTest.class); } public void testConversion() throws Exception { File file = TestUtils .getResourceFile("com/limegroup/gnutella/downloader/serial/conversion/allKindsOfDownloads.dat"); ObjectInputStream in = new DownloadConverterObjectInputStream(new FileInputStream(file)); Object read1 = in.readObject(); Object read2 = in.readObject(); try { Object read3 = in.readObject(); fail("read another object: " + read3); } catch (EOFException expected) { } List<SerialRoot> serialRead = GenericsUtils.scanForList(read1, SerialRoot.class, ScanMode.EXCEPTION); SerialIncompleteFileManager serialIncompleteFileManager = (SerialIncompleteFileManager) read2; { // test ManagedDownloader conversion SerialManagedDownloader smd = (SerialManagedDownloader)serialRead.get(0); SerialRemoteFileDesc srfd = smd.getDefaultRFD(); Set<SerialRemoteFileDesc> setSRFD = smd.getRemoteFileDescs(); SerialIncompleteFileManager sifm = smd.getIncompleteFileManager(); Map<String, Serializable> properties = smd.getProperties(); assertSame(sifm, serialIncompleteFileManager); assertEquals(1, setSRFD.size()); assertSame(srfd, setSRFD.iterator().next()); assertEquals("127.0.0.1", srfd.getHost()); assertEquals(1, srfd.getPort()); assertEquals(1, srfd.getIndex()); assertEquals("fileA.txt", srfd.getFilename()); assertEquals(123, srfd.getSize()); // CHECK GUID!!!! assertEquals(1, srfd.getSpeed()); assertEquals(true, srfd.isChatEnabled()); assertEquals(1, srfd.getQuality()); assertEquals(false, srfd.isBrowseHostEnabled()); assertEquals(null, srfd.getXml()); assertEquals(UrnHelper.URN_SETS[0], srfd.getUrns()); assertEquals(false, srfd.isReplyToMulticast()); assertEquals(true, srfd.isFirewalled()); assertEquals("MNGD", srfd.getVendor()); assertNull(srfd.getPropertiesMap()); Map<?, ?> attributes = (Map)properties.get("attributes"); assertEquals("VALUE", attributes.get("KEY")); assertEquals(123L, properties.get("fileSize")); assertEquals("fileA.txt", properties.get("defaultFileName")); assertEquals(UrnHelper.URNS[0], properties.get("sha1Urn")); } { SerialStoreDownloader ssd = (SerialStoreDownloader)serialRead.get(1); SerialRemoteFileDesc srfd = ssd.getDefaultRFD(); Set<SerialRemoteFileDesc> setSRFD = ssd.getRemoteFileDescs(); SerialIncompleteFileManager sifm = ssd.getIncompleteFileManager(); Map<String, Serializable> properties = ssd.getProperties(); assertSame(sifm, serialIncompleteFileManager); assertEquals(1, setSRFD.size()); assertSame(srfd, setSRFD.iterator().next()); assertEquals("127.0.0.2", srfd.getHost()); assertEquals(2, srfd.getPort()); assertEquals(1, srfd.getIndex()); assertEquals("fileB.txt", srfd.getFilename()); assertEquals(123, srfd.getSize()); // CHECK GUID!!!! assertEquals(1, srfd.getSpeed()); assertEquals(true, srfd.isChatEnabled()); assertEquals(1, srfd.getQuality()); assertEquals(false, srfd.isBrowseHostEnabled()); assertEquals(null, srfd.getXml()); assertEquals(UrnHelper.URN_SETS[0], srfd.getUrns()); assertEquals(false, srfd.isReplyToMulticast()); assertEquals(true, srfd.isFirewalled()); assertEquals("STOR", srfd.getVendor()); assertNull(srfd.getPropertiesMap()); assertEquals(123L, properties.get("fileSize")); assertEquals("fileB.txt", properties.get("defaultFileName")); assertEquals(UrnHelper.URNS[0], properties.get("sha1Urn")); } { // No need to check anything other than existence -- we don't convert these. assertInstanceof(SerialInNetworkDownloader.class, serialRead.get(2)); } { SerialResumeDownloader srd = (SerialResumeDownloader)serialRead.get(3); SerialRemoteFileDesc srfd = srd.getDefaultRFD(); Set<SerialRemoteFileDesc> setSRFD = srd.getRemoteFileDescs(); SerialIncompleteFileManager sifm = srd.getIncompleteFileManager(); assertSame(sifm, serialIncompleteFileManager); assertEquals(0, setSRFD.size()); assertNull(srfd); assertEquals("T-123453-incompleteName", srd.getIncompleteFile().getName()); assertEquals("incompleteName", srd.getName()); assertEquals(123453L, srd.getSize()); } { SerialMagnetDownloader smd = (SerialMagnetDownloader)serialRead.get(4); SerialRemoteFileDesc srfd = smd.getDefaultRFD(); Set<SerialRemoteFileDesc> setSRFD = smd.getRemoteFileDescs(); SerialIncompleteFileManager sifm = smd.getIncompleteFileManager(); Map<String, Serializable> properties = smd.getProperties(); assertSame(sifm, serialIncompleteFileManager); assertEquals(0, setSRFD.size()); assertNull(srfd); assertNull(smd.getTextQuery()); assertNull(smd.getUrn()); assertNull(smd.getFilename()); assertNull(smd.getDefaultUrls()); assertEquals("magnetName", properties.get("defaultFileName")); MagnetOptions mo = (MagnetOptions)properties.get("MAGNET"); assertEquals("magnetName", mo.getDisplayName()); assertEquals(UrnHelper.URNS[1], mo.getSHA1Urn()); assertEquals(Collections.singletonList("http://127.0.0.3:3/uri-res/N2R?" + UrnHelper.URNS[1]), mo.getXS()); } { // No need to do anything other than check these can be deserialized. assertInstanceof(SerialRequeryDownloader.class, serialRead.get(5)); } { SerialBTDownloader sbtd = (SerialBTDownloader)serialRead.get(6); Map<String, Serializable> properties = sbtd.getProperties(); assertEquals("btName", properties.get("defaultFileName")); SerialBTMetaInfo info = (SerialBTMetaInfo)properties.get("metainfo"); assertEquals("http://www.example.com/announce", info.getTrackers()[0].toString()); assertEquals(UrnHelper.URNS[3].getBytes(), info.getInfoHash()); assertEquals(123L, info.getFileSystem().getTotalSize()); assertEquals(1235L, info.getPieceLength()); assertEquals(true, info.isPrivate()); } } }