/*
* Copyright 2004 - 2008 Christian Sprajc. All rights reserved.
*
* This file is part of PowerFolder.
*
* PowerFolder is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation.
*
* PowerFolder is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PowerFolder. If not, see <http://www.gnu.org/licenses/>.
*
* $Id: AddLicenseHeader.java 4282 2008-06-16 03:25:09Z tot $
*/
package de.dal33t.powerfolder.test.folder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import de.dal33t.powerfolder.Member;
import de.dal33t.powerfolder.disk.SyncProfile;
import de.dal33t.powerfolder.light.FolderInfo;
import de.dal33t.powerfolder.message.FileList;
import de.dal33t.powerfolder.message.FolderFilesChanged;
import de.dal33t.powerfolder.message.FolderRelatedMessage;
import de.dal33t.powerfolder.message.Message;
import de.dal33t.powerfolder.message.MessageListener;
import de.dal33t.powerfolder.util.test.Condition;
import de.dal33t.powerfolder.util.test.TestHelper;
import de.dal33t.powerfolder.util.test.TwoControllerTestCase;
/**
* Tests the correct automatic sending of the filelist.
*
* @author <a href="mailto:totmacher@powerfolder.com">Christian Sprajc</a>
* @version $Revision: 1.5 $
*/
public class SendFileListTest extends TwoControllerTestCase {
private MyMessageListener lisasListener;
@Override
protected void setUp() throws Exception {
super.setUp();
connectBartAndLisa();
makeFriends();
lisasListener = new MyMessageListener();
getContollerLisa().getNodeManager().addMessageListenerToAllNodes(
lisasListener);
}
public void testAfterFolderJoin() {
joinTestFolder(SyncProfile.HOST_FILES);
TestHelper.waitForCondition(20, new Condition() {
public boolean reached() {
return lisasListener.messages.size() == 2;
}
});
assertEquals("Received: " + lisasListener.messages, 2,
lisasListener.messages.size());
assertTrue(lisasListener.messages.get(0) instanceof FileList);
assertTrue(lisasListener.messages.get(1) instanceof FileList);
FileList list = (FileList) lisasListener.messages.get(0);
assertEquals(0, list.nFollowingDeltas);
assertEquals(0, list.files.length);
list = (FileList) lisasListener.messages.get(1);
assertEquals(0, list.nFollowingDeltas);
// Members file
assertEquals("Files? " + Arrays.asList(list.files), 1,
list.files.length);
}
public void testSendAfterScan() {
joinTestFolder(SyncProfile.HOST_FILES);
TestHelper.waitForCondition(20, new Condition() {
public boolean reached() {
return lisasListener.receivedMessagesFor(getFolderAtBart()
.getInfo());
}
});
lisasListener.ignoreMetaFolder = true;
lisasListener.messages.clear();
// Create scenario
int nFiles = 10;
for (int i = 0; i < nFiles; i++) {
TestHelper.createRandomFile(getFolderAtBart().getLocalBase());
}
scanFolder(getFolderAtBart());
TestHelper.waitForCondition(5, new Condition() {
public boolean reached() {
return lisasListener.receivedMessagesFor(getFolderAtBart()
.getInfo());
}
});
// Test
assertEquals(1, lisasListener.messages.size());
assertTrue("Wrong message received: " + lisasListener.messages.get(0),
lisasListener.messages.get(0) instanceof FolderFilesChanged);
FolderFilesChanged list = (FolderFilesChanged) lisasListener.messages
.get(0);
assertEquals(nFiles, list.getFiles().length);
assertNull(list.getRemoved());
}
private static final class MyMessageListener implements MessageListener {
public List<FolderRelatedMessage> messages = new ArrayList<FolderRelatedMessage>();
public boolean ignoreMetaFolder;
public void handleMessage(Member source, Message message) {
if (message instanceof FileList
|| message instanceof FolderFilesChanged)
{
FolderRelatedMessage fm = (FolderRelatedMessage) message;
if (ignoreMetaFolder && fm.folder.isMetaFolder()) {
return;
}
messages.add(fm);
}
}
public boolean receivedMessagesFor(FolderInfo foInfo) {
for (FolderRelatedMessage m : messages) {
if (m.folder.equals(foInfo)) {
return true;
}
}
return false;
}
public boolean fireInEventDispatchThread() {
return false;
}
}
}