/*
* Copyright (c) 2011-2014 The original author or authors
* ------------------------------------------------------
* 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 io.vertx.test.core;
import io.vertx.core.Context;
import io.vertx.core.Handler;
import io.vertx.core.http.HttpClient;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerOptions;
import io.vertx.core.net.ProxyType;
import java.util.concurrent.CountDownLatch;
/**
* @author <a href="http://tfox.org">Tim Fox</a>
* @author <a href="mailto:nscavell@redhat.com">Nick Scavelli</a>
*/
public class HttpTestBase extends VertxTestBase {
public static final String DEFAULT_HTTP_HOST = "localhost";
public static final int DEFAULT_HTTP_PORT = 8080;
public static final String DEFAULT_HTTPS_HOST = "localhost";
public static final int DEFAULT_HTTPS_PORT = 4043;
public static final String DEFAULT_HTTPS_HOST_AND_PORT = "localhost:4043";
public static final String DEFAULT_TEST_URI = "some-uri";
protected HttpServer server;
protected HttpClient client;
protected TestProxyBase proxy;
public void setUp() throws Exception {
super.setUp();
server = vertx.createHttpServer(new HttpServerOptions().setPort(DEFAULT_HTTP_PORT).setHost(DEFAULT_HTTP_HOST));
}
protected void tearDown() throws Exception {
if (client != null) {
try {
client.close();
} catch (IllegalStateException ignore) {
// Client was already closed by the test
}
}
if (server != null) {
CountDownLatch latch = new CountDownLatch(1);
server.close((asyncResult) -> {
assertTrue(asyncResult.succeeded());
latch.countDown();
});
awaitLatch(latch);
}
if (proxy != null) {
proxy.stop();
}
super.tearDown();
}
@SuppressWarnings("unchecked")
protected <E> Handler<E> noOpHandler() {
return noOp;
}
private static final Handler noOp = e -> {
};
protected void startServer() throws Exception {
startServer(vertx.getOrCreateContext());
}
protected void startServer(HttpServer server) throws Exception {
startServer(vertx.getOrCreateContext(), server);
}
protected void startServer(Context context) throws Exception {
startServer(context, server);
}
protected void startServer(Context context, HttpServer server) throws Exception {
CountDownLatch latch = new CountDownLatch(1);
context.runOnContext(v -> {
server.listen(onSuccess(s -> latch.countDown()));
});
awaitLatch(latch);
}
protected void startProxy(String username, ProxyType proxyType) throws InterruptedException {
CountDownLatch latch = new CountDownLatch(1);
if (proxyType == ProxyType.HTTP) {
proxy = new HttpProxy(username);
} else {
proxy = new SocksProxy(username);
}
proxy.start(vertx, v -> latch.countDown());
awaitLatch(latch);
}
}