activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From clebertsuco...@apache.org
Subject [50/52] [abbrv] [partial] activemq-artemis git commit: ARTEMIS-127 Adding activemq unit test module to Artemis
Date Tue, 09 Jun 2015 16:37:21 GMT
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 192a372..bb54458 100644
--- a/pom.xml
+++ b/pom.xml
@@ -70,6 +70,7 @@
       <skipPerformanceTests>true</skipPerformanceTests>
       <skipConcurrentTests>true</skipConcurrentTests>
       <skipRestTests>true</skipRestTests>
+      <skipActiveMQ5Tests>true</skipActiveMQ5Tests>
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 
@@ -949,6 +950,12 @@
                   <exclude>**/org/apache/activemq/artemis/utils/json/**</exclude>
                   <exclude>**/org/apache/activemq/artemis/utils/Base64.java</exclude>
                   <exclude>ratReport.txt</exclude>
+                  <!-- activemq5 unit tests exclude -->
+                  <exclude>**/*.data</exclude>
+                  <exclude>**/*.bin</exclude>
+                  <exclude>**/src/test/resources/keystore</exclude>
+                  <exclude>**/*.log</exclude>
+                  <exclude>**/*.redo</exclude>
                </excludes>
             </configuration>
             <executions>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/README.md
----------------------------------------------------------------------
diff --git a/tests/activemq5-unit-tests/README.md b/tests/activemq5-unit-tests/README.md
new file mode 100644
index 0000000..99e17b8
--- /dev/null
+++ b/tests/activemq5-unit-tests/README.md
@@ -0,0 +1,15 @@
+# ActiveMQ 5 unit tests against ActiveMQ Artemis wrapper
+
+
+This maven module is used to run ActiveMQ5 unit tests against
+ActiveMQ Artemis broker.
+
+The Artemis broker is 'wrapped' in BrokerService and the unit
+tests are slightly modified.
+
+Then run the tests simply do
+
+```mvn -DskipActiveMQTests=false clean test```
+
+It will kickoff the whole test suite.
+

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/pom.xml
----------------------------------------------------------------------
diff --git a/tests/activemq5-unit-tests/pom.xml b/tests/activemq5-unit-tests/pom.xml
new file mode 100644
index 0000000..d6d87e8
--- /dev/null
+++ b/tests/activemq5-unit-tests/pom.xml
@@ -0,0 +1,387 @@
+<!--
+  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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+   <modelVersion>4.0.0</modelVersion>
+
+   <parent>
+      <groupId>org.apache.activemq.tests</groupId>
+      <artifactId>artemis-tests-pom</artifactId>
+      <version>1.0.0-SNAPSHOT</version>
+   </parent>
+
+   <artifactId>activemq5-unit-tests</artifactId>
+   <packaging>jar</packaging>
+   <name>ActiveMQ5.x unit tests</name>
+
+   <properties>
+      <activemq.basedir>${project.basedir}/../..</activemq.basedir>
+      <activemq5.project.version>5.11.1</activemq5.project.version>
+      <jmdns-version>3.4.1</jmdns-version>
+      <ftpserver-version>1.0.6</ftpserver-version>
+      <jmock-version>2.5.1</jmock-version>
+      <spring-version>3.2.11.RELEASE</spring-version>
+      <org-apache-derby-version>10.11.1.1</org-apache-derby-version>
+      <commons-io-version>2.4</commons-io-version>
+      <commons-net-version>3.3</commons-net-version>
+      <qpid-jms-version>0.30</qpid-jms-version>
+      <xbean-version>3.18</xbean-version>
+      <hamcrest-version>1.3</hamcrest-version>
+      <slf4j-version>1.7.10</slf4j-version>
+      <jasypt-version>1.9.2</jasypt-version>
+      <directory-version>2.0.0-M6</directory-version>
+      <activeio-core-version>3.1.4</activeio-core-version>
+      
+   </properties>
+
+   <dependencies>
+
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>activemq-client</artifactId>
+         <version>${activemq5.project.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>activemq-jaas</artifactId>
+         <version>${activemq5.project.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>activemq-broker</artifactId>
+         <version>${activemq5.project.version}</version>
+         <type>test-jar</type>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>activemq-jdbc-store</artifactId>
+         <version>${activemq5.project.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>activemq-kahadb-store</artifactId>
+         <version>${activemq5.project.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>activemq-leveldb-store</artifactId>
+         <version>${activemq5.project.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>activemq-pool</artifactId>
+         <version>${activemq5.project.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>activemq-spring</artifactId>
+         <version>${activemq5.project.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>activemq-partition</artifactId>
+         <version>${activemq5.project.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>activemq-stomp</artifactId>
+         <version>${activemq5.project.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>activemq-console</artifactId>
+         <version>${activemq5.project.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>activeio-core</artifactId>
+         <version>${activeio-core-version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>junit</groupId>
+         <artifactId>junit</artifactId>
+         <version>4.11</version>
+         <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.osgi</groupId>
+        <artifactId>org.osgi.core</artifactId>
+        <version>4.3.1</version>
+      </dependency>
+
+      <dependency>
+         <groupId>javax.jmdns</groupId>
+         <artifactId>jmdns</artifactId>
+         <version>${jmdns-version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.ftpserver</groupId>
+         <artifactId>ftpserver-core</artifactId>
+         <version>${ftpserver-version}</version>
+         <scope>test</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.jmock</groupId>
+        <artifactId>jmock-junit4</artifactId>
+        <version>${jmock-version}</version>
+        <scope>test</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>org.jmock</groupId>
+         <artifactId>jmock-legacy</artifactId>
+         <version>${jmock-version}</version>
+         <scope>test</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>org.springframework</groupId>
+         <artifactId>spring-jms</artifactId>
+         <version>${spring-version}</version>
+         <scope>test</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.derby</groupId>
+         <artifactId>derby</artifactId>
+         <version>${org-apache-derby-version}</version>
+         <scope>test</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>commons-io</groupId>
+         <artifactId>commons-io</artifactId>
+         <version>${commons-io-version}</version>
+         <scope>test</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>commons-net</groupId>
+         <artifactId>commons-net</artifactId>
+         <version>${commons-net-version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.qpid</groupId>
+         <artifactId>qpid-amqp-1-0-client-jms</artifactId>
+         <version>${qpid-jms-version}</version>
+         <scope>test</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.xbean</groupId>
+         <artifactId>xbean-spring</artifactId>
+         <version>${xbean-version}</version>
+         <scope>test</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>org.hamcrest</groupId>
+         <artifactId>hamcrest-all</artifactId>
+         <version>${hamcrest-version}</version>
+         <scope>test</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>org.slf4j</groupId>
+         <artifactId>slf4j-log4j12</artifactId>
+         <version>${slf4j-version}</version>
+         <scope>test</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>log4j</groupId>
+         <artifactId>log4j</artifactId>
+         <scope>test</scope>
+       </dependency>
+
+      <dependency>
+         <groupId>org.springframework</groupId>
+         <artifactId>spring-test</artifactId>
+         <version>${spring-version}</version>
+         <scope>test</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>org.jasypt</groupId>
+         <artifactId>jasypt</artifactId>
+         <version>${jasypt-version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.jasypt</groupId>
+         <artifactId>jasypt-spring31</artifactId>
+         <version>${jasypt-version}</version>
+         <optional>true</optional>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.directory.server</groupId>
+         <artifactId>apacheds-core-integ</artifactId>
+         <version>${directory-version}</version>
+         <scope>test</scope>
+         <exclusions>
+            <exclusion>
+               <groupId>bouncycastle</groupId>
+               <artifactId>bcprov-jdk15</artifactId>
+            </exclusion>
+         </exclusions>
+      </dependency>
+
+      <dependency>
+         <groupId>org.bouncycastle</groupId>
+         <artifactId>bcprov-jdk15</artifactId>
+         <version>1.46</version>
+         <scope>test</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.directory.server</groupId>
+         <artifactId>apacheds-server-integ</artifactId>
+         <version>${directory-version}</version>
+         <scope>test</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>org.fusesource.joram-jms-tests</groupId>
+         <artifactId>joram-jms-tests</artifactId>
+         <version>1.0</version>
+         <scope>test</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>org.easymock</groupId>
+         <artifactId>easymock</artifactId>
+         <version>3.2</version>
+         <scope>test</scope>
+      </dependency>
+
+      <dependency>
+         <groupId>org.fusesource.mqtt-client</groupId>
+         <artifactId>mqtt-client</artifactId>
+         <version>1.10</version>
+         <scope>test</scope>
+      </dependency>
+
+      <!-- artemis modules -->
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>artemis-commons</artifactId>
+         <version>${project.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>artemis-server</artifactId>
+         <version>${project.version}</version>
+      </dependency>
+
+      <dependency>
+         <groupId>org.apache.activemq</groupId>
+         <artifactId>artemis-openwire-protocol</artifactId>
+         <version>${project.version}</version>
+      </dependency>
+
+   </dependencies>
+
+   <build>
+      <plugins>
+         <plugin>
+            <groupId>org.apache.rat</groupId>
+            <artifactId>apache-rat-plugin</artifactId>
+            <version>0.11</version>
+            <configuration>
+               <reportFile>${activemq.basedir}/ratReport.txt</reportFile>
+               <skip>${skipLicenseCheck}</skip>
+               <excludes>
+                  <exclude>**/*.data</exclude>
+                  <exclude>**/*.bin</exclude>
+                  <exclude>**/*.log</exclude>
+                  <exclude>**/*.redo</exclude>
+                  <exclude>**/src/test/resources/keystore</exclude>
+                  <exclude>**/META-INF/services/*</exclude>
+                  <exclude>**/*/*.txt</exclude>
+                  <exclude>**/*.md</exclude>
+               </excludes>
+            </configuration>
+            <executions>
+               <execution>
+                  <phase>compile</phase>
+                  <goals>
+                     <goal>check</goal>
+                  </goals>
+               </execution>
+            </executions>
+         </plugin>
+
+         <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-checkstyle-plugin</artifactId>
+            <version>2.12</version>
+            <configuration>
+               <skip>true</skip>
+            </configuration>
+            <executions>
+               <execution>
+                  <phase>compile</phase>
+                  <goals>
+                     <goal>check</goal>
+                  </goals>
+               </execution>
+            </executions>
+         </plugin>
+
+         <plugin>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>maven-bundle-plugin</artifactId>
+            <version>2.5.3</version>
+            <inherited>true</inherited>
+            <extensions>true</extensions>
+            <configuration>
+               <instructions>
+                  <Bundle-Activator>org.apache.activemq.util.osgi.Activator</Bundle-Activator>
+               </instructions>
+            </configuration>
+         </plugin>
+
+         <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <configuration>
+               <skipTests>${skipActiveMQ5Tests}</skipTests>
+            </configuration>
+         </plugin>
+ 
+      </plugins>
+   </build>
+
+</project>
+

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/artemiswrapper/ArtemisBrokerHelper.java
----------------------------------------------------------------------
diff --git a/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/artemiswrapper/ArtemisBrokerHelper.java b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/artemiswrapper/ArtemisBrokerHelper.java
new file mode 100644
index 0000000..8d5cdab
--- /dev/null
+++ b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/artemiswrapper/ArtemisBrokerHelper.java
@@ -0,0 +1,76 @@
+/**
+ * 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.artemiswrapper;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.URI;
+
+import org.apache.activemq.command.ActiveMQDestination;
+
+public class ArtemisBrokerHelper {
+
+   private static volatile Object service = null;
+   private static Class<?> serviceClass;
+
+   static {
+      try {
+         serviceClass = Class.forName("org.apache.activemq.broker.BrokerService");
+      } catch (ClassNotFoundException e) {
+         e.printStackTrace();
+      }
+
+   }
+   // start a tcp transport artemis broker, the broker need to
+   // be invm with client.
+   public static void startArtemisBroker(URI location) throws IOException {
+      if (service != null) {
+         return;
+      }
+      try {
+         service = serviceClass.newInstance();
+         Method startMethod = serviceClass.getMethod("start");
+         startMethod.invoke(service, (Object[]) null);
+      } catch (InstantiationException e) {
+         throw new IOException("Inst exception", e);
+      } catch (IllegalAccessException e) {
+         throw new IOException("IllegalAccess exception ", e);
+      } catch (NoSuchMethodException e) {
+         throw new IOException("Nosuchmethod", e);
+      } catch (SecurityException e) {
+         throw new IOException("Security exception", e);
+      } catch (IllegalArgumentException e) {
+         throw new IOException("IllegalArgumentException exception", e);
+      } catch (InvocationTargetException e) {
+         throw new IOException("InvocationTargetException exception", e);
+      }
+   }
+
+   public static void makeSureDestinationExists(ActiveMQDestination activemqDestination) throws Exception {
+      Method startMethod = serviceClass.getMethod("makeSureDestinationExists", ActiveMQDestination.class);
+      startMethod.invoke(service, activemqDestination);
+   }
+
+   //some tests run broker in setUp(). This need be called
+   //to prevent auto broker creation.
+   public static void setBroker(Object startedBroker) {
+      service = startedBroker;
+   }
+
+}
+

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/BrokerService.java
----------------------------------------------------------------------
diff --git a/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/BrokerService.java b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/BrokerService.java
new file mode 100644
index 0000000..cf9c939
--- /dev/null
+++ b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/BrokerService.java
@@ -0,0 +1,811 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.UnknownHostException;
+import java.security.Provider;
+import java.security.Security;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.RejectedExecutionHandler;
+import java.util.concurrent.SynchronousQueue;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+
+import org.apache.activemq.ActiveMQConnectionMetaData;
+import org.apache.activemq.ConfigurationException;
+import org.apache.activemq.Service;
+import org.apache.activemq.advisory.AdvisoryBroker;
+import org.apache.activemq.broker.artemiswrapper.ArtemisBrokerWrapper;
+import org.apache.activemq.broker.cluster.ConnectionSplitBroker;
+import org.apache.activemq.broker.jmx.AnnotatedMBean;
+import org.apache.activemq.broker.jmx.BrokerMBeanSupport;
+import org.apache.activemq.broker.jmx.BrokerView;
+import org.apache.activemq.broker.jmx.ConnectorView;
+import org.apache.activemq.broker.jmx.ConnectorViewMBean;
+import org.apache.activemq.broker.jmx.HealthView;
+import org.apache.activemq.broker.jmx.HealthViewMBean;
+import org.apache.activemq.broker.jmx.JmsConnectorView;
+import org.apache.activemq.broker.jmx.JobSchedulerView;
+import org.apache.activemq.broker.jmx.JobSchedulerViewMBean;
+import org.apache.activemq.broker.jmx.Log4JConfigView;
+import org.apache.activemq.broker.jmx.ManagedRegionBroker;
+import org.apache.activemq.broker.jmx.ManagementContext;
+import org.apache.activemq.broker.jmx.NetworkConnectorView;
+import org.apache.activemq.broker.jmx.NetworkConnectorViewMBean;
+import org.apache.activemq.broker.jmx.ProxyConnectorView;
+import org.apache.activemq.broker.region.CompositeDestinationInterceptor;
+import org.apache.activemq.broker.region.Destination;
+import org.apache.activemq.broker.region.DestinationFactory;
+import org.apache.activemq.broker.region.DestinationFactoryImpl;
+import org.apache.activemq.broker.region.DestinationInterceptor;
+import org.apache.activemq.broker.region.RegionBroker;
+import org.apache.activemq.broker.region.policy.PolicyMap;
+import org.apache.activemq.broker.region.virtual.MirroredQueue;
+import org.apache.activemq.broker.region.virtual.VirtualDestination;
+import org.apache.activemq.broker.region.virtual.VirtualDestinationInterceptor;
+import org.apache.activemq.broker.region.virtual.VirtualTopic;
+import org.apache.activemq.broker.scheduler.JobSchedulerStore;
+import org.apache.activemq.broker.scheduler.SchedulerBroker;
+import org.apache.activemq.broker.scheduler.memory.InMemoryJobSchedulerStore;
+import org.apache.activemq.command.ActiveMQDestination;
+import org.apache.activemq.command.ActiveMQQueue;
+import org.apache.activemq.command.BrokerId;
+import org.apache.activemq.command.ProducerInfo;
+import org.apache.activemq.filter.DestinationFilter;
+import org.apache.activemq.network.ConnectionFilter;
+import org.apache.activemq.network.DiscoveryNetworkConnector;
+import org.apache.activemq.network.NetworkConnector;
+import org.apache.activemq.network.jms.JmsConnector;
+import org.apache.activemq.openwire.OpenWireFormat;
+import org.apache.activemq.proxy.ProxyConnector;
+import org.apache.activemq.security.MessageAuthorizationPolicy;
+import org.apache.activemq.selector.SelectorParser;
+import org.apache.activemq.store.JournaledStore;
+import org.apache.activemq.store.PListStore;
+import org.apache.activemq.store.PersistenceAdapter;
+import org.apache.activemq.store.PersistenceAdapterFactory;
+import org.apache.activemq.store.memory.MemoryPersistenceAdapter;
+import org.apache.activemq.thread.Scheduler;
+import org.apache.activemq.thread.TaskRunnerFactory;
+import org.apache.activemq.transport.TransportFactorySupport;
+import org.apache.activemq.transport.TransportServer;
+import org.apache.activemq.transport.vm.VMTransportFactory;
+import org.apache.activemq.usage.SystemUsage;
+import org.apache.activemq.util.BrokerSupport;
+import org.apache.activemq.util.DefaultIOExceptionHandler;
+import org.apache.activemq.util.IOExceptionHandler;
+import org.apache.activemq.util.IOExceptionSupport;
+import org.apache.activemq.util.IOHelper;
+import org.apache.activemq.util.InetAddressUtil;
+import org.apache.activemq.util.ServiceStopper;
+import org.apache.activemq.util.ThreadPoolUtils;
+import org.apache.activemq.util.TimeUtils;
+import org.apache.activemq.util.URISupport;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+
+/**
+ * Manages the life-cycle of an ActiveMQ Broker. A BrokerService consists of a
+ * number of transport connectors, network connectors and a bunch of properties
+ * which can be used to configure the broker as its lazily created.
+ *
+ * @org.apache.xbean.XBean
+ */
+public class BrokerService implements Service
+{
+   public static final String DEFAULT_PORT = "61616";
+   public static final String DEFAULT_BROKER_NAME = "localhost";
+   public static final String BROKER_VERSION;
+   public static final int DEFAULT_MAX_FILE_LENGTH = 1024 * 1024 * 32;
+   public static final long DEFAULT_START_TIMEOUT = 600000L;
+
+   public String SERVER_SIDE_KEYSTORE;
+   public String KEYSTORE_PASSWORD;
+   public String SERVER_SIDE_TRUSTSTORE;
+   public String TRUSTSTORE_PASSWORD;
+   public String storeType;
+
+   private static final Logger LOG = LoggerFactory.getLogger(BrokerService.class);
+
+   @SuppressWarnings("unused")
+   private static final long serialVersionUID = 7353129142305630237L;
+
+   private String brokerName = DEFAULT_BROKER_NAME;
+   private Broker broker;
+   private BrokerId brokerId;
+   private Throwable startException = null;
+   private boolean startAsync = false;
+   public Set<Integer> extraConnectors = new HashSet<Integer>();
+   private File dataDirectoryFile;
+
+   static
+   {
+      InputStream in;
+      String version = null;
+      if ((in = BrokerService.class.getResourceAsStream("/org/apache/activemq/version.txt")) != null)
+      {
+         BufferedReader reader = new BufferedReader(new InputStreamReader(in));
+         try
+         {
+            version = reader.readLine();
+         }
+         catch (Exception e)
+         {
+         }
+      }
+      BROKER_VERSION = version;
+   }
+
+   @Override
+   public String toString()
+   {
+      return "BrokerService[" + getBrokerName() + "]";
+   }
+
+   private String getBrokerVersion()
+   {
+      String version = ActiveMQConnectionMetaData.PROVIDER_VERSION;
+      if (version == null)
+      {
+         version = BROKER_VERSION;
+      }
+
+      return version;
+   }
+
+
+   @Override
+   public void start() throws Exception
+   {
+      startBroker(startAsync);
+   }
+
+   private void startBroker(boolean async) throws Exception
+   {
+      if (async)
+      {
+         new Thread("Broker Starting Thread")
+         {
+            @Override
+            public void run()
+            {
+               try
+               {
+                  doStartBroker();
+               }
+               catch (Throwable t)
+               {
+                  startException = t;
+               }
+            }
+         }.start();
+      }
+      else
+      {
+         doStartBroker();
+      }
+   }
+
+   private void doStartBroker() throws Exception
+   {
+      if (startException != null)
+      {
+         return;
+      }
+
+      broker = getBroker();
+      brokerId = broker.getBrokerId();
+
+      LOG.info("Apache ActiveMQ Artemis Wrapper {} ({}, {}) is starting", new Object[]{getBrokerVersion(), getBrokerName(), brokerId});
+
+      try
+      {
+         broker.start();
+      }
+      catch (Exception e)
+      {
+         throw e;
+      }
+      catch (Throwable t)
+      {
+         throw new Exception(t);
+      }
+
+      LOG.info("Apache ActiveMQ Artemis Wrapper {} ({}, {}) started", new Object[]{getBrokerVersion(), getBrokerName(), brokerId});
+      LOG.info("For help or more information please see: http://activemq.apache.org");
+
+   }
+
+
+   /**
+    * @throws Exception
+    * @org.apache .xbean.DestroyMethod
+    */
+   @Override
+   public void stop() throws Exception
+   {
+
+      LOG.info("Apache ActiveMQ Artemis{} ({}, {}) is shutting down", new Object[]{getBrokerVersion(), getBrokerName(), brokerId});
+
+      if (broker != null)
+      {
+         broker.stop();
+         broker = null;
+      }
+      LOG.info("Apache ActiveMQ Artemis {} ({}, {}) is shutdown", new Object[]{getBrokerVersion(), getBrokerName(), brokerId});
+   }
+
+   // Properties
+   // -------------------------------------------------------------------------
+
+   /**
+    * Returns the message broker
+    */
+   public Broker getBroker() throws Exception
+   {
+      if (broker == null)
+      {
+         broker = createBroker();
+      }
+      return broker;
+   }
+
+   public String getBrokerName()
+   {
+      return brokerName;
+   }
+
+   /**
+    * Sets the name of this broker; which must be unique in the network
+    *
+    * @param brokerName
+    */
+   public void setBrokerName(String brokerName)
+   {
+      if (brokerName == null)
+      {
+         throw new NullPointerException("The broker name cannot be null");
+      }
+      String str = brokerName.replaceAll("[^a-zA-Z0-9\\.\\_\\-\\:]", "_");
+      if (!str.equals(brokerName))
+      {
+         LOG.error("Broker Name: {} contained illegal characters - replaced with {}", brokerName, str);
+      }
+      this.brokerName = str.trim();
+   }
+
+   /**
+    * Factory method to create a new broker
+    *
+    * @throws Exception
+    * @throws
+    * @throws
+    */
+   protected Broker createBroker() throws Exception
+   {
+      broker = createBrokerWrapper();
+      return broker;
+   }
+
+   private Broker createBrokerWrapper()
+   {
+      return new ArtemisBrokerWrapper(this);
+   }
+
+   public void makeSureDestinationExists(ActiveMQDestination activemqDestination) throws Exception
+   {
+      System.out.println(">>>> making sure dest exits: " + activemqDestination);
+      ArtemisBrokerWrapper hqBroker = (ArtemisBrokerWrapper) this.broker;
+      //it can be null
+      if (activemqDestination == null)
+      {
+         return;
+      }
+      if (activemqDestination.isQueue())
+      {
+         String qname = activemqDestination.getPhysicalName();
+         System.out.println("physical name: " + qname);
+         hqBroker.makeSureQueueExists(qname);
+      }
+   }
+
+   public boolean enableSsl()
+   {
+      return this.SERVER_SIDE_KEYSTORE != null;
+   }
+
+   //below are methods called directly by tests
+   //we don't actually implement any of these for now,
+   //just to make test compile pass.
+
+   //we may get class cast exception as in TestSupport it
+   //casts the broker to RegionBroker, which we didn't
+   //implement (wrap) yet. Consider solving it later.
+   public Broker getRegionBroker()
+   {
+      return broker;
+   }
+
+   public void setPersistenceAdapter(PersistenceAdapter persistenceAdapter) throws IOException
+   {
+   }
+
+   public File getDataDirectoryFile()
+   {
+      if (dataDirectoryFile == null)
+      {
+         dataDirectoryFile = new File(IOHelper.getDefaultDataDirectory());
+      }
+      return dataDirectoryFile;
+   }
+
+   public File getBrokerDataDirectory()
+   {
+      String brokerDir = getBrokerName();
+      return new File(getDataDirectoryFile(), brokerDir);
+   }
+
+   public PersistenceAdapter getPersistenceAdapter() throws IOException
+   {
+      return null;
+   }
+
+   public void waitUntilStopped()
+   {
+   }
+
+   public boolean waitUntilStarted()
+   {
+      return true;
+   }
+
+   public void setDestinationPolicy(PolicyMap policyMap)
+   {
+   }
+
+   public void setDeleteAllMessagesOnStartup(boolean deletePersistentMessagesOnStartup)
+   {
+   }
+
+   public void setUseJmx(boolean useJmx)
+   {
+   }
+
+   public ManagementContext getManagementContext()
+   {
+      return null;
+   }
+
+   public BrokerView getAdminView() throws Exception
+   {
+      return null;
+   }
+
+   public List<TransportConnector> getTransportConnectors()
+   {
+      return new ArrayList<>();
+   }
+
+   public TransportConnector addConnector(String bindAddress) throws Exception
+   {
+      return null;
+   }
+
+   public void setIoExceptionHandler(IOExceptionHandler ioExceptionHandler)
+   {
+   }
+
+   public void setPersistent(boolean persistent)
+   {
+   }
+
+   public boolean isSlave()
+   {
+      return false;
+   }
+
+   public Destination getDestination(ActiveMQDestination destination) throws Exception
+   {
+      return null;
+   }
+
+   public void setAllowTempAutoCreationOnSend(boolean allowTempAutoCreationOnSend)
+   {
+   }
+
+   public void setDedicatedTaskRunner(boolean dedicatedTaskRunner)
+   {
+   }
+
+   public void setAdvisorySupport(boolean advisorySupport)
+   {
+   }
+
+   public void setUseShutdownHook(boolean useShutdownHook)
+   {
+   }
+
+   public void deleteAllMessages() throws IOException
+   {
+   }
+
+   public Service[] getServices()
+   {
+      return null;
+   }
+
+   public void setPopulateUserNameInMBeans(boolean value)
+   {
+   }
+
+   public void setDestinations(ActiveMQDestination[] destinations)
+   {
+   }
+
+   public URI getVmConnectorURI()
+   {
+      return null;
+   }
+
+   public SystemUsage getSystemUsage()
+   {
+      return null;
+   }
+
+   public synchronized PListStore getTempDataStore()
+   {
+      return null;
+   }
+
+   public void setJmsBridgeConnectors(JmsConnector[] jmsConnectors)
+   {
+   }
+
+   public void setDestinationInterceptors(DestinationInterceptor[] destinationInterceptors)
+   {
+   }
+
+   public SslContext getSslContext()
+   {
+      return null;
+   }
+
+   public void setDataDirectory(String dataDirectory)
+   {
+   }
+
+   public void setPlugins(BrokerPlugin[] plugins)
+   {
+   }
+
+   public void setKeepDurableSubsActive(boolean keepDurableSubsActive)
+   {
+   }
+
+   public NetworkConnector addNetworkConnector(String discoveryAddress) throws Exception
+   {
+      return null;
+   }
+
+   public TransportConnector getConnectorByName(String connectorName)
+   {
+      return null;
+   }
+
+   public TransportConnector addConnector(TransportConnector connector) throws Exception
+   {
+      return connector;
+   }
+
+   public void setEnableStatistics(boolean enableStatistics)
+   {
+   }
+
+   public void setSystemUsage(SystemUsage memoryManager)
+   {
+   }
+
+   public void setManagementContext(ManagementContext managementContext)
+   {
+   }
+
+   public void setSchedulerDirectoryFile(File schedulerDirectory)
+   {
+   }
+
+   public List<NetworkConnector> getNetworkConnectors()
+   {
+      return new ArrayList<>();
+   }
+
+   public void setSchedulerSupport(boolean schedulerSupport)
+   {
+   }
+
+   public void setPopulateJMSXUserID(boolean populateJMSXUserID)
+   {
+   }
+
+   public boolean isUseJmx()
+   {
+      return false;
+   }
+
+   public boolean isPersistent()
+   {
+      return false;
+   }
+
+   public TransportConnector getTransportConnectorByScheme(String scheme)
+   {
+      return null;
+   }
+
+   public TaskRunnerFactory getTaskRunnerFactory()
+   {
+      return null;
+   }
+
+   public boolean isStarted()
+   {
+      if (broker == null) return false;
+      return !broker.isStopped();
+   }
+
+   public ProxyConnector addProxyConnector(ProxyConnector connector) throws Exception
+   {
+      return connector;
+   }
+
+   public void setDataDirectoryFile(File dataDirectoryFile)
+   {
+      this.dataDirectoryFile = dataDirectoryFile;
+   }
+
+   public PolicyMap getDestinationPolicy()
+   {
+      return null;
+   }
+
+   public void setTransportConnectorURIs(String[] transportConnectorURIs)
+   {
+   }
+
+   public boolean isPopulateJMSXUserID()
+   {
+      return false;
+   }
+
+   public NetworkConnector getNetworkConnectorByName(String connectorName)
+   {
+      return null;
+   }
+
+   public boolean removeNetworkConnector(NetworkConnector connector)
+   {
+      return true;
+   }
+
+   public void setTransportConnectors(List<TransportConnector> transportConnectors) throws Exception
+   {
+   }
+
+   public NetworkConnector addNetworkConnector(NetworkConnector connector) throws Exception
+   {
+      return connector;
+   }
+
+   public void setTempDataStore(PListStore tempDataStore)
+   {
+   }
+
+   public void setJobSchedulerStore(JobSchedulerStore jobSchedulerStore)
+   {
+   }
+
+   public ObjectName getBrokerObjectName() throws MalformedObjectNameException
+   {
+      return null;
+   }
+
+   public TransportConnector addConnector(URI bindAddress) throws Exception
+   {
+      return null;
+   }
+
+   public void setCacheTempDestinations(boolean cacheTempDestinations)
+   {
+   }
+
+   public void setOfflineDurableSubscriberTimeout(long offlineDurableSubscriberTimeout)
+   {
+   }
+
+   public void setOfflineDurableSubscriberTaskSchedule(long offlineDurableSubscriberTaskSchedule)
+   {
+   }
+
+   public boolean isStopped()
+   {
+      return broker.isStopped();
+   }
+
+   public void setBrokerId(String brokerId)
+   {
+   }
+
+   public BrokerPlugin[] getPlugins()
+   {
+      return null;
+   }
+
+   public void stopAllConnectors(ServiceStopper stopper)
+   {
+   }
+
+   public void setMessageAuthorizationPolicy(MessageAuthorizationPolicy messageAuthorizationPolicy)
+   {
+   }
+
+   public void setNetworkConnectorStartAsync(boolean networkConnectorStartAsync)
+   {
+   }
+
+   public boolean isRestartAllowed()
+   {
+      return true;
+   }
+
+   public void setTaskRunnerFactory(TaskRunnerFactory taskRunnerFactory)
+   {
+   }
+
+   public void start(boolean force) throws Exception
+   {
+      this.start();
+   }
+
+   public void setMonitorConnectionSplits(boolean monitorConnectionSplits)
+   {
+   }
+
+   public void setUseMirroredQueues(boolean useMirroredQueues)
+   {
+   }
+
+   public File getTmpDataDirectory()
+   {
+      return null;
+   }
+
+   public boolean isUseShutdownHook()
+   {
+      return true;
+   }
+
+   public boolean isDeleteAllMessagesOnStartup()
+   {
+      return false;
+   }
+
+   public void setUseVirtualTopics(boolean useVirtualTopics)
+   {
+   }
+
+   public boolean isUseLoggingForShutdownErrors()
+   {
+      return true;
+   }
+
+   public TransportConnector addConnector(TransportServer transport) throws Exception
+   {
+      return null;
+   }
+
+   public synchronized JobSchedulerStore getJobSchedulerStore()
+   {
+      return null;
+   }
+
+   public boolean removeConnector(TransportConnector connector) throws Exception
+   {
+      return true;
+   }
+
+   public ConnectionContext getAdminConnectionContext() throws Exception {
+      return null;
+   }
+
+   public void setUseAuthenticatedPrincipalForJMSXUserID(boolean useAuthenticatedPrincipalForJMSXUserID)
+   {
+   }
+
+   public void setSchedulePeriodForDestinationPurge(int schedulePeriodForDestinationPurge)
+   {
+   }
+
+   public void setMbeanInvocationTimeout(long mbeanInvocationTimeout)
+   {
+   }
+
+   public void setNetworkConnectors(List<?> networkConnectors) throws Exception
+   {
+   }
+
+   public void removeDestination(ActiveMQDestination destination) throws Exception
+   {
+   }
+
+   public void setMaxPurgedDestinationsPerSweep(int maxPurgedDestinationsPerSweep)
+   {
+   }
+
+   public void setBrokerObjectName(ObjectName brokerObjectName)
+   {
+   }
+
+   public Map<String, String> getTransportConnectorURIsAsMap()
+   {
+      return null;
+   }
+
+   public void setSslContext(SslContext sslContext)
+   {
+   }
+
+   public void setPersistenceFactory(PersistenceAdapterFactory persistenceFactory)
+   {
+   }
+
+   protected TransportConnector createTransportConnector(URI brokerURI) throws Exception
+   {
+      return null;
+   }
+
+}
+
+
+

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/SslBrokerService.java
----------------------------------------------------------------------
diff --git a/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/SslBrokerService.java b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/SslBrokerService.java
new file mode 100644
index 0000000..9699cf3
--- /dev/null
+++ b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/SslBrokerService.java
@@ -0,0 +1,61 @@
+/**
+ * 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;
+
+import org.apache.activemq.transport.TransportFactorySupport;
+import org.apache.activemq.transport.TransportServer;
+import org.apache.activemq.transport.tcp.SslTransportFactory;
+
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.TrustManager;
+import java.io.IOException;
+import java.net.URI;
+import java.security.KeyManagementException;
+import java.security.SecureRandom;
+
+/**
+ * A BrokerService that allows access to the key and trust managers used by SSL
+ * connections. There is no reason to use this class unless SSL is being used
+ * AND the key and trust managers need to be specified from within code. In
+ * fact, if the URI passed to this class does not have an "ssl" scheme, this
+ * class will pass all work on to its superclass.
+ * 
+ * @author sepandm@gmail.com (Sepand)
+ */
+public class SslBrokerService extends BrokerService
+{
+
+    public TransportConnector addSslConnector(String bindAddress, KeyManager[] km, TrustManager[] tm, SecureRandom random) throws Exception {
+        return null;
+    }
+
+    public TransportConnector addSslConnector(URI bindAddress, KeyManager[] km, TrustManager[] tm, SecureRandom random) throws Exception {
+        return null;
+    }
+
+    protected TransportServer createSslTransportServer(URI brokerURI, KeyManager[] km, TrustManager[] tm, SecureRandom random) throws IOException, KeyManagementException {
+        return null;
+    }
+
+    //one way
+    public void setupSsl(String keystoreType, String password, String serverKeystore) {
+        this.SERVER_SIDE_KEYSTORE = serverKeystore;
+        this.KEYSTORE_PASSWORD = password;
+        this.storeType = keystoreType;
+    }
+}

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/ArtemisBrokerBase.java
----------------------------------------------------------------------
diff --git a/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/ArtemisBrokerBase.java b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/ArtemisBrokerBase.java
new file mode 100644
index 0000000..227ad1b
--- /dev/null
+++ b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/ArtemisBrokerBase.java
@@ -0,0 +1,674 @@
+/**
+ * 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.artemiswrapper;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ThreadPoolExecutor;
+
+import org.apache.activemq.artemis.api.core.TransportConfiguration;
+import org.apache.activemq.artemis.core.asyncio.impl.AsynchronousFileImpl;
+import org.apache.activemq.artemis.core.config.Configuration;
+import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;
+import org.apache.activemq.artemis.core.remoting.impl.invm.InVMAcceptorFactory;
+import org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptorFactory;
+import org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnectorFactory;
+import org.apache.activemq.artemis.core.server.ActiveMQServer;
+import org.apache.activemq.artemis.core.server.ActiveMQServers;
+import org.apache.activemq.artemis.core.server.JournalType;
+import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy;
+import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
+import org.apache.activemq.broker.Broker;
+import org.apache.activemq.broker.BrokerService;
+import org.apache.activemq.broker.Connection;
+import org.apache.activemq.broker.ConnectionContext;
+import org.apache.activemq.broker.ConsumerBrokerExchange;
+import org.apache.activemq.broker.ProducerBrokerExchange;
+import org.apache.activemq.broker.region.Destination;
+import org.apache.activemq.broker.region.MessageReference;
+import org.apache.activemq.broker.region.Subscription;
+import org.apache.activemq.command.ActiveMQDestination;
+import org.apache.activemq.command.BrokerId;
+import org.apache.activemq.command.BrokerInfo;
+import org.apache.activemq.command.ConnectionInfo;
+import org.apache.activemq.command.ConsumerControl;
+import org.apache.activemq.command.ConsumerInfo;
+import org.apache.activemq.command.DestinationInfo;
+import org.apache.activemq.command.Message;
+import org.apache.activemq.command.MessageAck;
+import org.apache.activemq.command.MessageDispatch;
+import org.apache.activemq.command.MessageDispatchNotification;
+import org.apache.activemq.command.MessagePull;
+import org.apache.activemq.command.ProducerInfo;
+import org.apache.activemq.command.RemoveSubscriptionInfo;
+import org.apache.activemq.command.Response;
+import org.apache.activemq.command.SessionInfo;
+import org.apache.activemq.command.TransactionId;
+import org.apache.activemq.store.PListStore;
+import org.apache.activemq.thread.Scheduler;
+import org.apache.activemq.usage.Usage;
+import org.junit.rules.TemporaryFolder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class ArtemisBrokerBase implements Broker {
+
+	private static final Logger LOG = LoggerFactory
+			.getLogger(ArtemisBrokerBase.class);
+	public static final String INVM_ACCEPTOR_FACTORY = InVMAcceptorFactory.class
+			.getCanonicalName();
+
+	public static final String NETTY_ACCEPTOR_FACTORY = NettyAcceptorFactory.class
+			.getCanonicalName();
+
+	public static final String NETTY_CONNECTOR_FACTORY = NettyConnectorFactory.class
+			.getCanonicalName();
+
+	protected static final String CLUSTER_PASSWORD = "UnitTestsClusterPassword";
+
+	protected volatile boolean stopped;
+	protected BrokerId brokerId = new BrokerId("Artemis Broker");
+	protected BrokerService bservice;
+	protected TemporaryFolder temporaryFolder = new TemporaryFolder();
+	protected String testDir;
+	protected boolean realStore = false;
+
+	protected ActiveMQServer server;
+
+	protected boolean enableSecurity = false;
+
+	public ArtemisBrokerBase() {
+		try {
+			this.temporaryFolder.create();
+		} catch (IOException e) {
+		}
+	}
+	@Override
+	public Destination addDestination(ConnectionContext context,
+			ActiveMQDestination destination, boolean createIfTemporary)
+			throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void removeDestination(ConnectionContext context,
+			ActiveMQDestination destination, long timeout) throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public Map<ActiveMQDestination, Destination> getDestinationMap() {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public Subscription addConsumer(ConnectionContext context, ConsumerInfo info)
+			throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void removeConsumer(ConnectionContext context, ConsumerInfo info)
+			throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void removeSubscription(ConnectionContext context,
+			RemoveSubscriptionInfo info) throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void send(ProducerBrokerExchange producerExchange, Message message)
+			throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void acknowledge(ConsumerBrokerExchange consumerExchange,
+			MessageAck ack) throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public Response messagePull(ConnectionContext context, MessagePull pull)
+			throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void processDispatchNotification(
+			MessageDispatchNotification messageDispatchNotification)
+			throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void gc() {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public Set<Destination> getDestinations(ActiveMQDestination destination) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void processConsumerControl(ConsumerBrokerExchange consumerExchange,
+			ConsumerControl control) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void reapplyInterceptor() {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public Broker getAdaptor(Class type) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public BrokerId getBrokerId() {
+		return brokerId;
+	}
+
+	@Override
+	public String getBrokerName() {
+		return "Artemis Broker";
+	}
+
+	@Override
+	public void addBroker(Connection connection, BrokerInfo info) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void removeBroker(Connection connection, BrokerInfo info) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void addConnection(ConnectionContext context, ConnectionInfo info)
+			throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void removeConnection(ConnectionContext context,
+			ConnectionInfo info, Throwable error) throws Exception {
+		throw new RuntimeException("Don't call me!");
+
+	}
+
+	@Override
+	public void addSession(ConnectionContext context, SessionInfo info)
+			throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void removeSession(ConnectionContext context, SessionInfo info)
+			throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void addProducer(ConnectionContext context, ProducerInfo info)
+			throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void removeProducer(ConnectionContext context, ProducerInfo info)
+			throws Exception {
+		throw new RuntimeException("Don't call me!");
+
+	}
+
+	@Override
+	public Connection[] getClients() throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public ActiveMQDestination[] getDestinations() throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public Map<ActiveMQDestination, Destination> getDestinationMap(
+			ActiveMQDestination destination) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public TransactionId[] getPreparedTransactions(ConnectionContext context)
+			throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void beginTransaction(ConnectionContext context, TransactionId xid)
+			throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public int prepareTransaction(ConnectionContext context, TransactionId xid)
+			throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void rollbackTransaction(ConnectionContext context, TransactionId xid)
+			throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void commitTransaction(ConnectionContext context, TransactionId xid,
+			boolean onePhase) throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void forgetTransaction(ConnectionContext context,
+			TransactionId transactionId) throws Exception {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public BrokerInfo[] getPeerBrokerInfos() {
+		return null;
+	}
+
+	@Override
+	public void preProcessDispatch(MessageDispatch messageDispatch) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void postProcessDispatch(MessageDispatch messageDispatch) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public boolean isStopped() {
+		return stopped;
+	}
+
+	@Override
+	public Set<ActiveMQDestination> getDurableDestinations() {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void addDestinationInfo(ConnectionContext context,
+			DestinationInfo info) throws Exception {
+		throw new RuntimeException("Don't call me!");
+
+	}
+
+	@Override
+	public void removeDestinationInfo(ConnectionContext context,
+			DestinationInfo info) throws Exception {
+		throw new RuntimeException("Don't call me!");
+
+	}
+
+	@Override
+	public boolean isFaultTolerantConfiguration() {
+		return false;
+	}
+
+	@Override
+	public ConnectionContext getAdminConnectionContext() {
+		return null;
+	}
+
+	@Override
+	public void setAdminConnectionContext(
+			ConnectionContext adminConnectionContext) {
+		//
+	}
+
+	@Override
+	public PListStore getTempDataStore() {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public URI getVmConnectorURI() {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void brokerServiceStarted() {
+		stopped = false;
+	}
+
+	@Override
+	public BrokerService getBrokerService() {
+		return this.bservice;
+	}
+
+	@Override
+	public Broker getRoot() {
+		return this;
+	}
+
+	@Override
+	public boolean isExpired(MessageReference messageReference) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void messageExpired(ConnectionContext context,
+			MessageReference messageReference, Subscription subscription) {
+		throw new RuntimeException("Don't call me!");
+
+	}
+
+	@Override
+	public boolean sendToDeadLetterQueue(ConnectionContext context,
+			MessageReference messageReference, Subscription subscription,
+			Throwable poisonCause) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public long getBrokerSequenceId() {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void messageConsumed(ConnectionContext context,
+			MessageReference messageReference) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void messageDelivered(ConnectionContext context,
+			MessageReference messageReference) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void messageDiscarded(ConnectionContext context, Subscription sub,
+			MessageReference messageReference) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void slowConsumer(ConnectionContext context,
+			Destination destination, Subscription subs) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void fastProducer(ConnectionContext context,
+			ProducerInfo producerInfo, ActiveMQDestination destination) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void isFull(ConnectionContext context, Destination destination,
+			Usage usage) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void nowMasterBroker() {
+	}
+
+	@Override
+	public Scheduler getScheduler() {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public ThreadPoolExecutor getExecutor() {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void networkBridgeStarted(BrokerInfo brokerInfo,
+			boolean createdByDuplex, String remoteIp) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	@Override
+	public void networkBridgeStopped(BrokerInfo brokerInfo) {
+		throw new RuntimeException("Don't call me!");
+	}
+
+	protected final ActiveMQServer createServer(final boolean realFiles,
+			final boolean netty) throws Exception {
+		return createServer(realFiles, createDefaultConfig(netty), -1, -1,
+				new HashMap<String, AddressSettings>());
+	}
+
+	protected final ActiveMQServer createServer(final boolean realFiles,
+			final Configuration configuration, final int pageSize,
+			final int maxAddressSize,
+			final Map<String, AddressSettings> settings) {
+		return createServer(realFiles, configuration, pageSize, maxAddressSize,
+				AddressFullMessagePolicy.PAGE, settings);
+	}
+
+	protected final ActiveMQServer createServer(final boolean realFiles,
+			final Configuration configuration, final int pageSize,
+			final int maxAddressSize,
+			final AddressFullMessagePolicy fullPolicy,
+			final Map<String, AddressSettings> settings) {
+		ActiveMQServer server = ActiveMQServers.newActiveMQServer(configuration,
+				  realFiles);
+		if (settings != null) {
+			for (Map.Entry<String, AddressSettings> setting : settings
+					.entrySet()) {
+				server.getAddressSettingsRepository().addMatch(
+						setting.getKey(), setting.getValue());
+			}
+		}
+
+		AddressSettings defaultSetting = new AddressSettings();
+		defaultSetting.setPageSizeBytes(pageSize);
+		defaultSetting.setMaxSizeBytes(maxAddressSize);
+		defaultSetting.setAddressFullMessagePolicy(fullPolicy);
+
+		server.getAddressSettingsRepository().addMatch("#", defaultSetting);
+
+		return server;
+	}
+
+	protected Configuration createDefaultConfig(final boolean netty)
+			throws Exception {
+		if (netty) {
+			return createDefaultConfig(new HashMap<String, Object>(),
+					INVM_ACCEPTOR_FACTORY, NETTY_ACCEPTOR_FACTORY);
+		} else {
+			return createDefaultConfig(new HashMap<String, Object>(),
+					INVM_ACCEPTOR_FACTORY);
+		}
+	}
+
+	protected Configuration createDefaultConfig(
+			final Map<String, Object> params, final String... acceptors)
+			throws Exception {
+		ConfigurationImpl configuration = createBasicConfig(-1)
+				.setJMXManagementEnabled(false)
+				.clearAcceptorConfigurations();
+
+		for (String acceptor : acceptors) {
+			TransportConfiguration transportConfig = new TransportConfiguration(
+					acceptor, params);
+			configuration.addAcceptorConfiguration(transportConfig);
+		}
+
+		return configuration;
+	}
+
+	protected final ConfigurationImpl createBasicConfig(final int serverID) {
+		ConfigurationImpl configuration = new ConfigurationImpl()
+				.setSecurityEnabled(false)
+				.setJournalMinFiles(2)
+				.setJournalFileSize(100 * 1024)
+				.setJournalType(getDefaultJournalType())
+				.setJournalDirectory(getJournalDir(serverID, false))
+				.setBindingsDirectory(getBindingsDir(serverID, false))
+				.setPagingDirectory(getPageDir(serverID, false))
+				.setLargeMessagesDirectory(getLargeMessagesDir(serverID, false))
+				.setJournalCompactMinFiles(0).setJournalCompactPercentage(0)
+				.setClusterPassword(CLUSTER_PASSWORD);
+
+		return configuration;
+	}
+
+	protected String getLargeMessagesDir(final int index, final boolean backup) {
+		return getLargeMessagesDir(testDir, index, backup);
+	}
+
+	protected static String getLargeMessagesDir(final String testDir,
+			final int index, final boolean backup) {
+		return getLargeMessagesDir(testDir)
+				+ directoryNameSuffix(index, backup);
+	}
+
+	protected String getPageDir(final int index, final boolean backup) {
+		return getPageDir(testDir, index, backup);
+	}
+
+	protected static String getPageDir(final String testDir, final int index,
+			final boolean backup) {
+		return getPageDir(testDir) + directoryNameSuffix(index, backup);
+	}
+
+	protected String getBindingsDir(final int index, final boolean backup) {
+		return getBindingsDir(testDir, index, backup);
+	}
+
+	protected static String getBindingsDir(final String testDir,
+			final int index, final boolean backup) {
+		return getBindingsDir(testDir) + directoryNameSuffix(index, backup);
+	}
+
+	protected String getJournalDir(final int index, final boolean backup) {
+		return getJournalDir(testDir, index, backup);
+	}
+
+	protected static String getJournalDir(final String testDir,
+			final int index, final boolean backup) {
+		return getJournalDir(testDir) + directoryNameSuffix(index, backup);
+	}
+
+	private static String directoryNameSuffix(int index, boolean backup) {
+		if (index == -1)
+			return "";
+		return index + "-" + (backup ? "B" : "L");
+	}
+
+	protected static JournalType getDefaultJournalType() {
+		if (AsynchronousFileImpl.isLoaded()) {
+			return JournalType.ASYNCIO;
+		} else {
+			return JournalType.NIO;
+		}
+	}
+
+	protected final void clearDataRecreateServerDirs() {
+		clearDataRecreateServerDirs(testDir);
+	}
+
+	protected void clearDataRecreateServerDirs(final String testDir1) {
+		// Need to delete the root
+
+		File file = new File(testDir1);
+		deleteDirectory(file);
+		file.mkdirs();
+
+		recreateDirectory(getJournalDir(testDir1));
+		recreateDirectory(getBindingsDir(testDir1));
+		recreateDirectory(getPageDir(testDir1));
+		recreateDirectory(getLargeMessagesDir(testDir1));
+		recreateDirectory(getClientLargeMessagesDir(testDir1));
+		recreateDirectory(getTemporaryDir(testDir1));
+	}
+
+	protected String getTemporaryDir(final String testDir1) {
+		return testDir1 + "/temp";
+	}
+
+	protected String getClientLargeMessagesDir(final String testDir1) {
+		return testDir1 + "/client-large-msg";
+	}
+
+	protected static String getLargeMessagesDir(final String testDir1) {
+		return testDir1 + "/large-msg";
+	}
+
+	protected static String getPageDir(final String testDir1) {
+		return testDir1 + "/page";
+	}
+
+	protected static String getBindingsDir(final String testDir1) {
+		return testDir1 + "/bindings";
+	}
+
+	protected static String getJournalDir(final String testDir1) {
+		return testDir1 + "/journal";
+	}
+
+	protected static final void recreateDirectory(final String directory) {
+		File file = new File(directory);
+		deleteDirectory(file);
+		file.mkdirs();
+	}
+
+	protected static final boolean deleteDirectory(final File directory) {
+		if (directory.isDirectory()) {
+			String[] files = directory.list();
+			int num = 5;
+			int attempts = 0;
+			while (files == null && (attempts < num)) {
+				try {
+					Thread.sleep(100);
+				} catch (InterruptedException e) {
+				}
+				files = directory.list();
+				attempts++;
+			}
+
+			for (String file : files) {
+				File f = new File(directory, file);
+				if (!deleteDirectory(f)) {
+					LOG.warn("Failed to clean up file: " + f.getAbsolutePath());
+				}
+			}
+		}
+
+		return directory.delete();
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/ArtemisBrokerWrapper.java
----------------------------------------------------------------------
diff --git a/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/ArtemisBrokerWrapper.java b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/ArtemisBrokerWrapper.java
new file mode 100644
index 0000000..86580e1
--- /dev/null
+++ b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/ArtemisBrokerWrapper.java
@@ -0,0 +1,209 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.artemiswrapper;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.activemq.artemis.api.core.ActiveMQQueueExistsException;
+import org.apache.activemq.artemis.api.core.SimpleString;
+import org.apache.activemq.artemis.api.core.TransportConfiguration;
+import org.apache.activemq.artemis.core.config.Configuration;
+import org.apache.activemq.artemis.core.config.impl.SecurityConfiguration;
+import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants;
+import org.apache.activemq.artemis.core.security.Role;
+import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
+import org.apache.activemq.artemis.spi.core.security.ActiveMQSecurityManagerImpl;
+import org.apache.activemq.artemiswrapper.ArtemisBrokerHelper;
+import org.apache.activemq.broker.BrokerService;
+
+public class ArtemisBrokerWrapper extends ArtemisBrokerBase
+{
+
+   protected Map<String, SimpleString> testQueues = new HashMap<String, SimpleString>();
+
+   public ArtemisBrokerWrapper(BrokerService brokerService)
+   {
+      this.bservice = brokerService;
+   }
+
+   @Override
+   public void start() throws Exception
+   {
+      testDir = temporaryFolder.getRoot().getAbsolutePath();
+      clearDataRecreateServerDirs();
+      server = createServer(realStore, false);
+      HashMap<String, Object> params = new HashMap<String, Object>();
+      params.put(TransportConstants.PORT_PROP_NAME, "61616");
+      params.put(TransportConstants.PROTOCOLS_PROP_NAME, "OPENWIRE");
+      TransportConfiguration transportConfiguration = new TransportConfiguration(NETTY_ACCEPTOR_FACTORY, params);
+
+      Configuration serverConfig = server.getConfiguration();
+
+      Set<TransportConfiguration> acceptors0 = serverConfig.getAcceptorConfigurations();
+      Iterator<TransportConfiguration> iter0 = acceptors0.iterator();
+
+      while (iter0.hasNext())
+      {
+         System.out.println("===>: " + iter0.next());
+      }
+
+      Map<String, AddressSettings> addressSettings = serverConfig.getAddressesSettings();
+      String match = "jms.queue.#";
+      AddressSettings dlaSettings = new AddressSettings();
+      SimpleString dla = new SimpleString("jms.queue.ActiveMQ.DLQ");
+      dlaSettings.setDeadLetterAddress(dla);
+      addressSettings.put(match, dlaSettings);
+
+      serverConfig.getAcceptorConfigurations().add(transportConfiguration);
+      if (this.bservice.enableSsl())
+      {
+         params = new HashMap<String, Object>();
+         params.put(TransportConstants.SSL_ENABLED_PROP_NAME, true);
+         params.put(TransportConstants.PORT_PROP_NAME, 61611);
+         params.put(TransportConstants.PROTOCOLS_PROP_NAME, "OPENWIRE");
+         params.put(TransportConstants.KEYSTORE_PATH_PROP_NAME, bservice.SERVER_SIDE_KEYSTORE);
+         params.put(TransportConstants.KEYSTORE_PASSWORD_PROP_NAME, bservice.KEYSTORE_PASSWORD);
+         params.put(TransportConstants.KEYSTORE_PROVIDER_PROP_NAME, bservice.storeType);
+         if (bservice.SERVER_SIDE_TRUSTSTORE != null)
+         {
+            params.put(TransportConstants.NEED_CLIENT_AUTH_PROP_NAME, true);
+            params.put(TransportConstants.TRUSTSTORE_PATH_PROP_NAME, bservice.SERVER_SIDE_TRUSTSTORE);
+            params.put(TransportConstants.TRUSTSTORE_PASSWORD_PROP_NAME, bservice.TRUSTSTORE_PASSWORD);
+            params.put(TransportConstants.TRUSTSTORE_PROVIDER_PROP_NAME, bservice.storeType);
+         }
+         TransportConfiguration sslTransportConfig = new TransportConfiguration(NETTY_ACCEPTOR_FACTORY, params);
+         serverConfig.getAcceptorConfigurations().add(sslTransportConfig);
+      }
+
+      for (Integer port : bservice.extraConnectors)
+      {
+         if (port.intValue() != 61616)
+         {
+            //extra port
+            params = new HashMap<String, Object>();
+            params.put(TransportConstants.PORT_PROP_NAME, port.intValue());
+            params.put(TransportConstants.PROTOCOLS_PROP_NAME, "OPENWIRE");
+            TransportConfiguration extraTransportConfiguration = new TransportConfiguration(NETTY_ACCEPTOR_FACTORY, params);
+            serverConfig.getAcceptorConfigurations().add(extraTransportConfiguration);
+         }
+      }
+
+      serverConfig.setSecurityEnabled(enableSecurity);
+
+      //extraServerConfig(serverConfig);
+
+      if (enableSecurity)
+      {
+         ActiveMQSecurityManagerImpl sm = (ActiveMQSecurityManagerImpl) server.getSecurityManager();
+         SecurityConfiguration securityConfig = sm.getConfiguration();
+         securityConfig.addRole("openwireSender", "sender");
+         securityConfig.addUser("openwireSender", "SeNdEr");
+         //sender cannot receive
+         Role senderRole = new Role("sender", true, false, false, false, true, true, false);
+
+         securityConfig.addRole("openwireReceiver", "receiver");
+         securityConfig.addUser("openwireReceiver", "ReCeIvEr");
+         //receiver cannot send
+         Role receiverRole = new Role("receiver", false, true, false, false, true, true, false);
+
+         securityConfig.addRole("openwireGuest", "guest");
+         securityConfig.addUser("openwireGuest", "GuEsT");
+
+         //guest cannot do anything
+         Role guestRole = new Role("guest", false, false, false, false, false, false, false);
+
+         securityConfig.addRole("openwireDestinationManager", "manager");
+         securityConfig.addUser("openwireDestinationManager", "DeStInAtIoN");
+
+         //guest cannot do anything
+         Role destRole = new Role("manager", false, false, false, false, true, true, false);
+
+         Map<String, Set<Role>> settings = server.getConfiguration().getSecurityRoles();
+         if (settings == null)
+         {
+            settings = new HashMap<String, Set<Role>>();
+            server.getConfiguration().setSecurityRoles(settings);
+         }
+         Set<Role> anySet = settings.get("#");
+         if (anySet == null)
+         {
+            anySet = new HashSet<Role>();
+            settings.put("#", anySet);
+         }
+         anySet.add(senderRole);
+         anySet.add(receiverRole);
+         anySet.add(guestRole);
+         anySet.add(destRole);
+      }
+/* no need to start jms server here
+         jmsServer = new JMSServerManagerImpl(server);
+	      jmsServer.setContext(new InVMNamingContext());
+	      jmsServer.start();
+*/
+      Set<TransportConfiguration> acceptors = serverConfig.getAcceptorConfigurations();
+      Iterator<TransportConfiguration> iter = acceptors.iterator();
+
+      while (iter.hasNext())
+      {
+         System.out.println(">: " + iter.next());
+      }
+      server.start();
+
+/*
+	      registerConnectionFactory();
+	      mbeanServer = MBeanServerFactory.createMBeanServer();
+*/
+
+      ArtemisBrokerHelper.setBroker(this.bservice);
+      stopped = false;
+
+   }
+
+   @Override
+   public void stop() throws Exception
+   {
+      server.stop();
+      testQueues.clear();
+      stopped = true;
+   }
+
+   public void makeSureQueueExists(String qname) throws Exception
+   {
+      synchronized (testQueues)
+      {
+         SimpleString coreQ = testQueues.get(qname);
+         if (coreQ == null)
+         {
+            coreQ = new SimpleString("jms.queue." + qname);
+            try
+            {
+               this.server.createQueue(coreQ, coreQ, null, false, false);
+               testQueues.put(qname, coreQ);
+            }
+            catch (ActiveMQQueueExistsException e)
+            {
+               //ignore
+            }
+         }
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/InVMNameParser.java
----------------------------------------------------------------------
diff --git a/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/InVMNameParser.java b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/InVMNameParser.java
new file mode 100644
index 0000000..293cdb0
--- /dev/null
+++ b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/InVMNameParser.java
@@ -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.artemiswrapper;
+
+import java.io.Serializable;
+import java.util.Properties;
+
+import javax.naming.CompoundName;
+import javax.naming.Name;
+import javax.naming.NameParser;
+import javax.naming.NamingException;
+
+/**
+ * @author <a href="mailto:ovidiu@feodorov.com">Ovidiu Feodorov</a>
+ * @version <tt>$Revision: 2868 $</tt>
+ *
+ */
+public class InVMNameParser implements NameParser, Serializable
+{
+   // Constants -----------------------------------------------------
+
+   private static final long serialVersionUID = 2925203703371001031L;
+
+   // Static --------------------------------------------------------
+
+   static Properties syntax;
+
+   static
+   {
+      InVMNameParser.syntax = new Properties();
+      InVMNameParser.syntax.put("jndi.syntax.direction", "left_to_right");
+      InVMNameParser.syntax.put("jndi.syntax.ignorecase", "false");
+      InVMNameParser.syntax.put("jndi.syntax.separator", "/");
+   }
+
+   // Attributes ----------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   // Public --------------------------------------------------------
+
+   public static Properties getSyntax()
+   {
+      return InVMNameParser.syntax;
+   }
+
+   public Name parse(final String name) throws NamingException
+   {
+      return new CompoundName(name, InVMNameParser.syntax);
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+
+}

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/InVMNamingContext.java
----------------------------------------------------------------------
diff --git a/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/InVMNamingContext.java b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/InVMNamingContext.java
new file mode 100644
index 0000000..017fa17
--- /dev/null
+++ b/tests/activemq5-unit-tests/src/main/java/org/apache/activemq/broker/artemiswrapper/InVMNamingContext.java
@@ -0,0 +1,370 @@
+/**
+ * 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.artemiswrapper;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.naming.Binding;
+import javax.naming.Context;
+import javax.naming.Name;
+import javax.naming.NameAlreadyBoundException;
+import javax.naming.NameClassPair;
+import javax.naming.NameNotFoundException;
+import javax.naming.NameParser;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.RefAddr;
+import javax.naming.Reference;
+
+public class InVMNamingContext implements Context, Serializable
+{
+   // Constants -----------------------------------------------------
+
+   private static final long serialVersionUID = 385743957345L;
+
+   // Static --------------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   protected Map<String, Object> map;
+
+   protected NameParser parser = new InVMNameParser();
+
+   private String nameInNamespace = "";
+
+   // Constructors --------------------------------------------------
+
+   public InVMNamingContext()
+   {
+      map = Collections.synchronizedMap(new HashMap<String, Object>());
+   }
+
+   public InVMNamingContext(final String nameInNamespace)
+   {
+      this();
+      this.nameInNamespace = nameInNamespace;
+   }
+
+   // Context implementation ----------------------------------------
+
+   public Object lookup(final Name name) throws NamingException
+   {
+      throw new UnsupportedOperationException();
+   }
+
+   public Object lookup(String name) throws NamingException
+   {
+      name = trimSlashes(name);
+      int i = name.indexOf("/");
+      String tok = i == -1 ? name : name.substring(0, i);
+      Object value = map.get(tok);
+      if (value == null)
+      {
+         throw new NameNotFoundException("Name not found: " + tok);
+      }
+      if (value instanceof InVMNamingContext && i != -1)
+      {
+         return ((InVMNamingContext)value).lookup(name.substring(i));
+      }
+      if (value instanceof Reference)
+      {
+         Reference ref = (Reference)value;
+         RefAddr refAddr = ref.get("nns");
+
+         // we only deal with references create by NonSerializableFactory
+         String key = (String)refAddr.getContent();
+         return NonSerializableFactory.lookup(key);
+      }
+      else
+      {
+         return value;
+      }
+   }
+
+   public void bind(final Name name, final Object obj) throws NamingException
+   {
+      throw new UnsupportedOperationException();
+   }
+
+   public void bind(final String name, final Object obj) throws NamingException
+   {
+      internalBind(name, obj, false);
+   }
+
+   public void rebind(final Name name, final Object obj) throws NamingException
+   {
+      throw new UnsupportedOperationException();
+   }
+
+   public void rebind(final String name, final Object obj) throws NamingException
+   {
+      internalBind(name, obj, true);
+   }
+
+   public void unbind(final Name name) throws NamingException
+   {
+      unbind(name.toString());
+   }
+
+   public void unbind(String name) throws NamingException
+   {
+      name = trimSlashes(name);
+      int i = name.indexOf("/");
+      boolean terminal = i == -1;
+      if (terminal)
+      {
+         map.remove(name);
+      }
+      else
+      {
+         String tok = name.substring(0, i);
+         InVMNamingContext c = (InVMNamingContext)map.get(tok);
+         if (c == null)
+         {
+            throw new NameNotFoundException("Context not found: " + tok);
+         }
+         c.unbind(name.substring(i));
+      }
+   }
+
+   public void rename(final Name oldName, final Name newName) throws NamingException
+   {
+      throw new UnsupportedOperationException();
+   }
+
+   public void rename(final String oldName, final String newName) throws NamingException
+   {
+      throw new UnsupportedOperationException();
+   }
+
+   public NamingEnumeration<NameClassPair> list(final Name name) throws NamingException
+   {
+      throw new UnsupportedOperationException();
+   }
+
+   public NamingEnumeration<NameClassPair> list(final String name) throws NamingException
+   {
+      throw new UnsupportedOperationException();
+   }
+
+   public NamingEnumeration<Binding> listBindings(final Name name) throws NamingException
+   {
+      throw new UnsupportedOperationException();
+   }
+
+   public NamingEnumeration<Binding> listBindings(String contextName) throws NamingException
+   {
+      contextName = trimSlashes(contextName);
+      if (!"".equals(contextName) && !".".equals(contextName))
+      {
+         try
+         {
+            return ((InVMNamingContext)lookup(contextName)).listBindings("");
+         }
+         catch (Throwable t)
+         {
+            throw new NamingException(t.getMessage());
+         }
+      }
+
+      List<Binding> l = new ArrayList<Binding>();
+      for (Object element : map.keySet())
+      {
+         String name = (String)element;
+         Object object = map.get(name);
+         l.add(new Binding(name, object));
+      }
+      return new NamingEnumerationImpl<Binding>(l.iterator());
+   }
+
+   public void destroySubcontext(final Name name) throws NamingException
+   {
+      destroySubcontext(name.toString());
+   }
+
+   public void destroySubcontext(final String name) throws NamingException
+   {
+      map.remove(trimSlashes(name));
+   }
+
+   public Context createSubcontext(final Name name) throws NamingException
+   {
+      throw new UnsupportedOperationException();
+   }
+
+   public Context createSubcontext(String name) throws NamingException
+   {
+      name = trimSlashes(name);
+      if (map.get(name) != null)
+      {
+         throw new NameAlreadyBoundException(name);
+      }
+      InVMNamingContext c = new InVMNamingContext(getNameInNamespace());
+      map.put(name, c);
+      return c;
+   }
+
+   public Object lookupLink(final Name name) throws NamingException
+   {
+      throw new UnsupportedOperationException();
+   }
+
+   public Object lookupLink(final String name) throws NamingException
+   {
+      throw new UnsupportedOperationException();
+   }
+
+   public NameParser getNameParser(final Name name) throws NamingException
+   {
+      return getNameParser(name.toString());
+   }
+
+   public NameParser getNameParser(final String name) throws NamingException
+   {
+      return parser;
+   }
+
+   public Name composeName(final Name name, final Name prefix) throws NamingException
+   {
+      throw new UnsupportedOperationException();
+   }
+
+   public String composeName(final String name, final String prefix) throws NamingException
+   {
+      throw new UnsupportedOperationException();
+   }
+
+   public Object addToEnvironment(final String propName, final Object propVal) throws NamingException
+   {
+      throw new UnsupportedOperationException();
+   }
+
+   public Object removeFromEnvironment(final String propName) throws NamingException
+   {
+      throw new UnsupportedOperationException();
+   }
+
+   public Hashtable<String, String> getEnvironment() throws NamingException
+   {
+      Hashtable<String, String> env = new Hashtable<String, String>();
+      env.put("java.naming.factory.initial", "org.apache.activemq.artemis.jms.tests.tools.container.InVMInitialContextFactory");
+      return env;
+   }
+
+   public void close() throws NamingException
+   {
+   }
+
+   public String getNameInNamespace() throws NamingException
+   {
+      return nameInNamespace;
+   }
+
+   // Public --------------------------------------------------------
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   private String trimSlashes(String s)
+   {
+      int i = 0;
+      while (true)
+      {
+         if (i == s.length() || s.charAt(i) != '/')
+         {
+            break;
+         }
+         i++;
+      }
+      s = s.substring(i);
+      i = s.length() - 1;
+      while (true)
+      {
+         if (i == -1 || s.charAt(i) != '/')
+         {
+            break;
+         }
+         i--;
+      }
+      return s.substring(0, i + 1);
+   }
+
+   private void internalBind(String name, final Object obj, final boolean rebind) throws NamingException
+   {
+      name = trimSlashes(name);
+      int i = name.lastIndexOf("/");
+      InVMNamingContext c = this;
+      if (i != -1)
+      {
+         String path = name.substring(0, i);
+         c = (InVMNamingContext)lookup(path);
+      }
+      name = name.substring(i + 1);
+      if (!rebind && c.map.get(name) != null)
+      {
+         throw new NameAlreadyBoundException(name);
+      }
+      c.map.put(name, obj);
+   }
+
+   // Inner classes -------------------------------------------------
+
+   private class NamingEnumerationImpl<T> implements NamingEnumeration<T>
+   {
+      private final Iterator<T> iterator;
+
+      NamingEnumerationImpl(final Iterator<T> bindingIterator)
+      {
+         iterator = bindingIterator;
+      }
+
+      public void close() throws NamingException
+      {
+         throw new UnsupportedOperationException();
+      }
+
+      public boolean hasMore() throws NamingException
+      {
+         return iterator.hasNext();
+      }
+
+      public T next() throws NamingException
+      {
+         return iterator.next();
+      }
+
+      public boolean hasMoreElements()
+      {
+         return iterator.hasNext();
+      }
+
+      public T nextElement()
+      {
+         return iterator.next();
+      }
+   }
+}


Mime
View raw message