blob: 42c16c8c3b2a1c6002fa5f2217c0b1cbdf9b59fe [file] [log] [blame]
//
// ========================================================================
// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
//
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
//
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
//
package org.eclipse.jetty.spdy.server;
import java.net.InetSocketAddress;
import java.util.concurrent.Executor;
import org.eclipse.jetty.server.ConnectionFactory;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.spdy.api.SPDY;
import org.eclipse.jetty.spdy.api.Session;
import org.eclipse.jetty.spdy.api.SessionFrameListener;
import org.eclipse.jetty.spdy.api.server.ServerSessionFrameListener;
import org.eclipse.jetty.spdy.client.SPDYClient;
import org.eclipse.jetty.util.ssl.SslContextFactory;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.junit.After;
import org.junit.Rule;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
public abstract class AbstractTest
{
@Rule
public final TestWatcher testName = new TestWatcher()
{
@Override
public void starting(Description description)
{
super.starting(description);
System.err.printf("Running %s.%s()%n",
description.getClassName(),
description.getMethodName());
}
};
protected final short version = SPDY.V2;
protected Server server;
protected SPDYClient.Factory clientFactory;
protected ServerConnector connector;
protected InetSocketAddress startServer(ServerSessionFrameListener listener) throws Exception
{
return startServer(version, listener);
}
protected InetSocketAddress startServer(short version, ServerSessionFrameListener listener) throws Exception
{
if (server == null)
server = newServer();
if (connector == null)
connector = newSPDYServerConnector(server, listener);
if (listener == null)
listener = connector.getConnectionFactory(SPDYServerConnectionFactory.class).getServerSessionFrameListener();
ConnectionFactory spdy = new SPDYServerConnectionFactory(version, listener);
connector.addConnectionFactory(spdy);
connector.setPort(0);
server.addConnector(connector);
if (connector.getConnectionFactory(NPNServerConnectionFactory.class)!=null)
connector.getConnectionFactory(NPNServerConnectionFactory.class).setDefaultProtocol(spdy.getProtocol());
else
connector.setDefaultProtocol(spdy.getProtocol());
server.start();
return new InetSocketAddress("localhost", connector.getLocalPort());
}
protected Server newServer()
{
QueuedThreadPool pool = new QueuedThreadPool();
pool.setName(pool.getName()+"-server");
return new Server(pool);
}
protected ServerConnector newSPDYServerConnector(Server server, ServerSessionFrameListener listener)
{
return new SPDYServerConnector(server, listener);
}
protected Session startClient(InetSocketAddress socketAddress, SessionFrameListener listener) throws Exception
{
return startClient(version, socketAddress, listener);
}
protected Session startClient(short version, InetSocketAddress socketAddress, SessionFrameListener listener) throws Exception
{
if (clientFactory == null)
{
QueuedThreadPool threadPool = new QueuedThreadPool();
threadPool.setName(threadPool.getName() + "-client");
clientFactory = newSPDYClientFactory(threadPool);
}
clientFactory.start();
return clientFactory.newSPDYClient(version).connect(socketAddress, listener);
}
protected SPDYClient.Factory newSPDYClientFactory(Executor threadPool)
{
return new SPDYClient.Factory(threadPool);
}
protected SslContextFactory newSslContextFactory()
{
SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStorePath("src/test/resources/keystore.jks");
sslContextFactory.setKeyStorePassword("storepwd");
sslContextFactory.setTrustStorePath("src/test/resources/truststore.jks");
sslContextFactory.setTrustStorePassword("storepwd");
sslContextFactory.setProtocol("TLSv1");
sslContextFactory.setIncludeProtocols("TLSv1");
return sslContextFactory;
}
@After
public void destroy() throws Exception
{
if (clientFactory != null)
{
clientFactory.stop();
}
if (server != null)
{
server.stop();
server.join();
}
}
}