http://git-wip-us.apache.org/repos/asf/camel/blob/3d0379d0/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjacksComponentTest.java ---------------------------------------------------------------------- diff --git a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjacksComponentTest.java b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjacksComponentTest.java new file mode 100644 index 0000000..29e9397 --- /dev/null +++ b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjacksComponentTest.java @@ -0,0 +1,109 @@ +/** + * 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.lumberjack; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.impl.JndiRegistry; +import org.apache.camel.test.AvailablePortFinder; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.apache.camel.util.jsse.KeyManagersParameters; +import org.apache.camel.util.jsse.KeyStoreParameters; +import org.apache.camel.util.jsse.SSLContextParameters; +import org.apache.camel.util.jsse.TrustManagersParameters; +import org.junit.BeforeClass; +import org.junit.Test; + +@SuppressWarnings("unchecked") +public class LumberjacksComponentTest extends CamelTestSupport { + private static int port; + + @BeforeClass + public static void beforeClass() { + port = AvailablePortFinder.getNextAvailable(); + } + + @Override + protected JndiRegistry createRegistry() throws Exception { + JndiRegistry registry = super.createRegistry(); + registry.bind("ssl", createServerSSLContextParameters()); + return registry; + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + public void configure() { + // Lumberjack configured with SSL + from("lumberjacks:0.0.0.0:" + port + "?sslContextParameters=#ssl").to("mock:output"); + } + }; + } + + @Test + public void shouldListenToMessagesOverSSL() throws Exception { + // We're expecting 25 messages with Maps + MockEndpoint mock = getMockEndpoint("mock:output"); + mock.expectedMessageCount(25); + mock.allMessages().body().isInstanceOf(Map.class); + + // When sending messages + List<Integer> responses = LumberjackUtil.sendMessages(port, createClientSSLContextParameters()); + + // Then we should have the messages we're expecting + mock.assertIsSatisfied(); + + // And we should have replied with 2 acknowledgments for each window frame + assertEquals(responses, Arrays.asList(10, 15)); + } + + /** + * Creates the {@link SSLContextParameters} Camel object for the Lumberjack component + * + * @return The {@link SSLContextParameters} Camel object for the Lumberjack component + */ + private SSLContextParameters createServerSSLContextParameters() { + SSLContextParameters sslContextParameters = new SSLContextParameters(); + + KeyManagersParameters keyManagersParameters = new KeyManagersParameters(); + KeyStoreParameters keyStore = new KeyStoreParameters(); + keyStore.setPassword("changeit"); + keyStore.setResource("org/apache/camel/component/lumberjack/keystore.jks"); + keyManagersParameters.setKeyPassword("changeit"); + keyManagersParameters.setKeyStore(keyStore); + sslContextParameters.setKeyManagers(keyManagersParameters); + + return sslContextParameters; + } + + private SSLContextParameters createClientSSLContextParameters() { + SSLContextParameters sslContextParameters = new SSLContextParameters(); + + TrustManagersParameters trustManagersParameters = new TrustManagersParameters(); + KeyStoreParameters trustStore = new KeyStoreParameters(); + trustStore.setPassword("changeit"); + trustStore.setResource("org/apache/camel/component/lumberjack/keystore.jks"); + trustManagersParameters.setKeyStore(trustStore); + sslContextParameters.setTrustManagers(trustManagersParameters); + + return sslContextParameters; + } +}
http://git-wip-us.apache.org/repos/asf/camel/blob/3d0379d0/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/io/LumberjackChannelInitializerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/io/LumberjackChannelInitializerTest.java b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/io/LumberjackChannelInitializerTest.java new file mode 100644 index 0000000..873c0eb --- /dev/null +++ b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/io/LumberjackChannelInitializerTest.java @@ -0,0 +1,81 @@ +/** + * 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.lumberjack.io; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.embedded.EmbeddedChannel; +import org.junit.Test; + +import static io.netty.buffer.Unpooled.buffer; +import static org.apache.camel.component.lumberjack.io.LumberjackConstants.TYPE_ACKNOWLEDGE; +import static org.apache.camel.component.lumberjack.io.LumberjackConstants.VERSION_V2; +import static org.junit.Assert.assertEquals; + +@SuppressWarnings("unchecked") +public class LumberjackChannelInitializerTest { + @Test + public void shouldDecodeTwoWindowsWithCompressedMessages() throws Exception { + // Given a properly configured netty channel + List<Object> messages = new ArrayList<>(); + EmbeddedChannel channel = new EmbeddedChannel(new LumberjackChannelInitializer(null, null, (payload, callback) -> { + messages.add(payload); + callback.onComplete(true); + })); + + // When writing the stream byte per byte in order to ensure that we support splits everywhere + // It contains 2 windows with compressed messages + writeResourceBytePerByte(channel, "window10"); + writeResourceBytePerByte(channel, "window15"); + + // Then we must have 25 messages with only maps + assertEquals(25, messages.size()); + + // And the first map should contains valid data (we're assuming it's also valid for the other ones) + Map first = (Map) messages.get(0); + assertEquals("log", first.get("type")); + assertEquals("/home/qatest/collectNetwork/log/data-integration/00000000-f000-0000-1541-8da26f200001/absorption.log", first.get("source")); + + // And we should have replied twice (one per window) + assertEquals(2, channel.outboundMessages().size()); + checkAck((ByteBuf) channel.outboundMessages().poll(), 10); + checkAck((ByteBuf) channel.outboundMessages().poll(), 15); + } + + private void writeResourceBytePerByte(EmbeddedChannel channel, String resource) throws IOException { + try (InputStream stream = getClass().getResourceAsStream(resource)) { + int input; + while ((input = stream.read()) != -1) { + ByteBuf buffer = buffer(1, 1); + buffer.writeByte(input); + channel.writeInbound(buffer); + } + } + } + + private void checkAck(ByteBuf buf, int sequence) { + assertEquals("version", (short) VERSION_V2, buf.readUnsignedByte()); + assertEquals("frame", (short) TYPE_ACKNOWLEDGE, buf.readUnsignedByte()); + assertEquals("sequence", sequence, buf.readInt()); + assertEquals("remaining", 0, buf.readableBytes()); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/3d0379d0/components/camel-lumberjack/src/test/resources/log4j.properties ---------------------------------------------------------------------- diff --git a/components/camel-lumberjack/src/test/resources/log4j.properties b/components/camel-lumberjack/src/test/resources/log4j.properties new file mode 100644 index 0000000..4321049 --- /dev/null +++ b/components/camel-lumberjack/src/test/resources/log4j.properties @@ -0,0 +1,38 @@ +## ------------------------------------------------------------------------ +## 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. +## ------------------------------------------------------------------------ + +# +# The logging properties used for eclipse testing, We want to see debug output on the console. +# +log4j.rootLogger=INFO, file + +# uncomment the following to enable camel debugging +log4j.logger.org.apache.camel.component.lucene=DEBUG +#log4j.logger.org.apache.camel=DEBUG +#log4j.logger.org.apache.commons.net=TRACE + +# CONSOLE appender not used by default +log4j.appender.out=org.apache.log4j.ConsoleAppender +log4j.appender.out.layout=org.apache.log4j.PatternLayout +#log4j.appender.out.layout.ConversionPattern=[%30.30t] %-30.30c{1} %-5p %m%n +log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n + +# File appender +log4j.appender.file=org.apache.log4j.FileAppender +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n +log4j.appender.file.file=target/camel-lumberjack-test.log http://git-wip-us.apache.org/repos/asf/camel/blob/3d0379d0/components/camel-lumberjack/src/test/resources/org/apache/camel/component/lumberjack/io/window10 ---------------------------------------------------------------------- diff --git a/components/camel-lumberjack/src/test/resources/org/apache/camel/component/lumberjack/io/window10 b/components/camel-lumberjack/src/test/resources/org/apache/camel/component/lumberjack/io/window10 new file mode 100644 index 0000000..610d112 Binary files /dev/null and b/components/camel-lumberjack/src/test/resources/org/apache/camel/component/lumberjack/io/window10 differ http://git-wip-us.apache.org/repos/asf/camel/blob/3d0379d0/components/camel-lumberjack/src/test/resources/org/apache/camel/component/lumberjack/io/window15 ---------------------------------------------------------------------- diff --git a/components/camel-lumberjack/src/test/resources/org/apache/camel/component/lumberjack/io/window15 b/components/camel-lumberjack/src/test/resources/org/apache/camel/component/lumberjack/io/window15 new file mode 100644 index 0000000..bee6f2f Binary files /dev/null and b/components/camel-lumberjack/src/test/resources/org/apache/camel/component/lumberjack/io/window15 differ http://git-wip-us.apache.org/repos/asf/camel/blob/3d0379d0/components/camel-lumberjack/src/test/resources/org/apache/camel/component/lumberjack/keystore.jks ---------------------------------------------------------------------- diff --git a/components/camel-lumberjack/src/test/resources/org/apache/camel/component/lumberjack/keystore.jks b/components/camel-lumberjack/src/test/resources/org/apache/camel/component/lumberjack/keystore.jks new file mode 100644 index 0000000..78e8571 Binary files /dev/null and b/components/camel-lumberjack/src/test/resources/org/apache/camel/component/lumberjack/keystore.jks differ http://git-wip-us.apache.org/repos/asf/camel/blob/3d0379d0/components/pom.xml ---------------------------------------------------------------------- diff --git a/components/pom.xml b/components/pom.xml index 41ad249..c742ff7 100644 --- a/components/pom.xml +++ b/components/pom.xml @@ -186,6 +186,7 @@ <module>camel-leveldb</module> <module>camel-linkedin</module> <module>camel-lucene</module> + <module>camel-lumberjack</module> <module>camel-lzf</module> <module>camel-mail</module> <module>camel-metrics</module> http://git-wip-us.apache.org/repos/asf/camel/blob/3d0379d0/parent/pom.xml ---------------------------------------------------------------------- diff --git a/parent/pom.xml b/parent/pom.xml index b36ca78..3984633 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -1294,11 +1294,6 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> - <artifactId>camel-lucene</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.apache.camel</groupId> <artifactId>camel-ldap</artifactId> <version>${project.version}</version> </dependency> @@ -1319,6 +1314,16 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-lucene</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-lumberjack</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-lzf</artifactId> <version>${project.version}</version> </dependency> http://git-wip-us.apache.org/repos/asf/camel/blob/3d0379d0/platforms/karaf/features/src/main/resources/features.xml ---------------------------------------------------------------------- diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml index 66178c7..32b0c16 100644 --- a/platforms/karaf/features/src/main/resources/features.xml +++ b/platforms/karaf/features/src/main/resources/features.xml @@ -1105,6 +1105,17 @@ <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jakarta-regexp/${regexp-bundle-version}</bundle> <bundle>mvn:org.apache.camel/camel-lucene/${project.version}</bundle> </feature> + <feature name='camel-lumberjack' version='${project.version}' resolver='(obr)' start-level='50'> + <feature version='${project.version}'>camel-core</feature> + <bundle dependency='true'>mvn:io.netty/netty-common/${netty-version}</bundle> + <bundle dependency='true'>mvn:io.netty/netty-buffer/${netty-version}</bundle> + <bundle dependency='true'>mvn:io.netty/netty-resolver/${netty-version}</bundle> + <bundle dependency='true'>mvn:io.netty/netty-transport/${netty-version}</bundle> + <bundle dependency='true'>mvn:io.netty/netty-handler/${netty-version}</bundle> + <bundle dependency='true'>mvn:io.netty/netty-codec/${netty-version}</bundle> + <bundle dependency='true'>mvn:com.google.code.gson/gson/${gson-version}</bundle> + <bundle>mvn:org.apache.camel/camel-lumberjack/${project.version}</bundle> + </feature> <feature name='camel-lzf' version='${project.version}' resolver='(obr)' start-level='50'> <feature version='${project.version}'>camel-core</feature> <bundle dependency='true'>mvn:com.ning/compress-lzf/${compress-lzf-version}</bundle> http://git-wip-us.apache.org/repos/asf/camel/blob/3d0379d0/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelLumberjackTest.java ---------------------------------------------------------------------- diff --git a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelLumberjackTest.java b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelLumberjackTest.java new file mode 100644 index 0000000..8ae807c --- /dev/null +++ b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelLumberjackTest.java @@ -0,0 +1,36 @@ +/** + * 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.itest.karaf; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.ops4j.pax.exam.junit.PaxExam; + +@RunWith(PaxExam.class) +public class CamelLumberjackTest extends BaseKarafTest { + + public CamelLumberjackTest() { + } + + public static final String COMPONENT = extractName(CamelLumberjackTest.class); + + @Test + public void test() throws Exception { + testComponent(COMPONENT); + } +}