/*
* Copyright (c) 2011-2013 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.netty.handler.codec.http2.Http2CodecUtil;
import io.vertx.core.http.Http2Settings;
import io.vertx.core.http.impl.HttpUtils;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
import static io.vertx.test.core.TestUtils.assertIllegalArgumentException;
/**
* @author <a href="mailto:julien@julienviet.com">Julien Viet</a>
*/
public class Http2SettingsTest extends HttpTestBase {
long[] min = { 0, 0, 0, 0, 0x4000, 0 };
long[] max = { 0xFFFFFFFFL, 1, 0xFFFFFFFFL, Integer.MAX_VALUE, 0xFFFFFF, Integer.MAX_VALUE };
@Test
public void testSettingsMin() {
for (int i = 1;i <= 6;i++) {
try {
new Http2Settings().set(i, min[i - 1] - 1);
fail();
} catch (IllegalArgumentException ignore) {
}
}
Http2Settings settings = new Http2Settings();
for (int i = 1;i <= 6;i++) {
settings.set(i, min[i - 1]);
}
HttpUtils.fromVertxSettings(settings);
}
@Test
public void testSettinsMax() {
for (int i = 1;i <= 6;i++) {
try {
new Http2Settings().set(i, max[i - 1] + 1);
fail("Was expecting setting " + (i - 1) + " update to throw IllegalArgumentException");
} catch (IllegalArgumentException ignore) {
}
}
Http2Settings settings = new Http2Settings();
for (int i = 1;i <= 6;i++) {
settings.set(i, max[i - 1]);
}
HttpUtils.fromVertxSettings(settings);
}
@Test
public void toNettySettings() {
Http2Settings settings = new Http2Settings();
for (int i = 7;i <= 0xFFFF;i += 1) {
settings.set(0xFFFF, TestUtils.randomPositiveLong());
}
io.netty.handler.codec.http2.Http2Settings conv = HttpUtils.fromVertxSettings(settings);
for (int i = 1;i <= 0xFFFF;i += 1) {
assertEquals(settings.get(i), conv.get((char)i));
}
settings = HttpUtils.toVertxSettings(conv);
for (int i = 1;i <= 0xFFFF;i += 1) {
assertEquals(settings.get(i), conv.get((char)i));
}
}
@Test
public void testSettings() {
Http2Settings settings = new Http2Settings();
assertEquals(true, settings.isPushEnabled());
assertEquals(Http2Settings.DEFAULT_MAX_HEADER_LIST_SIZE, settings.getMaxHeaderListSize());
assertEquals(Http2Settings.DEFAULT_MAX_CONCURRENT_STREAMS, settings.getMaxConcurrentStreams());
assertEquals(Http2Settings.DEFAULT_INITIAL_WINDOW_SIZE, settings.getInitialWindowSize());
assertEquals(Http2Settings.DEFAULT_MAX_FRAME_SIZE, settings.getMaxFrameSize());
assertEquals(null, settings.getExtraSettings());
Http2Settings update = TestUtils.randomHttp2Settings();
assertFalse(settings.equals(update));
assertNotSame(settings.hashCode(), settings.hashCode());
assertSame(settings, settings.setHeaderTableSize(update.getHeaderTableSize()));
assertEquals(settings.getHeaderTableSize(), update.getHeaderTableSize());
assertSame(settings, settings.setPushEnabled(update.isPushEnabled()));
assertEquals(settings.isPushEnabled(), update.isPushEnabled());
assertSame(settings, settings.setMaxHeaderListSize(update.getMaxHeaderListSize()));
assertEquals(settings.getMaxHeaderListSize(), update.getMaxHeaderListSize());
assertSame(settings, settings.setMaxConcurrentStreams(update.getMaxConcurrentStreams()));
assertEquals(settings.getMaxConcurrentStreams(), update.getMaxConcurrentStreams());
assertSame(settings, settings.setInitialWindowSize(update.getInitialWindowSize()));
assertEquals(settings.getInitialWindowSize(), update.getInitialWindowSize());
assertSame(settings, settings.setMaxFrameSize(update.getMaxFrameSize()));
assertEquals(settings.getMaxFrameSize(), update.getMaxFrameSize());
assertSame(settings, settings.setExtraSettings(update.getExtraSettings()));
Map<Integer, Long> extraSettings = new HashMap<>(update.getExtraSettings());
assertEquals(update.getExtraSettings(), extraSettings);
extraSettings.clear();
assertEquals(update.getExtraSettings(), settings.getExtraSettings());
assertTrue(settings.equals(update));
assertEquals(settings.hashCode(), settings.hashCode());
settings = new Http2Settings(update);
assertEquals(settings.getHeaderTableSize(), update.getHeaderTableSize());
assertEquals(settings.isPushEnabled(), update.isPushEnabled());
assertEquals(settings.getMaxHeaderListSize(), update.getMaxHeaderListSize());
assertEquals(settings.getMaxConcurrentStreams(), update.getMaxConcurrentStreams());
assertEquals(settings.getInitialWindowSize(), update.getInitialWindowSize());
assertEquals(settings.getMaxFrameSize(), update.getMaxFrameSize());
assertEquals(update.getExtraSettings(), settings.getExtraSettings());
}
}