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);
+    }
+}