You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by jc...@apache.org on 2013/10/10 05:17:28 UTC

git commit: CAMEL-6826: Use Mock Objects Instead of Live HazelcastInstances to Speed Up Testing - Fixing spring tests.

Updated Branches:
  refs/heads/master 69998cb1f -> dae6366cc


CAMEL-6826: Use Mock Objects Instead of Live HazelcastInstances to Speed Up Testing
- Fixing spring tests.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/dae6366c
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/dae6366c
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/dae6366c

Branch: refs/heads/master
Commit: dae6366cc50b04ece05897d9a3e0648c6ee86ea7
Parents: 69998cb
Author: James Carman <jc...@apache.org>
Authored: Wed Oct 9 23:17:04 2013 -0400
Committer: James Carman <jc...@apache.org>
Committed: Wed Oct 9 23:17:04 2013 -0400

----------------------------------------------------------------------
 ...elcastAtomicnumberProducerForSpringTest.java | 50 +++++++++----
 .../HazelcastCamelSpringTestSupport.java        | 60 ++++++++++++++++
 .../hazelcast/HazelcastErrorMessagesTest.java   |  2 +-
 .../HazelcastMapProducerForSpringTest.java      | 74 ++++++++++----------
 .../HazelcastMultimapProducerForSpringTest.java | 69 +++++++++---------
 .../META-INF/spring/test-camel-context-map.xml  |  8 ---
 .../spring/test-camel-context-multimap.xml      |  8 +--
 7 files changed, 169 insertions(+), 102 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/dae6366c/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerForSpringTest.java
----------------------------------------------------------------------
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerForSpringTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerForSpringTest.java
index 589aeae..481e910 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerForSpringTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerForSpringTest.java
@@ -16,12 +16,39 @@
  */
 package org.apache.camel.component.hazelcast;
 
+import com.hazelcast.core.HazelcastInstance;
+import com.hazelcast.core.IAtomicLong;
 import org.apache.camel.test.spring.CamelSpringTestSupport;
+import org.junit.After;
 import org.junit.Test;
+import org.mockito.Mock;
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-public class HazelcastAtomicnumberProducerForSpringTest extends CamelSpringTestSupport {
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+public class HazelcastAtomicnumberProducerForSpringTest extends HazelcastCamelSpringTestSupport {
+
+    @Mock
+    private IAtomicLong atomicNumber;
+
+    @Override
+    protected void trainHazelcastInstance(HazelcastInstance hazelcastInstance) {
+        when(hazelcastInstance.getAtomicLong("foo")).thenReturn(atomicNumber);
+    }
+
+    @Override
+    protected void verifyHazelcastInstance(HazelcastInstance hazelcastInstance) {
+        verify(hazelcastInstance, atLeastOnce()).getAtomicLong("foo");
+    }
+
+    @After
+    public void verifyAtomicNumberMock() {
+        verifyNoMoreInteractions(atomicNumber);
+    }
 
     @Override
     protected AbstractApplicationContext createApplicationContext() {
@@ -31,42 +58,37 @@ public class HazelcastAtomicnumberProducerForSpringTest extends CamelSpringTestS
     @Test
     public void testSet() {
         template.sendBody("direct:set", 4711);
-
-        long body = template.requestBody("direct:get", null, Long.class);
-        assertEquals(4711, body);
+        verify(atomicNumber).set(4711);
     }
 
     @Test
     public void testGet() {
-        template.sendBody("direct:set", 1234);
-
+        when(atomicNumber.get()).thenReturn(1234L);
         long body = template.requestBody("direct:get", null, Long.class);
+        verify(atomicNumber).get();
         assertEquals(1234, body);
     }
 
     @Test
     public void testIncrement() {
-        template.sendBody("direct:set", 10);
-
+        when(atomicNumber.incrementAndGet()).thenReturn(11L);
         long body = template.requestBody("direct:increment", null, Long.class);
+        verify(atomicNumber).incrementAndGet();
         assertEquals(11, body);
     }
 
     @Test
     public void testDecrement() {
-        template.sendBody("direct:set", 10);
-
+        when(atomicNumber.decrementAndGet()).thenReturn(9L);
         long body = template.requestBody("direct:decrement", null, Long.class);
+        verify(atomicNumber).decrementAndGet();
         assertEquals(9, body);
     }
 
     @Test
     public void testDestroy() throws InterruptedException {
-        template.sendBody("direct:set", 10);
         template.sendBody("direct:destroy", null);
-        long body = template.requestBody("direct:get", null, Long.class);
-        // the body is destory
-        assertEquals(0, body);
+        verify(atomicNumber).destroy();
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/dae6366c/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastCamelSpringTestSupport.java
----------------------------------------------------------------------
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastCamelSpringTestSupport.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastCamelSpringTestSupport.java
new file mode 100644
index 0000000..b1fbd3e
--- /dev/null
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastCamelSpringTestSupport.java
@@ -0,0 +1,60 @@
+/**
+ * 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.hazelcast;
+
+import com.hazelcast.core.HazelcastInstance;
+import org.apache.camel.CamelContext;
+import org.apache.camel.test.junit4.CamelSpringTestSupport;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.After;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+
+public abstract class HazelcastCamelSpringTestSupport extends CamelSpringTestSupport {
+
+    @Mock
+    private HazelcastInstance hazelcastInstance;
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        CamelContext context = super.createCamelContext();
+        HazelcastComponent hazelcastComponent = new HazelcastComponent(context);
+        hazelcastComponent.setHazelcastInstance(hazelcastInstance);
+        context.addComponent("hazelcast", hazelcastComponent);
+        trainHazelcastInstance(hazelcastInstance);
+        return context;
+    }
+
+    protected void trainHazelcastInstance(HazelcastInstance hazelcastInstance) {
+
+    }
+
+    protected void verifyHazelcastInstance(HazelcastInstance hazelcastInstance) {
+
+    }
+
+    @After
+    public final void verifyHazelcastInstanceMock() {
+        verifyHazelcastInstance(hazelcastInstance);
+        verifyNoMoreInteractions(hazelcastInstance);
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/dae6366c/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastErrorMessagesTest.java
----------------------------------------------------------------------
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastErrorMessagesTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastErrorMessagesTest.java
index 56cc60f..a149fdb 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastErrorMessagesTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastErrorMessagesTest.java
@@ -20,7 +20,7 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-public class HazelcastErrorMessagesTest extends CamelTestSupport {
+public class HazelcastErrorMessagesTest extends HazelcastCamelTestSupport {
 
     @Test
     public void testUriPrefix() {

http://git-wip-us.apache.org/repos/asf/camel/blob/dae6366c/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerForSpringTest.java
----------------------------------------------------------------------
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerForSpringTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerForSpringTest.java
index 5493be0..cef3e4a 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerForSpringTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerForSpringTest.java
@@ -16,31 +16,45 @@
  */
 package org.apache.camel.component.hazelcast;
 
-import java.io.Serializable;
+import java.util.Arrays;
 import java.util.Collection;
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.IMap;
 
+import com.hazelcast.query.SqlPredicate;
 import org.apache.camel.component.hazelcast.testutil.Dummy;
-import org.apache.camel.test.spring.CamelSpringTestSupport;
 
+import org.junit.After;
 import org.junit.Test;
+import org.mockito.Mock;
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-public class HazelcastMapProducerForSpringTest extends CamelSpringTestSupport implements Serializable {
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
 
-    private static final long serialVersionUID = 1L;
-    private IMap<Long, Object> map;
+public class HazelcastMapProducerForSpringTest extends HazelcastCamelSpringTestSupport {
+
+    @Mock
+    private IMap<Object, Object> map;
 
     @Override
-    protected void doPostSetup() throws Exception {
-        super.doPostSetup();
-        HazelcastComponent component = context().getComponent("hazelcast", HazelcastComponent.class);
-        HazelcastInstance hazelcastInstance = component.getHazelcastInstance();
-        this.map = hazelcastInstance.getMap("foo");
-        this.map.clear();
+    protected void trainHazelcastInstance(HazelcastInstance hazelcastInstance) {
+        when(hazelcastInstance.getMap("foo")).thenReturn(map);
+    }
+
+    @Override
+    protected void verifyHazelcastInstance(HazelcastInstance hazelcastInstance) {
+        verify(hazelcastInstance, atLeastOnce()).getMap("foo");
+    }
+
+    @After
+    public void verifyMapMock() {
+        verifyNoMoreInteractions(map);
     }
 
     @Override
@@ -51,27 +65,22 @@ public class HazelcastMapProducerForSpringTest extends CamelSpringTestSupport im
     @Test
     public void testPut() throws InterruptedException {
         template.sendBodyAndHeader("direct:put", "my-foo", HazelcastConstants.OBJECT_ID, 4711L);
-
-        assertTrue(map.containsKey(4711L));
-        assertEquals("my-foo", map.get(4711L));
+        verify(map).put(4711L, "my-foo");
     }
 
     @Test
     public void testUpdate() {
-        template.sendBodyAndHeader("direct:put", "my-foo", HazelcastConstants.OBJECT_ID, 4711L);
-
-        assertTrue(map.containsKey(4711L));
-        assertEquals("my-foo", map.get(4711L));
-
         template.sendBodyAndHeader("direct:update", "my-fooo", HazelcastConstants.OBJECT_ID, 4711L);
-        assertEquals("my-fooo", map.get(4711L));
+        verify(map).lock(4711L);
+        verify(map).replace(4711L, "my-fooo");
+        verify(map).unlock(4711L);
     }
 
     @Test
     public void testGet() {
-        map.put(4711L, "my-foo");
-
+        when(map.get(4711L)).thenReturn("my-foo");
         template.sendBodyAndHeader("direct:get", null, HazelcastConstants.OBJECT_ID, 4711L);
+        verify(map).get(4711L);
         String body = consumer.receiveBody("seda:out", 5000, String.class);
 
         assertEquals("my-foo", body);
@@ -79,33 +88,22 @@ public class HazelcastMapProducerForSpringTest extends CamelSpringTestSupport im
 
     @Test
     public void testDelete() {
-        map.put(4711L, "my-foo");
-        assertEquals(1, map.size());
-
         template.sendBodyAndHeader("direct:delete", null, HazelcastConstants.OBJECT_ID, 4711L);
-        assertEquals(0, map.size());
+        verify(map).remove(4711L);
     }
 
     @Test
     public void testQuery() {
-        map.put(1L, new Dummy("alpha", 1000));
-        map.put(2L, new Dummy("beta", 2000));
-        map.put(3L, new Dummy("gamma", 3000));
+        String sql = "bar > 1000";
 
-        String q1 = "bar > 1000";
-        String q2 = "foo LIKE alp%";
+        when(map.values(any(SqlPredicate.class))).thenReturn(Arrays.<Object>asList(new Dummy("beta", 2000), new Dummy("gamma", 3000)));
+        template.sendBodyAndHeader("direct:query", null, HazelcastConstants.QUERY, sql);
+        verify(map).values(any(SqlPredicate.class));
 
-        template.sendBodyAndHeader("direct:query", null, HazelcastConstants.QUERY, q1);
         Collection<?> b1 = consumer.receiveBody("seda:out", 5000, Collection.class);
 
         assertNotNull(b1);
         assertEquals(2, b1.size());
-
-        template.sendBodyAndHeader("direct:query", null, HazelcastConstants.QUERY, q2);
-        Collection<?> b2 = consumer.receiveBody("seda:out", 5000, Collection.class);
-
-        assertNotNull(b2);
-        assertEquals(1, b2.size());
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/dae6366c/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMultimapProducerForSpringTest.java
----------------------------------------------------------------------
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMultimapProducerForSpringTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMultimapProducerForSpringTest.java
index 8442669..3bd90e0 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMultimapProducerForSpringTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMultimapProducerForSpringTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.hazelcast;
 
+import java.util.Arrays;
 import java.util.Collection;
 
 import com.hazelcast.core.Hazelcast;
@@ -23,25 +24,36 @@ import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.MultiMap;
 
 import org.apache.camel.test.spring.CamelSpringTestSupport;
+import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Test;
+import org.mockito.Mock;
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-public class HazelcastMultimapProducerForSpringTest extends CamelSpringTestSupport {
-    private MultiMap<Long, Object> map;
-    
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+public class HazelcastMultimapProducerForSpringTest extends HazelcastCamelSpringTestSupport {
+
+    @Mock
+    private MultiMap<Object, Object> map;
+
     @Override
-    protected void doPostSetup() throws Exception {
-        HazelcastComponent component = context().getComponent("hazelcast", HazelcastComponent.class);
-        HazelcastInstance hazelcastInstance = component.getHazelcastInstance();
-        this.map = hazelcastInstance.getMultiMap("foo");
-        this.map.clear();
+    protected void trainHazelcastInstance(HazelcastInstance hazelcastInstance) {
+        when(hazelcastInstance.getMultiMap("bar")).thenReturn(map);
     }
 
-    @AfterClass
-    public static void tearDownClass() {
-        Hazelcast.shutdownAll();
+    @Override
+    protected void verifyHazelcastInstance(HazelcastInstance hazelcastInstance) {
+        verify(hazelcastInstance, atLeastOnce()).getMultiMap("bar");
+    }
+
+    @After
+    public void verifyMapMock() {
+        verifyNoMoreInteractions(map);
     }
 
     @Override
@@ -51,46 +63,29 @@ public class HazelcastMultimapProducerForSpringTest extends CamelSpringTestSuppo
 
     @Test
     public void testPut() throws InterruptedException {
-        template.sendBodyAndHeader("direct:put", "my-foo", HazelcastConstants.OBJECT_ID, 4711L);
-        template.sendBodyAndHeader("direct:put", "my-bar", HazelcastConstants.OBJECT_ID, 4711L);
-
-        assertTrue(map.containsKey(4711L));
-        Collection<Object> values = map.get(4711L);
-
-        assertTrue(values.contains("my-foo"));
-        assertTrue(values.contains("my-bar"));
+        template.sendBodyAndHeader("direct:put", "my-foo", HazelcastConstants.OBJECT_ID, "4711");
+        verify(map).put("4711", "my-foo");
     }
 
     @Test
     public void testRemoveValue() {
-        map.put(4711L, "my-foo");
-        map.put(4711L, "my-bar");
-
-        assertEquals(2, map.get(4711L).size());
-
-        template.sendBodyAndHeader("direct:removevalue", "my-foo", HazelcastConstants.OBJECT_ID, 4711L);
-
-        assertEquals(1, map.get(4711L).size());
-        assertTrue(map.get(4711L).contains("my-bar"));
+        template.sendBodyAndHeader("direct:removevalue", "my-foo", HazelcastConstants.OBJECT_ID, "4711");
+        verify(map).remove("4711", "my-foo");
     }
 
     @Test
     public void testGet() {
-        map.put(4711L, "my-foo");
-
-        template.sendBodyAndHeader("direct:get", null, HazelcastConstants.OBJECT_ID, 4711L);
+        when(map.get("4711")).thenReturn(Arrays.<Object>asList("my-foo"));
+        template.sendBodyAndHeader("direct:get", null, HazelcastConstants.OBJECT_ID, "4711");
+        verify(map).get("4711");
         Collection<?> body = consumer.receiveBody("seda:out", 5000, Collection.class);
-
         assertTrue(body.contains("my-foo"));
     }
 
     @Test
     public void testDelete() {
-        map.put(4711L, "my-foo");
-        assertEquals(1, map.size());
-
-        template.sendBodyAndHeader("direct:delete", null, HazelcastConstants.OBJECT_ID, 4711L);
-        assertEquals(0, map.size());
+        template.sendBodyAndHeader("direct:delete", null, HazelcastConstants.OBJECT_ID, 4711);
+        verify(map).remove(4711);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/dae6366c/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-map.xml
----------------------------------------------------------------------
diff --git a/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-map.xml b/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-map.xml
index c9412db..ee3431e 100644
--- a/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-map.xml
+++ b/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-map.xml
@@ -67,12 +67,4 @@
 
 	</camelContext>
 
-    <bean id="hazelcast" class="org.apache.camel.component.hazelcast.HazelcastComponent">
-        <property name="hazelcastInstance" ref="hazelcastInstance"/>
-    </bean>
-
-    <bean id="hazelcastInstance" class="com.hazelcast.core.Hazelcast" factory-method="newHazelcastInstance" destroy-method="shutdown">
-        <constructor-arg><null/></constructor-arg>
-    </bean>
-
 </beans>

http://git-wip-us.apache.org/repos/asf/camel/blob/dae6366c/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-multimap.xml
----------------------------------------------------------------------
diff --git a/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-multimap.xml b/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-multimap.xml
index f8ea79b..f855b0d 100644
--- a/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-multimap.xml
+++ b/components/camel-hazelcast/src/test/resources/META-INF/spring/test-camel-context-multimap.xml
@@ -28,7 +28,7 @@
 			<setHeader headerName="CamelHazelcastOperationType">
 				<constant>put</constant>
 			</setHeader>
-			<to uri="hazelcast:multimap:foo" />
+			<to uri="hazelcast:multimap:bar" />
 		</route>
 
 		<route>
@@ -36,7 +36,7 @@
 			<setHeader headerName="CamelHazelcastOperationType">
 				<constant>removevalue</constant>
 			</setHeader>
-			<to uri="hazelcast:multimap:foo" />
+			<to uri="hazelcast:multimap:bar" />
 		</route>
 
 		<route>
@@ -44,7 +44,7 @@
 			<setHeader headerName="CamelHazelcastOperationType">
 				<constant>get</constant>
 			</setHeader>
-			<to uri="hazelcast:multimap:foo" />
+			<to uri="hazelcast:multimap:bar" />
 			<to uri="seda:out" />
 		</route>
 
@@ -53,7 +53,7 @@
 			<setHeader headerName="CamelHazelcastOperationType">
 				<constant>delete</constant>
 			</setHeader>
-			<to uri="hazelcast:multimap:foo" />
+			<to uri="hazelcast:multimap:bar" />
 		</route>
 
 	</camelContext>