package com.limegroup.gnutella.connection;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import junit.framework.Test;
import org.limewire.io.NetworkInstanceUtils;
import org.limewire.net.ConnectionDispatcher;
import org.limewire.net.SocketsManager;
import org.limewire.util.BaseTestCase;
import com.google.inject.AbstractModule;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Provider;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
import com.limegroup.gnutella.ConnectionManager;
import com.limegroup.gnutella.ConnectionManagerImpl;
import com.limegroup.gnutella.ConnectionServices;
import com.limegroup.gnutella.HostCatcher;
import com.limegroup.gnutella.LimeTestUtils;
import com.limegroup.gnutella.NetworkManager;
import com.limegroup.gnutella.NodeAssigner;
import com.limegroup.gnutella.QueryUnicaster;
import com.limegroup.gnutella.filters.IPFilter;
import com.limegroup.gnutella.messages.PingRequestFactory;
import com.limegroup.gnutella.messages.vendor.CapabilitiesVMFactory;
import com.limegroup.gnutella.simpp.SimppManager;
public class ConnectionCheckerManagerImplTest extends BaseTestCase {
private ConnectionCheckerManagerImpl connectionCheckerManager;
private ConnectionManagerStub connectionManager;
public ConnectionCheckerManagerImplTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(ConnectionCheckerManagerImplTest.class);
}
@Override
protected void setUp() throws Exception {
Injector injector = LimeTestUtils.createInjector(new AbstractModule() {
@Override
protected void configure() {
bind(ConnectionManager.class).to(ConnectionManagerStub.class);
}
});
connectionManager = (ConnectionManagerStub) injector.getInstance(ConnectionManager.class);
connectionCheckerManager = (ConnectionCheckerManagerImpl) injector.getInstance(ConnectionCheckerManager.class);
}
public void testCheckForLiveConnection() throws Exception {
Future<Boolean> result = connectionCheckerManager.checkForLiveConnection();
assertTrue(result.get(12, TimeUnit.SECONDS));
assertFalse(connectionManager.noInternetConnection);
assertTrue(connectionCheckerManager.isConnected());
assertEquals(0, connectionCheckerManager.getNumWorkarounds());
}
@Singleton
private static class ConnectionManagerStub extends ConnectionManagerImpl {
private boolean noInternetConnection;
@Inject
public ConnectionManagerStub(NetworkManager networkManager,
Provider<HostCatcher> hostCatcher,
@Named("global") Provider<ConnectionDispatcher> connectionDispatcher,
@Named("backgroundExecutor") ScheduledExecutorService backgroundExecutor, Provider<SimppManager> simppManager,
CapabilitiesVMFactory capabilitiesVMFactory,
RoutedConnectionFactory managedConnectionFactory,
Provider<QueryUnicaster> queryUnicaster,
SocketsManager socketsManager, ConnectionServices connectionServices,
Provider<NodeAssigner> nodeAssigner,
Provider<IPFilter> ipFilter,
ConnectionCheckerManager connectionCheckerManager,
PingRequestFactory pingRequestFactory,
NetworkInstanceUtils networkInstanceUtils) {
super(networkManager, hostCatcher, connectionDispatcher, backgroundExecutor, simppManager,
capabilitiesVMFactory, managedConnectionFactory, queryUnicaster,
socketsManager, connectionServices, nodeAssigner, ipFilter, connectionCheckerManager,
pingRequestFactory, networkInstanceUtils);
}
@Override
public void noInternetConnection() {
noInternetConnection = true;
}
}
}