Author: ningjiang
Date: Wed May  9 16:26:07 2012
New Revision: 1336283

URL: http://svn.apache.org/viewvc?rev=1336283&view=rev
Log:
CAMEL-5263 Comet component does not pass EnableSessionHeader paramter to 
CometdBinding properly.

Modified:
    
camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdBinding.java
    
camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdConsumer.java
    
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometBindingTest.java
    
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdConsumerTest.java
    
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerTest.java

Modified: 
camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdBinding.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdBinding.java?rev=1336283&r1=1336282&r2=1336283&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdBinding.java
 (original)
+++ 
camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdBinding.java
 Wed May  9 16:26:07 2012
@@ -99,7 +99,7 @@ public class CometdBinding {
             Object attribute = remote.getAttribute(attributeName);
 
             if (attribute instanceof Integer || attribute instanceof String || 
attribute instanceof Long
-                || attribute instanceof Double) {
+                || attribute instanceof Double || attribute instanceof 
Boolean) {
                 message.setHeader(attributeName, attribute);
             } else {
                 // Do we need to support other type of session objects ?

Modified: 
camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdConsumer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdConsumer.java?rev=1336283&r1=1336282&r2=1336283&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdConsumer.java
 (original)
+++ 
camel/trunk/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdConsumer.java
 Wed May  9 16:26:07 2012
@@ -78,12 +78,17 @@ public class CometdConsumer extends Defa
 
         public ConsumerService(String channel, BayeuxServerImpl bayeux, 
CometdConsumer consumer) {
             super(bayeux, channel);
-            this.binding = new CometdBinding(bayeux);
-            this.consumer = consumer;
             this.endpoint = consumer.getEndpoint();
+            this.binding = createBinding(bayeux);
+            this.consumer = consumer;
             addService(channel, "push");
         }
 
+       private CometdBinding createBinding(BayeuxServerImpl bayeux) {
+           boolean enableSessionHeaders = endpoint == null ? false : 
endpoint.areSessionHeadersEnabled();
+           return new CometdBinding(bayeux, enableSessionHeaders);
+        }
+
         public void push(ServerSession remote, String channelName, 
ServerMessage cometdMessage, String messageId) throws Exception {
             Object data = null;
 

Modified: 
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometBindingTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometBindingTest.java?rev=1336283&r1=1336282&r2=1336283&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometBindingTest.java
 (original)
+++ 
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometBindingTest.java
 Wed May  9 16:26:07 2012
@@ -31,6 +31,7 @@ import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -46,6 +47,7 @@ public class CometBindingTest {
     private static final String DOUBLE_ATTR_NAME = "double";
     private static final String INTEGER_ATTR_NAME = "integer";
     private static final String STRING_ATTR_NAME = "string";
+    private static final String BOOLEAN_ATT_NAME = "boolean";
     private CometdBinding testObj;
     @Mock
     private BayeuxServerImpl bayeux;
@@ -60,13 +62,15 @@ public class CometBindingTest {
 
         Set<String> attributeNames = new 
HashSet<String>(Arrays.asList(STRING_ATTR_NAME, INTEGER_ATTR_NAME,
                                                                        
LONG_ATTR_NAME, DOUBLE_ATTR_NAME,
-                                                                       
FOO_ATTR_NAME));
+                                                                       
FOO_ATTR_NAME, BOOLEAN_ATT_NAME));
         when(remote.getAttributeNames()).thenReturn(attributeNames);
         when(remote.getAttribute(STRING_ATTR_NAME)).thenReturn(HELLO);
         when(remote.getAttribute(INTEGER_ATTR_NAME)).thenReturn(EIGHT);
         when(remote.getAttribute(LONG_ATTR_NAME)).thenReturn(THIRTY_FOUR);
         when(remote.getAttribute(DOUBLE_ATTR_NAME)).thenReturn(TWO_POINT_ONE);
         when(remote.getAttribute(FOO_ATTR_NAME)).thenReturn(FOO);
+        when(remote.getAttribute(BOOLEAN_ATT_NAME)).thenReturn(Boolean.TRUE);
+        
     }
 
     @Test
@@ -78,12 +82,13 @@ public class CometBindingTest {
         Message result = testObj.createCamelMessage(remote, cometdMessage, 
null);
 
         // assert
-        assertEquals(5, result.getHeaders().size());
+        assertEquals(6, result.getHeaders().size());
         assertEquals(HELLO, result.getHeader(STRING_ATTR_NAME));
         assertEquals(EIGHT, result.getHeader(INTEGER_ATTR_NAME));
         assertEquals(THIRTY_FOUR, result.getHeader(LONG_ATTR_NAME));
         assertEquals(TWO_POINT_ONE, result.getHeader(DOUBLE_ATTR_NAME));
         assertEquals(null, result.getHeader(FOO_ATTR_NAME));
+        assertTrue((Boolean)result.getHeader(BOOLEAN_ATT_NAME));
     }
 
     @Test
@@ -98,6 +103,7 @@ public class CometBindingTest {
         assertEquals(null, result.getHeader(LONG_ATTR_NAME));
         assertEquals(null, result.getHeader(FOO_ATTR_NAME));
         assertEquals(null, result.getHeader(DOUBLE_ATTR_NAME));
+        assertEquals(null, result.getHeader(BOOLEAN_ATT_NAME));
     }
 
     @Test

Modified: 
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdConsumerTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdConsumerTest.java?rev=1336283&r1=1336282&r2=1336283&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdConsumerTest.java
 (original)
+++ 
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdConsumerTest.java
 Wed May  9 16:26:07 2012
@@ -16,25 +16,37 @@
  */
 package org.apache.camel.component.cometd;
 
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.component.cometd.CometdConsumer.ConsumerService;
 import org.cometd.bayeux.server.LocalSession;
 import org.cometd.bayeux.server.ServerChannel;
+import org.cometd.bayeux.server.ServerMessage;
+import org.cometd.bayeux.server.ServerSession;
 import org.cometd.server.BayeuxServerImpl;
 import org.eclipse.jetty.util.log.Logger;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
 public class CometdConsumerTest {
 
+    private static final String USER_NAME = "userName";
+    private static final String MEMEBER_USER_NAME = "bob";
     private CometdConsumer testObj;
     @Mock
     private CometdEndpoint endpoint;
@@ -48,6 +60,8 @@ public class CometdConsumerTest {
     private Logger logger;
     @Mock
     private ServerChannel serverChannel;
+    @Mock
+    private ServerSession remote;
 
     @Before
     public void before() {
@@ -57,6 +71,12 @@ public class CometdConsumerTest {
 
         testObj = new CometdConsumer(endpoint, processor);
         testObj.setBayeux(bayeuxServerImpl);
+        
+        Set<String> attributeNames = new HashSet<String>();
+        String attributeKey = USER_NAME;
+        attributeNames.add(attributeKey);
+        when(remote.getAttributeNames()).thenReturn(attributeNames);
+        when(remote.getAttribute(attributeKey)).thenReturn(MEMEBER_USER_NAME);
     }
 
     @Test
@@ -72,4 +92,26 @@ public class CometdConsumerTest {
         // assert
         assertEquals(expectedService, result);
     }
+    
+    @Test
+    public void testSessionHeadersAdded() throws Exception {
+        // setup
+        when(endpoint.areSessionHeadersEnabled()).thenReturn(true);
+        testObj.start();
+        ServerMessage cometdMessage = mock(ServerMessage.class);
+        Exchange exchange = mock(Exchange.class);
+        when(endpoint.createExchange()).thenReturn(exchange);
+        ArgumentCaptor<Message> transferredMessage = 
ArgumentCaptor.forClass(Message.class);
+
+        // act
+        testObj.getConsumerService().push(remote, "channelName", 
cometdMessage, "messageId");
+
+        // verify
+        verify(exchange).setIn(transferredMessage.capture());
+        Message message = transferredMessage.getValue();
+        assertEquals(MEMEBER_USER_NAME, message.getHeader(USER_NAME));
+    }
 }
+
+
+

Modified: 
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerTest.java?rev=1336283&r1=1336282&r2=1336283&view=diff
==============================================================================
--- 
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerTest.java
 (original)
+++ 
camel/trunk/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdProducerConsumerTest.java
 Wed May  9 16:26:07 2012
@@ -25,6 +25,11 @@ import org.apache.camel.builder.RouteBui
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit4.CamelTestSupport;
+import org.cometd.bayeux.server.BayeuxServer;
+import org.cometd.bayeux.server.SecurityPolicy;
+import org.cometd.bayeux.server.ServerChannel;
+import org.cometd.bayeux.server.ServerMessage;
+import org.cometd.bayeux.server.ServerSession;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -33,6 +38,7 @@ import org.junit.Test;
  */
 public class CometdProducerConsumerTest extends CamelTestSupport {
 
+    private static final String SHOOKHANDS_SESSION_HEADER = "Shookhands";
     private int port;
     private String uri;
 
@@ -90,6 +96,22 @@ public class CometdProducerConsumerTest 
         CometdEndpoint cometdEndpoint = (CometdEndpoint)result;
         assertTrue(cometdEndpoint.areSessionHeadersEnabled());
     }
+    
+    @Test
+    public void testSessionInformationTransferred() throws Exception {
+        // act
+        template.sendBody("direct:input", "message");
+
+        // assert
+        MockEndpoint ep = context.getEndpoint("mock:test", MockEndpoint.class);
+        List<Exchange> exchanges = ep.getReceivedExchanges();
+        assertTrue(exchanges.size() > 0);
+        for (Exchange exchange : exchanges) {
+            Message message = exchange.getIn();
+            assertTrue((Boolean)message.getHeader(SHOOKHANDS_SESSION_HEADER));
+        }
+    }
+
 
     @Override
     @Before
@@ -106,11 +128,44 @@ public class CometdProducerConsumerTest 
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
+                CometdComponent component = context.getComponent("cometd", 
CometdComponent.class);
+                // The security policy is used to set session attributes.
+                component.setSecurityPolicy(createTestSecurityPolicy());
                 from("direct:input").to(uri);
-
                 from(uri).to("mock:test");
             }
         };
+
+    }
+
+    private SecurityPolicy createTestSecurityPolicy() {
+        return new SecurityPolicy() {
+
+            @Override
+            public boolean canSubscribe(BayeuxServer server, ServerSession 
session, ServerChannel channel,
+                                        ServerMessage message) {
+                session.setAttribute("Subscribed", true);
+                return true;
+            }
+
+            @Override
+            public boolean canPublish(BayeuxServer server, ServerSession 
session, ServerChannel channel,
+                                      ServerMessage message) {
+                return true;
+            }
+
+            @Override
+            public boolean canHandshake(BayeuxServer server, ServerSession 
session, ServerMessage message) {
+                session.setAttribute(SHOOKHANDS_SESSION_HEADER, true);
+                return true;
+            }
+
+            @Override
+            public boolean canCreate(BayeuxServer server, ServerSession 
session, String channelId,
+                                     ServerMessage message) {
+                return true;
+            }
+        };
     }
 
     public static class Person {


Reply via email to