<!--
  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>2.5.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.14.0</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>
      <xbean-version>3.18</xbean-version>
      <hamcrest-version>1.3</hamcrest-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>
      <byteman.version>2.2.0</byteman.version>

   </properties>

   <dependencies>

      <!-- I imported this to get the ThreadLeakCheck -->
      <dependency>
         <groupId>org.apache.activemq</groupId>
         <artifactId>artemis-server</artifactId>
         <version>${project.version}</version>
         <type>test-jar</type>
      </dependency>
      <dependency>
         <groupId>org.apache.activemq</groupId>
         <artifactId>artemis-commons</artifactId>
         <version>${project.version}</version>
         <type>test-jar</type>
      </dependency>

      <!-- I imported this to get a mock of a class -->
      <dependency>
         <groupId>org.mockito</groupId>
         <artifactId>mockito-core</artifactId>
         <scope>compile</scope>
      </dependency>

      <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-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>
         <exclusions>
             <exclusion>
                 <groupId>commons-beanutils</groupId>
                 <artifactId>commons-beanutils-core</artifactId>
             </exclusion>
         </exclusions>
      </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.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>
         <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-jms-server</artifactId>
         <version>${project.version}</version>
      </dependency>

      <dependency>
         <groupId>org.apache.activemq</groupId>
         <artifactId>artemis-openwire-protocol</artifactId>
         <version>${project.version}</version>
      </dependency>

      <dependency>
         <groupId>org.apache.activemq</groupId>
         <artifactId>artemis-stomp-protocol</artifactId>
         <version>${project.version}</version>
      </dependency>

      <dependency>
         <groupId>org.jboss.byteman</groupId>
         <artifactId>byteman</artifactId>
         <version>${byteman.version}</version>
      </dependency>
      <dependency>
         <groupId>org.jboss.byteman</groupId>
         <artifactId>byteman-submit</artifactId>
         <scope>test</scope>
         <version>${byteman.version}</version>
      </dependency>
      <dependency>
         <groupId>org.jboss.byteman</groupId>
         <artifactId>byteman-install</artifactId>
         <scope>test</scope>
         <version>${byteman.version}</version>
      </dependency>
      <dependency>
         <groupId>org.jboss.byteman</groupId>
         <artifactId>byteman-bmunit</artifactId>
         <scope>test</scope>
         <version>${byteman.version}</version>
         <exclusions>
            <exclusion>
               <groupId>org.testng</groupId>
               <artifactId>testng</artifactId>
            </exclusion>
         </exclusions>
      </dependency>

       <!--
           JBoss Logging
       -->
       <dependency>
           <groupId>org.jboss.logging</groupId>
           <artifactId>jboss-logging</artifactId>
       </dependency>
      <dependency>
            <groupId>org.jboss.logmanager</groupId>
            <artifactId>jboss-logmanager</artifactId>
      </dependency>

   </dependencies>

   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.rat</groupId>
            <artifactId>apache-rat-plugin</artifactId>
            <version>0.12</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.17</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>
               <systemPropertyVariables>
                  <org.apache.activemq.AutoFailTestSupport.disableSystemExit>true</org.apache.activemq.AutoFailTestSupport.disableSystemExit>
               </systemPropertyVariables>
<!--
               <additionalClasspathElements>
                  <additionalClasspathElement>src/main/resources/stomp</additionalClasspathElement>
               </additionalClasspathElements>
-->
               <includes>
                  <!-- included packages -->
                  <include>**/org/apache/activemq/*Test.java</include>
                  <include>**/org/apache/activemq/command/*Test.java</include>
                  <include>**/org/apache/activemq/openwire/*Test.java</include>
                  <include>**/org/apache/activemq/transport/tcp/*Test.java</include>
                  <include>**/org/apache/activemq/transport/failover/*Test.java</include>
                  <include>**/org/apache/activemq/transport/*Test.java</include>
                  <!-- tests that are known to pass-->
                  <include>**/org/apache/activemq/blob/BlobTransferPolicyUriTest.java</include>
               </includes>
               <excludes>
                  <!-- exclude tests that can cause hang -->
                  <exclude>**/org/apache/activemq/PerDestinationStoreLimitTest.java</exclude>
                  <exclude>**/org/apache/activemq/ProducerFlowControlTest.java</exclude>
                  <!-- exclude tests that are on client side only -->
                  <exclude>**/org/apache/activemq/transport/tcp/TransportConnectorInvalidSocketOptionsTest.java</exclude>
               </excludes>
            </configuration>
         </plugin>

      </plugins>
   </build>

</project>

