You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2008/01/17 15:32:42 UTC
svn commit: r612828 - in /activemq/trunk/activemq-core/src:
main/java/org/apache/activemq/broker/
test/java/org/apache/activemq/broker/message/
test/java/org/apache/activemq/broker/message/security/
test/java/org/apache/activemq/camel/
Author: jstrachan
Date: Thu Jan 17 06:31:03 2008
New Revision: 612828
URL: http://svn.apache.org/viewvc?rev=612828&view=rev
Log:
added a test case and fix for AMQ-775 along with a useful base class for testing ActiveMQ using Camel
Added:
activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/message/
activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/message/security/
activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/message/security/MessageAuthenticationTest.java (with props)
activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/CamelEmbeddedBrokerTestSupport.java (with props)
Modified:
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/TransportConnection.java
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/TransportConnector.java
Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/TransportConnection.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/TransportConnection.java?rev=612828&r1=612827&r2=612828&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/TransportConnection.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/TransportConnection.java Thu Jan 17 06:31:03 2008
@@ -162,6 +162,7 @@
TaskRunnerFactory taskRunnerFactory) {
this.connector = connector;
this.broker = broker;
+ this.messageAuthorizationPolicy = connector.getMessageAuthorizationPolicy();
RegionBroker rb = (RegionBroker)broker.getAdaptor(RegionBroker.class);
brokerConnectionStates = rb.getConnectionStates();
if (connector != null) {
@@ -638,16 +639,17 @@
// Setup the context.
String clientId = info.getClientId();
context = new ConnectionContext();
- context.setConnection(this);
context.setBroker(broker);
+ context.setClientId(clientId);
+ context.setClientMaster(info.isClientMaster());
+ context.setConnection(this);
+ context.setConnectionId(info.getConnectionId());
context.setConnector(connector);
+ context.setMessageAuthorizationPolicy(getMessageAuthorizationPolicy());
+ context.setNetworkConnection(networkConnection);
context.setTransactions(new ConcurrentHashMap<TransactionId, Transaction>());
- context.setClientId(clientId);
context.setUserName(info.getUserName());
- context.setConnectionId(info.getConnectionId());
- context.setClientMaster(info.isClientMaster());
context.setWireFormatInfo(wireFormatInfo);
- context.setNetworkConnection(networkConnection);
this.manageable = info.isManageable();
state.setContext(context);
state.setConnection(this);
Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/TransportConnector.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/TransportConnector.java?rev=612828&r1=612827&r2=612828&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/TransportConnector.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/TransportConnector.java Thu Jan 17 06:31:03 2008
@@ -96,14 +96,18 @@
*/
public ManagedTransportConnector asManagedConnector(MBeanServer mbeanServer, ObjectName connectorName) throws IOException, URISyntaxException {
ManagedTransportConnector rc = new ManagedTransportConnector(mbeanServer, connectorName, getBroker(), getServer());
+ //rc.setBroker(getBroker());
+ rc.setBrokerInfo(getBrokerInfo());
+ rc.setConnectUri(getConnectUri());
+ rc.setDisableAsyncDispatch(isDisableAsyncDispatch());
+ rc.setDiscoveryAgent(getDiscoveryAgent());
+ rc.setDiscoveryUri(getDiscoveryUri());
+ rc.setEnableStatusMonitor(isEnableStatusMonitor());
+ rc.setMessageAuthorizationPolicy(getMessageAuthorizationPolicy());
+ rc.setName(getName());
+ //rc.setServer(getServer());
rc.setTaskRunnerFactory(getTaskRunnerFactory());
- rc.setUri(uri);
- rc.setConnectUri(connectUri);
- rc.setDiscoveryAgent(discoveryAgent);
- rc.setDiscoveryUri(discoveryUri);
- rc.setName(name);
- rc.setDisableAsyncDispatch(disableAsyncDispatch);
- rc.setBrokerInfo(brokerInfo);
+ rc.setUri(getUri());
return rc;
}
Added: activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/message/security/MessageAuthenticationTest.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/message/security/MessageAuthenticationTest.java?rev=612828&view=auto
==============================================================================
--- activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/message/security/MessageAuthenticationTest.java (added)
+++ activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/message/security/MessageAuthenticationTest.java Thu Jan 17 06:31:03 2008
@@ -0,0 +1,74 @@
+/**
+ *
+ * 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.activemq.broker.message.security;
+
+import java.io.IOException;
+
+import org.apache.activemq.broker.BrokerService;
+import org.apache.activemq.broker.ConnectionContext;
+import org.apache.activemq.camel.CamelEmbeddedBrokerTestSupport;
+import org.apache.activemq.command.Message;
+import org.apache.activemq.security.MessageAuthorizationPolicy;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version $Revision: 1.1 $
+ */
+public class MessageAuthenticationTest extends CamelEmbeddedBrokerTestSupport {
+ public void testSendInvalidMessage() throws Exception {
+ MockEndpoint results = getMockEndpoint("mock:results");
+ results.expectedBodiesReceived("validBody");
+
+ template.sendBodyAndHeader("activemq:MyQueue", "invalidBody", "myHeader", "xyz");
+ template.sendBodyAndHeader("activemq:MyQueue", "validBody", "myHeader", "abc");
+
+ assertMockEndpointsSatisifed();
+ }
+
+ @Override
+ protected BrokerService createBroker() throws Exception {
+ BrokerService answer = new BrokerService();
+ answer.setPersistent(false);
+ answer.setMessageAuthorizationPolicy(new MessageAuthorizationPolicy() {
+ public boolean isAllowedToConsume(ConnectionContext context, Message message) {
+ try {
+ Object value = message.getProperty("myHeader");
+ return "abc".equals(value);
+ }
+ catch (IOException e) {
+ System.out.println("Caught: " + e);
+ e.printStackTrace();
+ return false;
+ }
+ }
+ });
+ answer.addConnector(bindAddress);
+ return answer;
+ }
+
+ @Override
+ protected void addCamelRoutes(CamelContext camelContext) throws Exception {
+ camelContext.addRoutes(new RouteBuilder() {
+ public void configure() throws Exception {
+ from("activemq:MyQueue").to("mock:results");
+ }
+ });
+ }
+}
Propchange: activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/message/security/MessageAuthenticationTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/CamelEmbeddedBrokerTestSupport.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/CamelEmbeddedBrokerTestSupport.java?rev=612828&view=auto
==============================================================================
--- activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/CamelEmbeddedBrokerTestSupport.java (added)
+++ activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/CamelEmbeddedBrokerTestSupport.java Thu Jan 17 06:31:03 2008
@@ -0,0 +1,145 @@
+/**
+ *
+ * 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.activemq.camel;
+
+import java.util.Hashtable;
+
+import javax.naming.Context;
+
+import org.apache.activemq.EmbeddedBrokerTestSupport;
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelTemplate;
+import org.apache.camel.Exchange;
+import org.apache.camel.Endpoint;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.util.jndi.JndiContext;
+
+/**
+ * A helper class for test cases which use an embedded broker and use Camel to do the routing
+ *
+ * @version $Revision: 1.1 $
+ */
+public abstract class CamelEmbeddedBrokerTestSupport extends EmbeddedBrokerTestSupport {
+ protected CamelContext camelContext;
+ protected CamelTemplate<Exchange> template;
+
+ @Override
+ protected void setUp() throws Exception {
+ bindAddress = "tcp://localhost:61616";
+ super.setUp();
+ camelContext = createCamelContext();
+ addCamelRoutes(camelContext);
+ assertValidContext(camelContext);
+ camelContext.start();
+ template = new CamelTemplate<Exchange>(camelContext);
+ template.start();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+
+ if (template != null) {
+ template.stop();
+ }
+ if (camelContext != null) {
+ camelContext.stop();
+ }
+ }
+
+
+ protected CamelContext createCamelContext() throws Exception {
+ return new DefaultCamelContext(createJndiContext());
+ }
+
+ protected Context createJndiContext() throws Exception {
+ return new JndiContext(new Hashtable());
+ }
+
+ protected void addCamelRoutes(CamelContext camelContext) throws Exception {
+ }
+
+
+
+ /**
+ * Resolves a mandatory endpoint for the given URI or an exception is thrown
+ *
+ * @param uri the Camel <a href="">URI</a> to use to create or resolve an endpoint
+ * @return the endpoint
+ */
+ protected Endpoint resolveMandatoryEndpoint(String uri) {
+ return resolveMandatoryEndpoint(camelContext, uri);
+ }
+
+ /**
+ * Resolves a mandatory endpoint for the given URI and expected type or an exception is thrown
+ *
+ * @param uri the Camel <a href="">URI</a> to use to create or resolve an endpoint
+ * @return the endpoint
+ */
+ protected <T extends Endpoint> T resolveMandatoryEndpoint(String uri, Class<T> endpointType) {
+ return resolveMandatoryEndpoint(camelContext, uri, endpointType);
+ }
+
+
+ /**
+ * Resolves an endpoint and asserts that it is found
+ */
+ protected Endpoint resolveMandatoryEndpoint(CamelContext context, String uri) {
+ Endpoint endpoint = context.getEndpoint(uri);
+
+ assertNotNull("No endpoint found for URI: " + uri, endpoint);
+
+ return endpoint;
+ }
+
+ /**
+ * Resolves an endpoint and asserts that it is found
+ */
+ protected <T extends Endpoint> T resolveMandatoryEndpoint(CamelContext context, String uri,
+ Class<T> endpointType) {
+ T endpoint = context.getEndpoint(uri, endpointType);
+
+ assertNotNull("No endpoint found for URI: " + uri, endpoint);
+
+ return endpoint;
+ }
+
+ /**
+ * Resolves the mandatory Mock endpoint using a URI of the form <code>mock:someName</code>
+ *
+ * @param uri the URI which typically starts with "mock:" and has some name
+ * @return the mandatory mock endpoint or an exception is thrown if it could not be resolved
+ */
+ protected MockEndpoint getMockEndpoint(String uri) {
+ return resolveMandatoryEndpoint(uri, MockEndpoint.class);
+ }
+
+
+ /**
+ * Asserts that all the expectations of the Mock endpoints are valid
+ */
+ protected void assertMockEndpointsSatisifed() throws InterruptedException {
+ MockEndpoint.assertIsSatisfied(camelContext);
+ }
+
+ protected void assertValidContext(CamelContext context) {
+ assertNotNull("No context found!", context);
+ }
+}
Propchange: activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/CamelEmbeddedBrokerTestSupport.java
------------------------------------------------------------------------------
svn:eol-style = native