package com.limegroup.gnutella.library; import static com.limegroup.gnutella.library.FileManagerTestUtils.assertAdds; import static com.limegroup.gnutella.library.FileManagerTestUtils.createNewExtensionTestFile; import static com.limegroup.gnutella.library.FileManagerTestUtils.createNewTestFile; import java.io.File; import junit.framework.Test; import org.limewire.core.api.Category; import org.limewire.lifecycle.ServiceRegistry; import com.google.inject.Injector; import com.google.inject.Stage; import com.limegroup.gnutella.LimeTestUtils; import com.limegroup.gnutella.util.LimeTestCase; /** * FriendFileList tests */ //TODO: cleanup and remove sleeps public class FriendFileListTest extends LimeTestCase { private ManagedFileListImpl managedList; private FriendFileListImpl friendList; private Injector injector; private File f1, f2, f3, f4; public FriendFileListTest(String name) { super(name); } public static Test suite() { return buildTestSuite(FriendFileListTest.class); } @Override protected void setUp() throws Exception { injector = LimeTestUtils.createInjector(Stage.PRODUCTION); friendList = (FriendFileListImpl)injector.getInstance(FileManager.class).getOrCreateFriendFileList("test"); managedList = (ManagedFileListImpl)injector.getInstance(FileManager.class).getManagedFileList(); injector.getInstance(ServiceRegistry.class).initialize(); } public void testNoFiles() { assertEquals(0, friendList.size()); assertFalse(friendList.iterator().hasNext()); assertFalse(friendList.pausableIterable().iterator().hasNext()); } /** * Tests adding a single file to a friendList */ public void testAddFile() throws Exception { assertEquals(friendList.size(), 0); f1 = createNewTestFile(1, _scratchDir); assertAdds(friendList, f1); assertTrue(friendList.contains(f1)); assertEquals(f1, friendList.getFileDescForIndex(0).getFile()); assertEquals(friendList.size(), 1); assertTrue(friendList.iterator().hasNext()); assertTrue(friendList.pausableIterable().iterator().hasNext()); } /** * Tests adding a FileDesc to friend list that is already managed */ public void testAddFileDesc() throws Exception { assertEquals(friendList.size(), 0); f1 = createNewTestFile(1, _scratchDir); assertAdds(managedList, f1); FileDesc fd = managedList.getFileDesc(f1); assertTrue(friendList.add(fd)); assertTrue(friendList.contains(fd)); assertEquals(fd, friendList.getFileDesc(f1)); assertEquals(friendList.size(), 1); assertTrue(friendList.iterator().hasNext()); assertTrue(friendList.pausableIterable().iterator().hasNext()); } /** * Tests that an IncompleteFileDesc cannot be added to this FriendList */ public void testAddIncompleteFileDesc() throws Exception { assertEquals(friendList.size(), 0); IncompleteFileDesc ifd = new IncompleteFileDescStub(); assertFalse(friendList.add(ifd)); assertFalse(friendList.contains(ifd)); assertEquals(friendList.size(), 0); assertFalse(friendList.iterator().hasNext()); assertFalse(friendList.pausableIterable().iterator().hasNext()); } /** * Test removing a single file from friendList. */ public void testRemoveFile() throws Exception { f1 = createNewTestFile(1, _scratchDir); assertFalse(friendList.remove(f1)); assertAdds(friendList, f1); assertEquals(f1, friendList.getFileDescForIndex(0).getFile()); assertEquals(1, friendList.size()); assertTrue(friendList.contains(f1)); assertTrue(friendList.remove(f1)); assertNull(friendList.getFileDescForIndex(0)); assertEquals(0, friendList.size()); assertFalse(friendList.contains(f1)); assertFalse(friendList.iterator().hasNext()); assertFalse(friendList.pausableIterable().iterator().hasNext()); } /** * Test removing a FileDesc from a friendList. */ public void testRemoveFileDesc() throws Exception { f1 = createNewTestFile(1, _scratchDir); assertFalse(friendList.remove(f1)); assertAdds(friendList, f1); assertEquals(f1, friendList.getFileDescForIndex(0).getFile()); assertEquals(1, friendList.size()); FileDesc fd = friendList.getFileDesc(f1); assertTrue(friendList.contains(fd)); assertTrue(friendList.remove(fd)); assertNull(friendList.getFileDescForIndex(0)); assertEquals(0, friendList.size()); assertFalse(friendList.contains(fd)); } public void testAddFolder() throws Exception { // assertEquals(friendList.size(), 0); // // f1 = createNewExtensionTestFile(1, "wav", _scratchDir); // f2 = createNewExtensionTestFile(3, "wav", _scratchDir); // // friendList.addFolder(_scratchDir); // List<FileDesc> fdList; // // fdList = assertAddsFolder(managedList, _scratchDir); // Thread.sleep(4000); // assertContainsFiles(fdList, f1, f2); // assertContainsFiles(managedList, f1, f2); // assertAddsFolder(friendList, _scratchDir); // assertEquals(2, friendList.size()); // assertEquals(f1, friendList.getFileDescForIndex(0).getFile()); // assertEquals(f2, friendList.getFileDescForIndex(1).getFile()); // assertTrue(friendList.iterator().hasNext()); // assertTrue(friendList.pausableIterable().iterator().hasNext()); } /** * Tests that smart share categories are mutually * exclusive */ public void testSmartSharingCategories() { assertFalse(friendList.isAddNewAudioAlways()); assertFalse(friendList.isAddNewImageAlways()); assertFalse(friendList.isAddNewVideoAlways()); friendList.setAddNewAudioAlways(true); assertTrue(friendList.isAddNewAudioAlways()); assertFalse(friendList.isAddNewImageAlways()); assertFalse(friendList.isAddNewVideoAlways()); friendList.setAddNewImageAlways(true); assertTrue(friendList.isAddNewAudioAlways()); assertTrue(friendList.isAddNewImageAlways()); assertFalse(friendList.isAddNewVideoAlways()); friendList.setAddNewVideoAlways(true); assertTrue(friendList.isAddNewAudioAlways()); assertTrue(friendList.isAddNewImageAlways()); assertTrue(friendList.isAddNewVideoAlways()); } /** * Tests smart sharing a category */ public void testSmartSharing() throws Exception { assertEquals(friendList.size(), 0); assertFalse(friendList.isAddNewAudioAlways()); f1 = createNewExtensionTestFile(1, "wav", _scratchDir); f2 = createNewExtensionTestFile(3, "txt", _scratchDir); assertAdds(managedList, f1); assertFalse(friendList.contains(f1)); assertEquals(0, friendList.size()); friendList.setAddNewAudioAlways(true); assertTrue(friendList.isAddNewAudioAlways()); Thread.sleep(500); assertEquals(1, friendList.size()); assertTrue(friendList.contains(f1)); assertFalse(friendList.contains(f2)); f3 = createNewExtensionTestFile(5, "wav", _scratchDir); assertAdds(managedList, f3); Thread.sleep(500); assertEquals(2, friendList.size()); assertTrue(friendList.contains(f3)); } /** * Tests stopping smart sharing a category */ public void testStopSmartSharing() throws Exception { friendList.setAddNewAudioAlways(true); assertTrue(friendList.isAddNewAudioAlways()); f1 = createNewExtensionTestFile(1, "wav", _scratchDir); f2 = createNewExtensionTestFile(3, "txt", _scratchDir); assertAdds(friendList, f1); assertAdds(friendList, f2); assertEquals(2, friendList.size()); friendList.setAddNewAudioAlways(false); assertFalse(friendList.isAddNewAudioAlways()); Thread.sleep(500); assertEquals(2, friendList.size()); f3 = createNewExtensionTestFile(5, "wav", _scratchDir); assertAdds(managedList, f3); Thread.sleep(500); assertEquals(2, friendList.size()); assertFalse(friendList.contains(f3)); } /** * Tests sharing a snapshot of a category */ public void testSnapShotSharing() throws Exception { friendList.setAddNewAudioAlways(false); assertFalse(friendList.isAddNewAudioAlways()); f1 = createNewExtensionTestFile(1, "wav", _scratchDir); f2 = createNewExtensionTestFile(3, "txt", _scratchDir); f3 = createNewExtensionTestFile(5, "wav", _scratchDir); assertAdds(managedList, f1); assertAdds(managedList, f2); assertAdds(managedList, f3); assertEquals(0, friendList.size()); friendList.addSnapshotCategory(Category.AUDIO); Thread.sleep(500); assertEquals(2, friendList.size()); assertTrue(friendList.contains(f1)); assertTrue(friendList.contains(f3)); f4 = createNewExtensionTestFile(8, "wav", _scratchDir); assertAdds(managedList, f4); Thread.sleep(500); assertEquals(4, managedList.size()); assertEquals(2, friendList.size()); assertFalse(friendList.contains(f4)); } /** * Tests clearing a shared snapshot */ public void testClearSharing() throws Exception{ friendList.setAddNewAudioAlways(false); assertFalse(friendList.isAddNewAudioAlways()); f1 = createNewExtensionTestFile(1, "wav", _scratchDir); f2 = createNewExtensionTestFile(3, "wav", _scratchDir); assertAdds(friendList, f1); assertAdds(friendList, f2); assertEquals(2, friendList.size()); assertTrue(friendList.contains(f1)); assertTrue(friendList.contains(f2)); friendList.clearCategory(Category.AUDIO); Thread.sleep(500); assertEquals(0, friendList.size()); assertFalse(friendList.contains(f1)); assertFalse(friendList.contains(f2)); } }