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 {