You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2016/07/15 07:09:55 UTC
[2/4] camel git commit: Add Lumberjack component
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);
+ }
+}