package com.limegroup.gnutella.connection; import java.net.InetAddress; import java.util.List; import junit.framework.Test; import org.limewire.core.settings.ConnectionSettings; import org.limewire.core.settings.FilterSettings; import org.limewire.core.settings.NetworkSettings; import org.limewire.core.settings.UltrapeerSettings; import org.limewire.gnutella.tests.LimeTestCase; import org.limewire.gnutella.tests.LimeTestUtils; import org.limewire.net.SocketsManager.ConnectType; import com.google.inject.Injector; import com.limegroup.gnutella.ConnectionManager; import com.limegroup.gnutella.LifecycleManager; import com.limegroup.gnutella.StubGnetConnectObserver; import com.limegroup.gnutella.handshaking.HeadersFactory; import com.limegroup.gnutella.messages.PingReplyFactory; import com.limegroup.gnutella.util.EmptyResponder; public class TLSConnectionTest extends LimeTestCase { private static int PORT = 9999; private Injector injector; private Injector injector2; private ConnectionManager connectionManager; private RoutedConnectionFactory routedConnectionFactory; private HeadersFactory headersFactory; public TLSConnectionTest(String name) { super(name); } public static Test suite() { return buildTestSuite(TLSConnectionTest.class); } public static void main(String argv[]) { junit.textui.TestRunner.run(suite()); } private static void setSettings() throws Exception { String localIP = InetAddress.getLocalHost().getHostAddress(); FilterSettings.BLACK_LISTED_IP_ADDRESSES.set(new String[] {"*.*.*.*"}); FilterSettings.WHITE_LISTED_IP_ADDRESSES.set(new String[] {"127.*.*.*", "192.168.*.*", "10.254.*.*", localIP}); NetworkSettings.PORT.setValue(PORT); ConnectionSettings.CONNECT_ON_STARTUP.setValue(false); UltrapeerSettings.EVER_ULTRAPEER_CAPABLE.setValue(true); UltrapeerSettings.DISABLE_ULTRAPEER_MODE.setValue(false); UltrapeerSettings.FORCE_ULTRAPEER_MODE.setValue(true); UltrapeerSettings.MAX_LEAVES.setValue(33); ConnectionSettings.NUM_CONNECTIONS.setValue(33); ConnectionSettings.LOCAL_IS_PRIVATE.setValue(false); ConnectionSettings.WATCHDOG_ACTIVE.setValue(false); UltrapeerSettings.NEED_MIN_CONNECT_TIME.setValue(false); } @Override public void setUp() throws Exception { injector = LimeTestUtils.createInjector(); PORT++; // TODO: Remove hack to override port setSettings(); assertEquals("unexpected port", PORT, NetworkSettings.PORT.getValue()); injector.getInstance(LifecycleManager.class).start(); connectionManager = injector.getInstance(ConnectionManager.class); connectionManager.connect(); injector2 = LimeTestUtils.createInjectorNonEagerly(); routedConnectionFactory = injector2.getInstance(RoutedConnectionFactory.class); headersFactory = injector2.getInstance(HeadersFactory.class); } public void testTLSConnectionNonBlockingConnect() throws Exception { // Connect to this LW from another LW instance! GnutellaConnection c = (GnutellaConnection)routedConnectionFactory.createRoutedConnection("localhost", PORT, ConnectType.TLS); assertTrue(c.isTLSCapable()); assertEquals(0, c.getConnectionBandwidthStatistics().getBytesReceived()); assertEquals(0, c.getConnectionBandwidthStatistics().getBytesSent()); assertEquals(0, c.getConnectionBandwidthStatistics().getUncompressedBytesReceived()); assertEquals(0, c.getConnectionBandwidthStatistics().getUncompressedBytesSent()); assertEquals(0.0f, c.getConnectionBandwidthStatistics().getSentLostFromSSL()); assertEquals(0.0f, c.getConnectionBandwidthStatistics().getReadLostFromSSL()); assertEquals(0, connectionManager.getNumConnections()); StubGnetConnectObserver connector = new StubGnetConnectObserver(); c.initialize(headersFactory.createLeafHeaders("localhost"), new EmptyResponder(), 1000, connector); connector.waitForResponse(1000); assertTrue(connector.toString(), connector.isConnect()); assertGreaterThan(0, c.getConnectionBandwidthStatistics().getSentLostFromSSL()); assertGreaterThan(0, c.getConnectionBandwidthStatistics().getReadLostFromSSL()); // Send a few messages c.startMessaging(); c.send(injector.getInstance(PingReplyFactory.class).create(new byte[16], (byte)1)); // Sleep a little bit to let handshaking finish & messages exchange. Thread.sleep(1000); List<RoutedConnection> l = connectionManager.getConnections(); assertEquals(1, l.size()); RoutedConnection mc = l.get(0); assertTrue(mc.isTLSCapable()); assertGreaterThan(0, mc.getConnectionBandwidthStatistics().getSentLostFromSSL()); assertGreaterThan(0, mc.getConnectionBandwidthStatistics().getReadLostFromSSL()); assertGreaterThan(0, mc.getConnectionMessageStatistics().getNumMessagesReceived()); assertGreaterThan(0, mc.getConnectionMessageStatistics().getNumMessagesSent()); assertGreaterThan(0, c.getConnectionMessageStatistics().getNumMessagesReceived()); assertGreaterThan(0, c.getConnectionMessageStatistics().getNumMessagesSent()); } }