/*
* Copyright (c) 2011-2016 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.test.core.*;
import io.netty.util.CharsetUtil;
import io.vertx.core.Handler;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.http.HttpClient;
import io.vertx.core.http.HttpClientOptions;
import io.vertx.core.http.HttpHeaders;
import io.vertx.core.http.HttpMethod;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerOptions;
import io.vertx.core.http.HttpServerRequest;
import io.vertx.core.http.HttpVersion;
import static io.vertx.test.core.HttpTestBase.DEFAULT_HTTP_HOST;
import static io.vertx.test.core.HttpTestBase.DEFAULT_HTTP_PORT;
import io.vertx.test.core.tls.Trust;
import org.junit.Test;
/**
* @author <a href="mailto:nmaurer@redhat.com">Norman Maurer</a>
* @author <a href="mailto:nscavell@redhat.com">Nick Scavelli</a>
*/
public class Http2CompressionTest extends Http2TestBase {
private static final String COMPRESS_TEST_STRING = "/*\n"
+ " * Copyright (c) 2011-2016 The original author or authors\n"
+ " * ------------------------------------------------------\n"
+ " * All rights reserved. This program and the accompanying materials\n"
+ " * are made available under the terms of the Eclipse Public License v1.0\n"
+ " * and Apache License v2.0 which accompanies this distribution.\n"
+ " *\n"
+ " * The Eclipse Public License is available at\n"
+ " * http://www.eclipse.org/legal/epl-v10.html\n"
+ " *\n"
+ " * The Apache License v2.0 is available at\n"
+ " * http://www.opensource.org/licenses/apache2.0.php\n"
+ " *\n"
+ " * You may elect to redistribute this code under either of these licenses.\n"
+ " */";
HttpServer serverWithMinCompressionLevel, serverWithMaxCompressionLevel = null;
HttpClient clientraw = null;
public void setUp() throws Exception {
super.setUp();
client = vertx.createHttpClient(createHttp2ClientOptions().setTryUseCompression(true));
clientraw = vertx.createHttpClient(createHttp2ClientOptions().setTryUseCompression(false));
// server = vertx.createHttpServer();
serverWithMinCompressionLevel = vertx.createHttpServer(
createHttp2ServerOptions(DEFAULT_HTTP_PORT - 1, DEFAULT_HTTP_HOST)
.setCompressionSupported(true)
.setCompressionLevel(1));
serverWithMaxCompressionLevel = vertx.createHttpServer(
createHttp2ServerOptions(DEFAULT_HTTP_PORT + 1, DEFAULT_HTTP_HOST)
.setCompressionSupported(true)
.setCompressionLevel(9));
}
@Test
public void testDefaultRequestHeaders() {
Handler<HttpServerRequest> requestHandler = req -> {
// assertEquals(2, req.headers().size());
assertEquals(HttpVersion.HTTP_2, req.version());
// assertEquals("localhost:" + DEFAULT_HTTP_PORT, req.headers().get("host"));
assertNotNull(req.headers().get("Accept-Encoding"));
req.response().end(Buffer.buffer(COMPRESS_TEST_STRING).toString(CharsetUtil.UTF_8));
};
serverWithMinCompressionLevel.requestHandler(requestHandler);
serverWithMaxCompressionLevel.requestHandler(requestHandler);
serverWithMinCompressionLevel.listen(onSuccess(serverReady -> {
testMinCompression();
testRawMinCompression();
}));
serverWithMaxCompressionLevel.listen(onSuccess(serverReady -> {
testMaxCompression();
testRawMaxCompression();
}));
await();
}
public static boolean minCompressionTestPassed = false;
public void testMinCompression() {
client.request(HttpMethod.GET, DEFAULT_HTTP_PORT - 1, DEFAULT_HTTP_HOST, "some-uri",
resp -> {
resp.bodyHandler(responseBuffer -> {
String responseBody = responseBuffer.toString(CharsetUtil.UTF_8);
assertEquals(COMPRESS_TEST_STRING, responseBody);
minCompressionTestPassed = true;
terminateTestWhenAllPassed();
});
}).end();
}
public static boolean maxCompressionTestPassed = false;
public void testMaxCompression() {
client.request(HttpMethod.GET, DEFAULT_HTTP_PORT + 1, DEFAULT_HTTP_HOST, "some-uri",
resp -> {
resp.bodyHandler(responseBuffer -> {
String responseBody = responseBuffer.toString(CharsetUtil.UTF_8);
assertEquals(COMPRESS_TEST_STRING, responseBody);
maxCompressionTestPassed = true;
terminateTestWhenAllPassed();
});
}).end();
}
public static Integer rawMaxCompressionResponseByteCount = null;
public void testRawMaxCompression() {
clientraw.request(HttpMethod.GET, DEFAULT_HTTP_PORT + 1, DEFAULT_HTTP_HOST, "some-uri",
resp -> {
resp.bodyHandler(responseBuffer -> {
String responseCompressedBody = responseBuffer.toString(CharsetUtil.UTF_8);
Integer responseByteCount = responseCompressedBody.getBytes(CharsetUtil.UTF_8).length;
//1606
// assertEquals((Integer)1606,responseByteCount);
// assertEquals(LARGE_HTML_STRING, responseBody);
rawMaxCompressionResponseByteCount = responseByteCount;
terminateTestWhenAllPassed();
});
}).putHeader(HttpHeaders.ACCEPT_ENCODING, HttpHeaders.DEFLATE_GZIP).end();
}
public static Integer rawMinCompressionResponseByteCount = null;
public void testRawMinCompression() {
clientraw.request(HttpMethod.GET, DEFAULT_HTTP_PORT - 1, DEFAULT_HTTP_HOST, "some-uri",
resp -> {
resp.bodyHandler(responseBuffer -> {
String responseCompressedBody = responseBuffer.toString(CharsetUtil.UTF_8);
Integer responseByteCount = responseCompressedBody.getBytes(CharsetUtil.UTF_8).length;
// assertEquals((Integer)1642,responseByteCount);
rawMinCompressionResponseByteCount = responseByteCount;
terminateTestWhenAllPassed();
});
}).putHeader(HttpHeaders.ACCEPT_ENCODING, HttpHeaders.DEFLATE_GZIP).end();
}
public void terminateTestWhenAllPassed() {
if (maxCompressionTestPassed && minCompressionTestPassed
&& rawMinCompressionResponseByteCount != null && rawMaxCompressionResponseByteCount != null) {
assertTrue("Checking compression byte size difference", rawMaxCompressionResponseByteCount > 0
&& rawMinCompressionResponseByteCount > rawMaxCompressionResponseByteCount);
testComplete();
}
}
}