package com.limegroup.gnutella.connection;
import junit.framework.Test;
import com.limegroup.gnutella.ConnectionManager;
import com.limegroup.gnutella.RouterService;
import com.limegroup.gnutella.stubs.ActivityCallbackStub;
import com.limegroup.gnutella.util.BaseTestCase;
import com.limegroup.gnutella.util.PrivilegedAccessor;
/**
* Tests the class that checks whether or not the user has a live internet
* connection.
*/
public class ConnectionCheckerTest extends BaseTestCase {
private final static TestManager MANAGER = new TestManager();
private static final Object LOCK = new Object();
/**
* Creates a new test instance.
*/
public ConnectionCheckerTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(ConnectionCheckerTest.class);
}
public static void globalSetUp() throws Exception {
new RouterService(new ActivityCallbackStub());
PrivilegedAccessor.setValue(RouterService.class, "manager", MANAGER);
}
/**
* Tests to make sure that the method for checking for a live internet
* connection is working properly.
*
* @throws Exception in any unexpected error occurs
*/
public void testForLiveConnection() throws Exception {
// We should quickly connect to one of our hosts.
ConnectionChecker checker = ConnectionChecker.checkForLiveConnection();
Thread.sleep(10000);
assertTrue("should have successfully connected",
checker.hasConnected());
// Now, we "pretend" we're disconnected by just trying to connect to
// hosts that don't exist, which is effectively the same as not
// being connected.
String[] dummyHosts = {
"http://www.dummyhostsjoafds.com",
"http://www.dummyhostsjoafdser.com",
"http://www.dumfadfostsjoafds.com",
"http://www.dummyhostsjafds.com",
"http://www.dummyhostjoafdser.com",
"http://www.dumfatsjoafds.com",
};
PrivilegedAccessor.setValue(ConnectionChecker.class,
"STANDARD_HOSTS", dummyHosts);
checker = ConnectionChecker.checkForLiveConnection();
synchronized(LOCK) {
LOCK.wait(10000);
}
//Thread.sleep(2000);
assertTrue("should not have successfully connected",
!checker.hasConnected());
assertTrue("should have received callback",
MANAGER.hasReceivedCallback());
}
/**
* Helper class that receives the callback notifying us when there's no
* available internet connection.
*/
private static class TestManager extends ConnectionManager {
private boolean _receivedCallback;
public TestManager() {
super();
}
public void noInternetConnection() {
_receivedCallback = true;
synchronized(LOCK) {
LOCK.notify();
}
}
/**
* Determines whether or not we have received the callback notifying us
* that there's no live internet connection.
*
* @return <tt>true</tt> if we've received the callback, otherwise
* <tt>false</tt>
*/
public boolean hasReceivedCallback() {
return _receivedCallback;
}
}
}