blob: b4d30af90b8722ed6a0345666f71814ad16287ab [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.qpid.protonj2.client;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNotSame;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
import java.util.Arrays;
import org.apache.qpid.protonj2.client.test.ImperativeClientTestCase;
import org.junit.jupiter.api.Test;
/**
* Test for class TransportOptions
*/
public class TransportOptionsTest extends ImperativeClientTestCase {
public static final int TEST_SEND_BUFFER_SIZE = 128 * 1024;
public static final int TEST_RECEIVE_BUFFER_SIZE = TEST_SEND_BUFFER_SIZE;
public static final int TEST_TRAFFIC_CLASS = 1;
public static final boolean TEST_TCP_NO_DELAY = false;
public static final boolean TEST_TCP_KEEP_ALIVE = true;
public static final int TEST_SO_LINGER = Short.MAX_VALUE;
public static final int TEST_SO_TIMEOUT = 10;
public static final int TEST_CONNECT_TIMEOUT = 90000;
public static final int TEST_DEFAULT_TCP_PORT = 5682;
public static final String LOCAL_ADDRESS = "localhost";
public static final int LOCAL_PORT = 30000;
public static final boolean TEST_ALLOW_NATIVE_IO_VALUE = !TransportOptions.DEFAULT_ALLOW_NATIVE_IO;
public static final boolean TEST_TRACE_BYTES_VALUE = !TransportOptions.DEFAULT_TRACE_BYTES;
public static final String TEST_WEBSOCKET_PATH = "/test";
public static final String TEST_WEBSOCKET_HEADER_KEY = "compression";
public static final String TEST_WEBSOCKET_HEADER_VALUE = "gzip";
public static final int TEST_WEBSOCKET_MAX_FRAME_SIZE = TransportOptions.DEFAULT_WEBSOCKET_MAX_FRAME_SIZE + 1024;
@Test
public void testCreate() {
TransportOptions options = new TransportOptions();
assertEquals(TransportOptions.DEFAULT_TCP_NO_DELAY, options.tcpNoDelay());
assertTrue(options.allowNativeIO());
assertFalse(options.useWebSockets());
assertNull(options.webSocketPath());
}
@Test
public void testOptions() {
TransportOptions options = createNonDefaultOptions();
assertEquals(TEST_SEND_BUFFER_SIZE, options.sendBufferSize());
assertEquals(TEST_RECEIVE_BUFFER_SIZE, options.receiveBufferSize());
assertEquals(TEST_TRAFFIC_CLASS, options.trafficClass());
assertEquals(TEST_TCP_NO_DELAY, options.tcpNoDelay());
assertEquals(TEST_TCP_KEEP_ALIVE, options.tcpKeepAlive());
assertEquals(TEST_SO_LINGER, options.soLinger());
assertEquals(TEST_SO_TIMEOUT, options.soTimeout());
assertEquals(TEST_CONNECT_TIMEOUT, options.connectTimeout());
assertEquals(TEST_DEFAULT_TCP_PORT, options.defaultTcpPort());
assertEquals(TEST_ALLOW_NATIVE_IO_VALUE, options.allowNativeIO());
assertEquals(TEST_TRACE_BYTES_VALUE, options.traceBytes());
}
@Test
public void testClone() {
TransportOptions original = createNonDefaultOptions();
TransportOptions options = original.clone();
assertNotSame(original, options);
assertEquals(TEST_SEND_BUFFER_SIZE, options.sendBufferSize());
assertEquals(TEST_RECEIVE_BUFFER_SIZE, options.receiveBufferSize());
assertEquals(TEST_TRAFFIC_CLASS, options.trafficClass());
assertEquals(TEST_TCP_NO_DELAY, options.tcpNoDelay());
assertEquals(TEST_TCP_KEEP_ALIVE, options.tcpKeepAlive());
assertEquals(TEST_SO_LINGER, options.soLinger());
assertEquals(TEST_SO_TIMEOUT, options.soTimeout());
assertEquals(TEST_CONNECT_TIMEOUT, options.connectTimeout());
assertEquals(TEST_DEFAULT_TCP_PORT, options.defaultTcpPort());
assertEquals(TEST_ALLOW_NATIVE_IO_VALUE, options.allowNativeIO());
assertEquals(TEST_TRACE_BYTES_VALUE, options.traceBytes());
assertEquals(LOCAL_ADDRESS,options.localAddress());
assertEquals(LOCAL_PORT,options.localPort());
assertEquals(TEST_WEBSOCKET_PATH, options.webSocketPath());
assertEquals(TEST_WEBSOCKET_HEADER_VALUE, options.webSocketHeaders().get(TEST_WEBSOCKET_HEADER_KEY));
assertEquals(TEST_WEBSOCKET_MAX_FRAME_SIZE, options.webSocketMaxFrameSize());
}
@Test
public void testSendBufferSizeValidation() {
TransportOptions options = createNonDefaultOptions().clone();
try {
options.sendBufferSize(0);
fail("Should have thrown an IllegalArgumentException");
} catch (IllegalArgumentException expected) {
}
try {
options.sendBufferSize(-1);
fail("Should have thrown an IllegalArgumentException");
} catch (IllegalArgumentException expected) {
}
options.sendBufferSize(1);
}
@Test
public void testReceiveBufferSizeValidation() {
TransportOptions options = createNonDefaultOptions().clone();
try {
options.receiveBufferSize(0);
fail("Should have thrown an IllegalArgumentException");
} catch (IllegalArgumentException expected) {
}
try {
options.receiveBufferSize(-1);
fail("Should have thrown an IllegalArgumentException");
} catch (IllegalArgumentException expected) {
}
options.receiveBufferSize(1);
}
@Test
public void testTrafficClassValidation() {
TransportOptions options = createNonDefaultOptions().clone();
try {
options.trafficClass(-1);
fail("Should have thrown an IllegalArgumentException");
} catch (IllegalArgumentException expected) {
}
try {
options.trafficClass(256);
fail("Should have thrown an IllegalArgumentException");
} catch (IllegalArgumentException expected) {
}
options.trafficClass(0);
options.trafficClass(128);
options.trafficClass(255);
}
@Test
public void testNativeIOPreferencesCannotBeNulled() {
TransportOptions options = createNonDefaultOptions();
assertNotNull(options.nativeIOPreference());
assertEquals(TransportOptions.DEFAULT_NATIVEIO_PREFERENCES, Arrays.asList(options.nativeIOPreference()));
options.nativeIOPreference((String) null);
assertNotNull(options.nativeIOPreference());
assertEquals(TransportOptions.DEFAULT_NATIVEIO_PREFERENCES, Arrays.asList(options.nativeIOPreference()));
options.nativeIOPreference("epolling");
assertNotNull(options.nativeIOPreference());
assertArrayEquals(new String[] { "epolling" }, options.nativeIOPreference());
}
@Test
public void testCreateAndConfigure() {
TransportOptions options = createNonDefaultOptions();
assertEquals(TEST_SEND_BUFFER_SIZE, options.sendBufferSize());
assertEquals(TEST_RECEIVE_BUFFER_SIZE, options.receiveBufferSize());
assertEquals(TEST_TRAFFIC_CLASS, options.trafficClass());
assertEquals(TEST_TCP_NO_DELAY, options.tcpNoDelay());
assertEquals(TEST_TCP_KEEP_ALIVE, options.tcpKeepAlive());
assertEquals(TEST_SO_LINGER, options.soLinger());
assertEquals(TEST_SO_TIMEOUT, options.soTimeout());
assertEquals(TEST_CONNECT_TIMEOUT, options.connectTimeout());
}
private TransportOptions createNonDefaultOptions() {
TransportOptions options = new TransportOptions();
options.sendBufferSize(TEST_SEND_BUFFER_SIZE);
options.receiveBufferSize(TEST_RECEIVE_BUFFER_SIZE);
options.trafficClass(TEST_TRAFFIC_CLASS);
options.tcpNoDelay(TEST_TCP_NO_DELAY);
options.tcpKeepAlive(TEST_TCP_KEEP_ALIVE);
options.soLinger(TEST_SO_LINGER);
options.soTimeout(TEST_SO_TIMEOUT);
options.connectTimeout(TEST_CONNECT_TIMEOUT);
options.defaultTcpPort(TEST_DEFAULT_TCP_PORT);
options.allowNativeIO(TEST_ALLOW_NATIVE_IO_VALUE);
options.traceBytes(TEST_TRACE_BYTES_VALUE);
options.localAddress(LOCAL_ADDRESS);
options.localPort(LOCAL_PORT);
options.webSocketPath(TEST_WEBSOCKET_PATH);
options.addWebSocketHeader(TEST_WEBSOCKET_HEADER_KEY, TEST_WEBSOCKET_HEADER_VALUE);
options.webSocketMaxFrameSize(TEST_WEBSOCKET_MAX_FRAME_SIZE);
return options;
}
}