/**
* 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.camel.component.disruptor;
import org.apache.camel.ResolveEndpointFailedException;
import org.apache.camel.WaitForTaskToComplete;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;
/**
* @version
*/
public class DisruptorConfigureTest extends CamelTestSupport {
@Test
public void testSizeConfigured() throws Exception {
final DisruptorEndpoint endpoint = resolveMandatoryEndpoint("disruptor:foo?size=2000",
DisruptorEndpoint.class);
assertEquals("size", 2048, endpoint.getBufferSize());
assertEquals("getRemainingCapacity", 2048, endpoint.getRemainingCapacity());
}
@Test
public void testIllegalSizeZeroConfigured() throws Exception {
try {
resolveMandatoryEndpoint("disruptor:foo?size=0", DisruptorEndpoint.class);
fail("Should have thrown exception");
} catch (ResolveEndpointFailedException e) {
assertEquals(
"Failed to resolve endpoint: disruptor://foo?size=0 due to: size found to be 0, must be greater than 0",
e.getMessage());
}
}
@Test
public void testSizeThroughBufferSizeComponentProperty() throws Exception {
final DisruptorComponent disruptor = context.getComponent("disruptor", DisruptorComponent.class);
disruptor.setBufferSize(2000);
assertEquals(2000, disruptor.getBufferSize());
final DisruptorEndpoint endpoint = resolveMandatoryEndpoint("disruptor:foo", DisruptorEndpoint.class);
assertEquals("size", 2048, endpoint.getBufferSize());
assertEquals("getRemainingCapacity", 2048, endpoint.getRemainingCapacity());
}
@Test
public void testMultipleConsumersConfigured() {
final DisruptorEndpoint endpoint = resolveMandatoryEndpoint("disruptor:foo?multipleConsumers=true",
DisruptorEndpoint.class);
assertEquals("multipleConsumers", true, endpoint.isMultipleConsumers());
}
@Test
public void testDefaultMultipleConsumersComponentProperty() throws Exception {
final DisruptorComponent disruptor = context.getComponent("disruptor", DisruptorComponent.class);
disruptor.setDefaultMultipleConsumers(true);
assertEquals(true, disruptor.isDefaultMultipleConsumers());
final DisruptorEndpoint endpoint = resolveMandatoryEndpoint("disruptor:foo", DisruptorEndpoint.class);
assertEquals("multipleConsumers", true, endpoint.isMultipleConsumers());
assertEquals("multipleConsumers", true, endpoint.isMultipleConsumersSupported());
}
@Test
public void testProducerTypeConfigured() {
final DisruptorEndpoint endpoint = resolveMandatoryEndpoint("disruptor:foo?producerType=Single",
DisruptorEndpoint.class);
assertEquals("producerType", DisruptorProducerType.Single, endpoint.getDisruptor().getProducerType());
}
@Test
public void testDefaultProducerTypeComponentProperty() throws Exception {
final DisruptorComponent disruptor = context.getComponent("disruptor", DisruptorComponent.class);
disruptor.setDefaultProducerType(DisruptorProducerType.Single);
assertEquals(DisruptorProducerType.Single, disruptor.getDefaultProducerType());
final DisruptorEndpoint endpoint = resolveMandatoryEndpoint("disruptor:foo", DisruptorEndpoint.class);
assertEquals("producerType", DisruptorProducerType.Single, endpoint.getDisruptor().getProducerType());
}
@Test
public void testWaitStrategyConfigured() {
final DisruptorEndpoint endpoint = resolveMandatoryEndpoint("disruptor:foo?waitStrategy=BusySpin",
DisruptorEndpoint.class);
assertEquals("waitStrategy", DisruptorWaitStrategy.BusySpin,
endpoint.getDisruptor().getWaitStrategy());
}
@Test
public void testDefaultWaitStrategyComponentProperty() throws Exception {
final DisruptorComponent disruptor = context.getComponent("disruptor", DisruptorComponent.class);
disruptor.setDefaultWaitStrategy(DisruptorWaitStrategy.BusySpin);
assertEquals(DisruptorWaitStrategy.BusySpin, disruptor.getDefaultWaitStrategy());
final DisruptorEndpoint endpoint = resolveMandatoryEndpoint("disruptor:foo", DisruptorEndpoint.class);
assertEquals("waitStrategy", DisruptorWaitStrategy.BusySpin,
endpoint.getDisruptor().getWaitStrategy());
}
@Test
public void testConcurrentConsumersConfigured() {
final DisruptorEndpoint endpoint = resolveMandatoryEndpoint("disruptor:foo?concurrentConsumers=5",
DisruptorEndpoint.class);
assertEquals("concurrentConsumers", 5, endpoint.getConcurrentConsumers());
}
@Test
public void testDefaultConcurrentConsumersComponentProperty() throws Exception {
final DisruptorComponent disruptor = context.getComponent("disruptor", DisruptorComponent.class);
disruptor.setDefaultConcurrentConsumers(5);
assertEquals(5, disruptor.getDefaultConcurrentConsumers());
final DisruptorEndpoint endpoint = resolveMandatoryEndpoint("disruptor:foo", DisruptorEndpoint.class);
assertEquals("concurrentConsumers", 5, endpoint.getConcurrentConsumers());
}
@Test
public void testWaitForTaskToCompleteConfigured() {
final DisruptorEndpoint endpoint = resolveMandatoryEndpoint(
"disruptor:foo?waitForTaskToComplete=Never", DisruptorEndpoint.class);
assertEquals("waitForTaskToComplete", WaitForTaskToComplete.Never,
endpoint.getWaitForTaskToComplete());
}
@Test
public void testDefaults() {
final DisruptorEndpoint endpoint = resolveMandatoryEndpoint("disruptor:foo", DisruptorEndpoint.class);
assertEquals("concurrentConsumers: wrong default", 1, endpoint.getConcurrentConsumers());
assertEquals("bufferSize: wrong default", DisruptorComponent.DEFAULT_BUFFER_SIZE,
endpoint.getBufferSize());
assertEquals("timeout: wrong default", 30000L, endpoint.getTimeout());
assertEquals("waitForTaskToComplete: wrong default", WaitForTaskToComplete.IfReplyExpected,
endpoint.getWaitForTaskToComplete());
assertEquals("DisruptorWaitStrategy: wrong default", DisruptorWaitStrategy.Blocking,
endpoint.getDisruptor().getWaitStrategy());
assertEquals("multipleConsumers: wrong default", false, endpoint.isMultipleConsumers());
assertEquals("multipleConsumersSupported", false, endpoint.isMultipleConsumersSupported());
assertEquals("producerType", DisruptorProducerType.Multi, endpoint.getDisruptor().getProducerType());
}
}