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));
}
}