You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ch...@apache.org on 2007/08/21 16:21:53 UTC

svn commit: r568144 - in /activemq/camel/trunk/components/camel-activemq/src: main/java/org/apache/camel/component/activemq/ test/java/org/apache/camel/component/activemq/

Author: chirino
Date: Tue Aug 21 07:21:52 2007
New Revision: 568144

URL: http://svn.apache.org/viewvc?rev=568144&view=rev
Log:
Better journal tests and also add a little performance benchmark to get an idea of what you can expect from the journal

Added:
    activemq/camel/trunk/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/JournalRoutePerformance.java   (with props)
Modified:
    activemq/camel/trunk/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/JournalEndpoint.java
    activemq/camel/trunk/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/JournalConfigureTest.java
    activemq/camel/trunk/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/JournalRouteTest.java

Modified: activemq/camel/trunk/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/JournalEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/JournalEndpoint.java?rev=568144&r1=568143&r2=568144&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/JournalEndpoint.java (original)
+++ activemq/camel/trunk/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/JournalEndpoint.java Tue Aug 21 07:21:52 2007
@@ -222,4 +222,9 @@
         this.syncProduce = syncProduce;
     }
 
+    boolean isOpen() {
+        synchronized (activationMutex) {
+            return referenceCount > 0;
+        }
+    }
 }

Modified: activemq/camel/trunk/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/JournalConfigureTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/JournalConfigureTest.java?rev=568144&r1=568143&r2=568144&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/JournalConfigureTest.java (original)
+++ activemq/camel/trunk/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/JournalConfigureTest.java Tue Aug 21 07:21:52 2007
@@ -25,17 +25,17 @@
  * @version $Revision$
  */
 public class JournalConfigureTest extends ContextTestSupport {
-    
+
     public void testDefaltConfig() throws Exception {
-        JournalEndpoint endpoint = resolveMandatoryEndpoint("activemq.journal:test");        
-        assertEquals("directory", new File("test"), endpoint.getDirectory());
+        JournalEndpoint endpoint = resolveMandatoryEndpoint("activemq.journal:target/test");
+        assertEquals("directory", new File("target", "test"), endpoint.getDirectory());
         assertEquals("syncConsume", false, endpoint.isSyncConsume());
         assertEquals("syncProduce", true, endpoint.isSyncProduce());
     }
 
     public void testConfigViaOptions() throws Exception {
-        JournalEndpoint endpoint = resolveMandatoryEndpoint("activemq.journal:test?syncConsume=true&syncProduce=false");        
-        assertEquals("directory", new File("test"), endpoint.getDirectory());
+        JournalEndpoint endpoint = resolveMandatoryEndpoint("activemq.journal:target/test?syncConsume=true&syncProduce=false");
+        assertEquals("directory", new File("target", "test"), endpoint.getDirectory());
         assertEquals("syncConsume", true, endpoint.isSyncConsume());
         assertEquals("syncProduce", false, endpoint.isSyncProduce());
     }
@@ -45,4 +45,4 @@
         Endpoint endpoint = super.resolveMandatoryEndpoint(uri);
         return assertIsInstanceOf(JournalEndpoint.class, endpoint);
     }
-}
\ No newline at end of file
+}

Added: activemq/camel/trunk/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/JournalRoutePerformance.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/JournalRoutePerformance.java?rev=568144&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/JournalRoutePerformance.java (added)
+++ activemq/camel/trunk/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/JournalRoutePerformance.java Tue Aug 21 07:21:52 2007
@@ -0,0 +1,99 @@
+/**
+ * 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.activemq;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicLong;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * Used to get an idea of what kind of performance can be expected from 
+ * the journal.
+ * 
+ * @version $Revision$
+ */
+public class JournalRoutePerformance extends ContextTestSupport {
+
+    AtomicLong produceCounter = new AtomicLong();
+    AtomicLong consumeCounter = new AtomicLong();
+    AtomicBoolean running = new AtomicBoolean(true);
+
+    public void testPerformance() throws Exception {
+
+        int payLoadSize = 1024;
+        int concurrentProducers = 50;
+        long delayBetweenSample = 1000;
+        long perfTestDuration = 1000 * 60; // 1 min
+
+        StringBuffer t = new StringBuffer();
+        for (int i = 0; i < payLoadSize; i++) {
+            t.append('a' + (i % 26));
+        }
+        final byte[] payload = t.toString().getBytes("UTF-8");
+
+        for (int i = 0; i < concurrentProducers; i++) {
+            Thread thread = new Thread("Producer: " + i) {
+                @Override
+                public void run() {
+                    while (running.get()) {
+                        template.sendBody("direct:in", payload);
+                        produceCounter.incrementAndGet();
+                    }
+                }
+            };
+            thread.start();
+        }
+
+        long produceTotal = 0;
+        long consumeTotal = 0;
+        long start = System.currentTimeMillis();
+        long end = start + perfTestDuration;
+        while (System.currentTimeMillis() < end) {
+            Thread.sleep(delayBetweenSample);
+            long totalTime = System.currentTimeMillis() - start;
+            long p = produceCounter.getAndSet(0);
+            long c = consumeCounter.getAndSet(0);
+            produceTotal += p;
+            consumeTotal += c;
+            System.out.println("Interval Produced " + stat(p, delayBetweenSample) + " m/s, Consumed " + stat(c, delayBetweenSample) + " m/s");
+            System.out.println("Total Produced " + stat(produceTotal, totalTime) + " m/s, Consumed " + stat(consumeTotal, totalTime) + " m/s");
+        }
+        running.set(false);
+
+    }
+
+    private String stat(long pd, long delayBetweenSample) {
+        return "" + (1.0 * pd / delayBetweenSample) * 1000.0;
+    }
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                from("direct:in").to("activemq.journal:target/perf-test");
+                from("activemq.journal:target/perf-test").process(new Processor() {
+                    public void process(Exchange exchange) throws Exception {
+                        consumeCounter.incrementAndGet();
+                    }
+                });
+            }
+        };
+    }
+}

Propchange: activemq/camel/trunk/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/JournalRoutePerformance.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/JournalRoutePerformance.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: activemq/camel/trunk/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/JournalRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/JournalRouteTest.java?rev=568144&r1=568143&r2=568144&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/JournalRouteTest.java (original)
+++ activemq/camel/trunk/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/JournalRouteTest.java Tue Aug 21 07:21:52 2007
@@ -30,20 +30,20 @@
  */
 public class JournalRouteTest extends ContextTestSupport {
 
-    public void testForwardingAMessageAcrossJMSKeepingCustomJMSHeaders() throws Exception {
+    public void testSimpleJournalRoute() throws Exception {
 
         byte[] payload = "Hello World".getBytes();
         
         
-        MockEndpoint resultEndpoint = resolveMandatoryEndpoint("mock:result", MockEndpoint.class);
+        MockEndpoint resultEndpoint = resolveMandatoryEndpoint("mock:out", MockEndpoint.class);
         resultEndpoint.expectedMessageCount(1);
         
         AssertionClause firstMessageExpectations = resultEndpoint.message(0);
-        firstMessageExpectations.header("journal").isEqualTo("activemq.journal:test.a");
+        firstMessageExpectations.header("journal").isEqualTo("activemq.journal:target/test.a");
         firstMessageExpectations.header("location").isNotNull();
         firstMessageExpectations.body().isInstanceOf(ByteSequence.class);
 
-        template.sendBody("direct:test.a", payload);
+        template.sendBody("direct:in", payload);
 
         resultEndpoint.assertIsSatisfied();
 
@@ -57,8 +57,8 @@
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                from("direct:test.a").to("activemq.journal:test.a");
-                from("activemq.journal:test.a").to("mock:result");
+                from("direct:in").to("activemq.journal:target/test.a");
+                from("activemq.journal:target/test.a").to("mock:out");
             }
         };
     }