/* * Copyright (c) 2007-2009, 2011, 2012, 2015 Eike Stepper (Berlin, Germany) and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Eike Stepper - initial API and implementation * Teerawat Chaiyakijpichet (No Magic Asia Ltd.) - SSL */ package org.eclipse.net4j.tests; import org.eclipse.net4j.Net4jUtil; import org.eclipse.net4j.acceptor.IAcceptor; import org.eclipse.net4j.connector.IConnector; import org.eclipse.net4j.jvm.JVMUtil; import org.eclipse.net4j.tcp.TCPUtil; import org.eclipse.net4j.tcp.ssl.SSLUtil; import org.eclipse.net4j.util.container.ContainerUtil; import org.eclipse.net4j.util.container.IManagedContainer; import org.eclipse.net4j.util.lifecycle.LifecycleUtil; import org.eclipse.net4j.util.tests.AbstractOMTest; /** * @author Eike Stepper * @author Teerawat Chaiyakijpichet (No Magic Asia Ltd.) */ public abstract class AbstractTransportTest extends AbstractOMTest { protected static final String HOST = "localhost"; //$NON-NLS-1$ protected IManagedContainer container; // SSL, the server and client need separate container in order to operate handshake. protected IManagedContainer separateContainer; private IAcceptor acceptor; private IConnector connector; protected AbstractTransportTest() { } @Override protected void doSetUp() throws Exception { super.doSetUp(); // create container for JVM or TCP only. container = createContainer(); LifecycleUtil.activate(container); if (!useJVMTransport() && useSSLTransport()) { // the SSL need separate container between client and server separateContainer = createContainer(); LifecycleUtil.activate(separateContainer); } } @Override protected void doTearDown() throws Exception { try { sleep(20); LifecycleUtil.deactivate(container); } finally { connector = null; acceptor = null; container = null; if (!useJVMTransport() && useSSLTransport()) { separateContainer = null; } super.doTearDown(); } } protected boolean useJVMTransport() { return false; } protected boolean useSSLTransport() { return false; } protected IManagedContainer createContainer() { IManagedContainer container = ContainerUtil.createContainer(); Net4jUtil.prepareContainer(container); if (useJVMTransport()) { JVMUtil.prepareContainer(container); } else { if (useSSLTransport()) { SSLUtil.prepareContainer(container); } else { TCPUtil.prepareContainer(container); } } return container; } protected IAcceptor getAcceptor() { if (acceptor == null) { if (useJVMTransport()) { acceptor = JVMUtil.getAcceptor(container, "default"); //$NON-NLS-1$ } else { if (useSSLTransport()) { acceptor = SSLUtil.getAcceptor(container, null); } else { acceptor = TCPUtil.getAcceptor(container, null); } } } return acceptor; } protected IConnector getConnector() { if (connector == null) { if (useJVMTransport()) { connector = JVMUtil.getConnector(container, "default"); //$NON-NLS-1$ } else { if (useSSLTransport()) { // cannot use same container with the acceptor. connector = SSLUtil.getConnector(separateContainer, HOST); } else { connector = TCPUtil.getConnector(container, HOST); } } } return connector; } protected void startTransport() throws Exception { if (container != null) { IAcceptor acceptor = getAcceptor(); LifecycleUtil.activate(acceptor); IConnector connector = getConnector(); LifecycleUtil.activate(connector); } } protected void stopTransport() throws Exception { connector.close(); connector = null; acceptor.close(); acceptor = null; } protected void restartContainer() throws Exception { msg("RESTARTING CONTAINER"); //$NON-NLS-1$ stopTransport(); LifecycleUtil.deactivate(container); container = createContainer(); LifecycleUtil.activate(container); if (!useJVMTransport() && useSSLTransport()) { LifecycleUtil.deactivate(separateContainer); separateContainer = createContainer(); LifecycleUtil.activate(separateContainer); } startTransport(); msg("RESTARTING CONTAINER - FINISHED"); //$NON-NLS-1$ } }