package org.limewire.core.impl.library; import java.io.File; import java.sql.Date; import java.util.Collections; import junit.framework.TestCase; import org.jmock.Expectations; import org.jmock.Mockery; import org.jmock.lib.legacy.ClassImposteriser; import org.limewire.core.api.Category; import org.limewire.core.api.FilePropertyKey; import org.limewire.friend.api.FileMetaData; import com.limegroup.gnutella.URN; import com.limegroup.gnutella.library.CreationTimeCache; import com.limegroup.gnutella.library.FileDesc; import com.limegroup.gnutella.library.IncompleteFileDesc; import com.limegroup.gnutella.library.LocalFileDetailsFactory; import com.limegroup.gnutella.xml.LimeXMLDocument; import com.limegroup.gnutella.xml.LimeXMLNames; public class CoreLocalFileItemTest extends TestCase { private Mockery context; private CoreLocalFileItem coreLocalFileItem; private FileDesc fileDesc; private LocalFileDetailsFactory detailsFactory; private CreationTimeCache creationTimeCache; private LimeXMLDocument document; private File file; @Override protected void setUp() throws Exception { context = new Mockery() { { setImposteriser(ClassImposteriser.INSTANCE); } }; fileDesc = context.mock(FileDesc.class); detailsFactory = context.mock(LocalFileDetailsFactory.class); creationTimeCache = context.mock(CreationTimeCache.class); document = context.mock(LimeXMLDocument.class); file = new File("test.txt"); context.checking(new Expectations() {{ allowing(fileDesc).getFile(); will(returnValue(file)); }}); coreLocalFileItem = new CoreLocalFileItem(fileDesc, detailsFactory, creationTimeCache); } public void testGetCreationTime() { final long creationTime = 123; context.checking(new Expectations() { { one(fileDesc).getSHA1Urn(); will(returnValue(URN.INVALID)); one(creationTimeCache).getCreationTimeAsLong(URN.INVALID); will(returnValue(creationTime)); } }); assertEquals(creationTime, coreLocalFileItem.getCreationTime()); context.assertIsSatisfied(); } public void testGetFile() { assertEquals(file, coreLocalFileItem.getFile()); context.assertIsSatisfied(); } public void testGetLastModifiedTime() { final long lastModified = 3; context.checking(new Expectations() { { one(fileDesc).lastModified(); will(returnValue(lastModified)); } }); assertEquals(lastModified, coreLocalFileItem.getLastModifiedTime()); context.assertIsSatisfied(); } public void testGetName() { context.checking(new Expectations() { { one(fileDesc).getFileName(); will(returnValue("test.txt")); } }); assertEquals("test", coreLocalFileItem.getName()); context.assertIsSatisfied(); } public void testGetSize() { final long size = 1234; context.checking(new Expectations() { { one(fileDesc).getFileSize(); will(returnValue(size)); } }); assertEquals(size, coreLocalFileItem.getSize()); context.assertIsSatisfied(); } public void testGetNumHits() { final int numHits = 1234; context.checking(new Expectations() { { one(fileDesc).getHitCount(); will(returnValue(numHits)); } }); assertEquals(numHits, coreLocalFileItem.getNumHits()); context.assertIsSatisfied(); } public void testGetNumUploads() { final int numUploads = 1234; context.checking(new Expectations() { { one(fileDesc).getCompletedUploads(); will(returnValue(numUploads)); } }); assertEquals(numUploads, coreLocalFileItem.getNumUploads()); context.assertIsSatisfied(); } public void testGetNumUploadAttempts() { final int numUploads = 1234; context.checking(new Expectations() { { one(fileDesc).getAttemptedUploads(); will(returnValue(numUploads)); } }); assertEquals(numUploads, coreLocalFileItem.getNumUploadAttempts()); context.assertIsSatisfied(); } public void testGetCategory() { assertEquals(Category.DOCUMENT, coreLocalFileItem.getCategory()); context.assertIsSatisfied(); } public void testGetProperty() throws Exception { final String author = "Hello World"; final String title = "Rock"; final String comments = "woah!"; final URN urn1 = URN.createSHA1Urn("urn:sha1:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); context.checking(new Expectations() {{ allowing(fileDesc).getXMLDocument(); will(returnValue(document)); exactly(2).of(document).getValue(LimeXMLNames.DOCUMENT_AUTHOR); will(returnValue(author.toString())); exactly(2).of(document).getValue(LimeXMLNames.DOCUMENT_TITLE); will(returnValue(title.toString())); exactly(2).of(document).getValue(LimeXMLNames.DOCUMENT_TOPIC); will(returnValue(comments.toString())); exactly(2).of(fileDesc).getFileName(); will(returnValue(file.getName())); exactly(2).of(fileDesc).getFileSize(); will(returnValue(1234L)); exactly(2).of(fileDesc).getSHA1Urn(); will(returnValue(urn1)); exactly(2).of(creationTimeCache).getCreationTimeAsLong(urn1); will(returnValue(5678L)); }}); assertEquals(author, coreLocalFileItem.getProperty(FilePropertyKey.AUTHOR)); assertEquals(title, coreLocalFileItem.getProperty(FilePropertyKey.TITLE)); assertEquals(comments, coreLocalFileItem.getProperty(FilePropertyKey.DESCRIPTION)); assertEquals(author, coreLocalFileItem.getPropertyString(FilePropertyKey.AUTHOR)); assertEquals(title, coreLocalFileItem.getPropertyString(FilePropertyKey.TITLE)); assertEquals(comments, coreLocalFileItem.getPropertyString(FilePropertyKey.DESCRIPTION)); } public void testToMetadata() throws Exception { final String urn1String = "urn:sha1:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; final URN urn1 = URN.createSHA1Urn(urn1String); final long fileSize = 1234L; final long creationTime = 5678L; final int fileIndex = 5; context.checking(new Expectations() { { allowing(fileDesc).getIndex(); will(returnValue(fileIndex)); allowing(fileDesc).getFileName(); will(returnValue(file.getName())); allowing(fileDesc).getFileSize(); will(returnValue(fileSize)); allowing(fileDesc).getSHA1Urn(); will(returnValue(urn1)); allowing(creationTimeCache).getCreationTimeAsLong(urn1); will(returnValue(creationTime)); allowing(fileDesc).getUrns(); will(returnValue(Collections.singleton(urn1))); } }); FileMetaData fileMetaData = coreLocalFileItem.toMetadata(); assertEquals(fileSize, fileMetaData.getSize()); assertEquals(fileIndex, fileMetaData.getIndex()); assertEquals(new Date(creationTime), fileMetaData.getCreateTime()); assertEquals(1, fileMetaData.getUrns().size()); assertEquals(urn1String, fileMetaData.getUrns().iterator().next()); context.assertIsSatisfied(); } public void testGetFileName() { context.checking(new Expectations() { { one(fileDesc).getFileName(); will(returnValue(file.getName())); } }); assertEquals(file.getName(), coreLocalFileItem.getFileName()); context.assertIsSatisfied(); } public void testIsShareable() throws Exception { final URN urn = URN.createSHA1Urn("urn:sha1:GLIQY64M7FSXBSQEZY37FIM5QQSA2OUJ"); context.checking(new Expectations() {{ one(fileDesc).isStoreFile(); will(returnValue(true)); one(fileDesc).getSHA1Urn(); will(returnValue(urn)); }}); assertFalse(coreLocalFileItem.isShareable()); context.assertIsSatisfied(); context.checking(new Expectations() {{ one(fileDesc).isStoreFile(); will(returnValue(false)); one(fileDesc).getSHA1Urn(); will(returnValue(urn)); }}); assertTrue(coreLocalFileItem.isShareable()); context.assertIsSatisfied(); } public void testIncompleteIsSharable() throws Exception { final URN urn = URN.createSHA1Urn("urn:sha1:GLIQY64M7FSXBSQEZY37FIM5QQSA2OUJ"); final IncompleteFileDesc incompleteFileDesc = context.mock(IncompleteFileDesc.class); context.checking(new Expectations() {{ one(incompleteFileDesc).getFile(); will(returnValue(file)); }}); coreLocalFileItem = new CoreLocalFileItem(incompleteFileDesc, detailsFactory, creationTimeCache); context.assertIsSatisfied(); context.checking(new Expectations() {{ one(incompleteFileDesc).isStoreFile(); will(returnValue(false)); one(incompleteFileDesc).getSHA1Urn(); will(returnValue(urn)); }}); assertFalse(coreLocalFileItem.isShareable()); context.assertIsSatisfied(); } public void testGetUrn() throws Exception { final String urn1String = "urn:sha1:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; final URN urn1 = URN.createSHA1Urn(urn1String); context.checking(new Expectations() { { allowing(fileDesc).getSHA1Urn(); will(returnValue(urn1)); } }); assertEquals(urn1, coreLocalFileItem.getUrn()); context.assertIsSatisfied(); } public void testIsIncomplete() { assertFalse(coreLocalFileItem.isIncomplete()); final IncompleteFileDesc incompleteFileDesc = context.mock(IncompleteFileDesc.class); context.checking(new Expectations() { { one(incompleteFileDesc).getXMLDocument(); will(returnValue(document)); allowing(incompleteFileDesc).getFile(); will(returnValue(file)); } }); coreLocalFileItem = new CoreLocalFileItem(incompleteFileDesc, detailsFactory, creationTimeCache); assertTrue(coreLocalFileItem.isIncomplete()); } public void testGetFileDesc() { assertEquals(fileDesc, coreLocalFileItem.getFileDesc()); } }