package org.limewire.core.impl.daap;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.ConnectException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import org.hamcrest.core.IsAnything;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
import org.limewire.core.settings.DaapSettings;
import org.limewire.io.NetworkInstanceUtils;
import org.limewire.io.NetworkUtils;
import org.limewire.util.BaseTestCase;
import com.google.inject.Provider;
import com.limegroup.gnutella.ActivityCallback;
import com.limegroup.gnutella.daap.DaapManager;
import com.limegroup.gnutella.filters.IPFilter;
import com.limegroup.gnutella.library.FileView;
import com.limegroup.gnutella.library.Library;
public class DaapManagerImplTest extends BaseTestCase {
public DaapManagerImplTest(String name) {
super(name);
}
/**
* This is a basic test for the daap server. It starts the server, checks to
* make sure that the server can be connected to, then the server is stopped
* and checked to make sure that no more connections can be made.
*/
@SuppressWarnings("unchecked")
public void testStartingDaapServerConnectingToItAndStopping() throws Exception {
Mockery context = new Mockery();
final Library library = context.mock(Library.class);
final FileView fileView = context.mock(FileView.class);
final ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1);
final IPFilter ipFilter = context.mock(IPFilter.class);
final Provider<IPFilter> ipFilterProvider = context.mock(Provider.class);
final NetworkInstanceUtils networkInstanceUtils = context.mock(NetworkInstanceUtils.class);
final Provider<NetworkInstanceUtils> networkInstanceUtilsProvider = context
.mock(Provider.class);
final ActivityCallback activityCallback = context.mock(ActivityCallback.class);
final Provider<ActivityCallback> activityCallbackProvider = context.mock(Provider.class);
DaapManager daapManager = new DaapManager(executorService, ipFilterProvider,
networkInstanceUtilsProvider, activityCallbackProvider, fileView, library);
DaapManagerImpl daapServer = new DaapManagerImpl(daapManager);
context.checking(new Expectations() {
{
allowing(ipFilterProvider).get();
will(returnValue(ipFilter));
allowing(networkInstanceUtilsProvider).get();
will(returnValue(networkInstanceUtils));
allowing(activityCallbackProvider).get();
will(returnValue(activityCallback));
one(activityCallback).translate(with(new IsAnything<String>()));
will(returnValue("What's New"));
one(activityCallback).translate(with(new IsAnything<String>()));
will(returnValue("Creative Commons"));
one(activityCallback).translate(with(new IsAnything<String>()));
will(returnValue("Video"));
}
});
Socket socket = null;
BufferedWriter writer = null;
try {
daapServer.start();
assertTrue(daapServer.isServerRunning());
int port = DaapSettings.DAAP_PORT.getValue();
InetAddress address = NetworkUtils.getLocalAddress();
socket = new Socket();
socket.connect(new InetSocketAddress(address, port));
assertTrue(socket.isConnected());
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.write("test");
writer.flush();
writer.close();
socket.close();
daapServer.stop();
socket = new Socket();
try {
socket.connect(new InetSocketAddress(address, port));
fail("Should not be able to connect, server should be stopped.");
} catch (ConnectException e) {
// expected
}
assertFalse(daapServer.isServerRunning());
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
}
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
}
}
daapServer.stop();
}
context.assertIsSatisfied();
}
public void testDisconnectionAll() throws Exception {
Mockery context = new Mockery() {
{
setImposteriser(ClassImposteriser.INSTANCE);
}
};
final DaapManager daapManager = context.mock(DaapManager.class);
DaapManagerImpl daapManagerImpl = new DaapManagerImpl(daapManager);
context.checking(new Expectations() {
{
one(daapManager).disconnectAll();
}
});
daapManagerImpl.disconnectAll();
context.assertIsSatisfied();
}
public void testStart() throws Exception {
Mockery context = new Mockery() {
{
setImposteriser(ClassImposteriser.INSTANCE);
}
};
final DaapManager daapManager = context.mock(DaapManager.class);
DaapManagerImpl daapManagerImpl = new DaapManagerImpl(daapManager);
context.checking(new Expectations() {
{
one(daapManager).start();
}
});
daapManagerImpl.start();
context.assertIsSatisfied();
}
public void testStop() throws Exception {
Mockery context = new Mockery() {
{
setImposteriser(ClassImposteriser.INSTANCE);
}
};
final DaapManager daapManager = context.mock(DaapManager.class);
DaapManagerImpl daapManagerImpl = new DaapManagerImpl(daapManager);
context.checking(new Expectations() {
{
one(daapManager).stop();
}
});
daapManagerImpl.stop();
context.assertIsSatisfied();
}
public void testRestart() throws Exception {
Mockery context = new Mockery() {
{
setImposteriser(ClassImposteriser.INSTANCE);
}
};
final DaapManager daapManager = context.mock(DaapManager.class);
DaapManagerImpl daapManagerImpl = new DaapManagerImpl(daapManager);
context.checking(new Expectations() {
{
one(daapManager).restart();
}
});
daapManagerImpl.restart();
context.assertIsSatisfied();
}
public void testUpdateService() throws Exception {
Mockery context = new Mockery() {
{
setImposteriser(ClassImposteriser.INSTANCE);
}
};
final DaapManager daapManager = context.mock(DaapManager.class);
DaapManagerImpl daapManagerImpl = new DaapManagerImpl(daapManager);
context.checking(new Expectations() {
{
one(daapManager).updateService();
}
});
daapManagerImpl.updateService();
context.assertIsSatisfied();
}
}