<?xml version='1.0' encoding='UTF-8'?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modelVersion>4.0.0</modelVersion>
   <parent>
      <groupId>org.infinispan</groupId>
      <artifactId>infinispan-parent</artifactId>
      <version>9.4.4.Final</version>
      <relativePath>../../pom.xml</relativePath>
   </parent>

   <artifactId>infinispan-client-hotrod</artifactId>
   <packaging>bundle</packaging>
   <name>Infinispan Hot Rod Client</name>
   <description>Infinispan Hot Rod Client</description>

   <properties>
      <ca.dname>CN=CA,OU=Infinispan,O=JBoss,L=Red Hat</ca.dname>
      <ca.alias>infinispan-ca</ca.alias>
      <ca.keystore>${project.build.testOutputDirectory}/ca.p12</ca.keystore>
      <client.dname>CN=HotRodClient1,OU=Infinispan,O=JBoss,L=Red Hat</client.dname>
      <client.alias>client1</client.alias>
      <server.dname>CN=HotRodServer,OU=Infinispan,O=JBoss,L=Red Hat</server.dname>
      <server.alias>hotrod</server.alias>
      <client.keystore>${project.build.testOutputDirectory}/keystore_client.p12</client.keystore>
      <server.keystore>${project.build.testOutputDirectory}/keystore_server.p12</server.keystore>
      <default.password>secret</default.password>
      <alt.password>changeme</alt.password>
   </properties>

   <dependencies>
      <dependency>
         <groupId>org.infinispan</groupId>
         <artifactId>infinispan-commons</artifactId>
      </dependency>

      <dependency>
         <groupId>org.jboss.marshalling</groupId>
         <artifactId>jboss-marshalling-osgi</artifactId>
      </dependency>

      <dependency>
         <groupId>io.netty</groupId>
         <artifactId>netty-handler</artifactId>
      </dependency>

      <dependency>
         <groupId>io.netty</groupId>
         <artifactId>netty-transport-native-epoll</artifactId>
         <classifier>linux-x86_64</classifier>
      </dependency>

      <dependency>
         <groupId>org.infinispan</groupId>
         <artifactId>infinispan-commons-test</artifactId>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>org.infinispan</groupId>
         <artifactId>infinispan-commons</artifactId>
         <type>test-jar</type>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>org.infinispan</groupId>
         <artifactId>infinispan-core</artifactId>
         <type>test-jar</type>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>org.infinispan</groupId>
         <artifactId>infinispan-query</artifactId>
         <type>test-jar</type>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>org.infinispan</groupId>
         <artifactId>infinispan-remote-query-server</artifactId>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>org.infinispan</groupId>
         <artifactId>infinispan-scripting</artifactId>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>org.infinispan</groupId>
         <artifactId>infinispan-scripting</artifactId>
         <type>test-jar</type>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>org.infinispan</groupId>
         <artifactId>infinispan-server-hotrod</artifactId>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>org.infinispan</groupId>
         <artifactId>infinispan-server-hotrod</artifactId>
         <type>test-jar</type>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>org.infinispan</groupId>
         <artifactId>infinispan-server-core</artifactId>
         <type>test-jar</type>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>org.infinispan</groupId>
         <artifactId>infinispan-query-dsl</artifactId>
         <optional>true</optional>
      </dependency>

      <dependency>
         <groupId>org.infinispan</groupId>
         <artifactId>infinispan-remote-query-client</artifactId>
         <optional>true</optional>
      </dependency>

      <dependency>
         <groupId>org.jboss.spec.javax.transaction</groupId>
         <artifactId>jboss-transaction-api_1.2_spec</artifactId>
      </dependency>

      <dependency>
         <groupId>org.infinispan.protostream</groupId>
         <artifactId>sample-domain-definition</artifactId>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>org.testng</groupId>
         <artifactId>testng</artifactId>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>org.mockito</groupId>
         <artifactId>mockito-core</artifactId>
         <scope>test</scope>
      </dependency>
      <dependency>
         <groupId>org.apache.geronimo.components</groupId>
         <artifactId>geronimo-transaction</artifactId>
         <scope>test</scope>
         <exclusions>
            <exclusion>
               <groupId>org.apache.geronimo.specs</groupId>
               <artifactId>geronimo-jta_1.1_spec</artifactId>
            </exclusion>
         </exclusions>
      </dependency>
      <dependency>
         <groupId>org.objectweb.howl</groupId>
         <artifactId>howl</artifactId>
         <scope>test</scope>
      </dependency>

      <!-- We need the Karaf distribution as a dependency for karaf-maven-plugin -->
      <!-- But we don't want to use its dependencies (e.g. pax-logging-api) in the tests -->
      <dependency>
        <groupId>org.apache.karaf.features</groupId>
        <artifactId>framework</artifactId>
        <type>kar</type>
        <scope>provided</scope>
        <exclusions>
          <exclusion>
            <groupId>*</groupId>
            <artifactId>*</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

   </dependencies>

   <build>
      <resources>
         <resource>
            <directory>${project.basedir}/src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
               <include>**/*</include>
            </includes>
         </resource>
      </resources>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
               <systemPropertyVariables combine.self="append">
                  <infinispan.server.hotrod.workerThreads>3</infinispan.server.hotrod.workerThreads>
               </systemPropertyVariables>
            </configuration>
         </plugin>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
               <execution>
                  <id>create-certificates</id>
                  <phase>process-test-resources</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                     <target>
                        <macrodef name="keytool">
                           <attribute name="command"/>
                           <element name="args"/>
                           <sequential>
                              <condition property="keytool.classname" value="com.ibm.crypto.tools.KeyTool">
                                 <available classname="com.ibm.crypto.tools.KeyTool"/>
                              </condition>
                              <condition property="keytool.classname" value="sun.security.tools.keytool.Main">
                                 <available classname="sun.security.tools.keytool.Main"/>
                              </condition>
                              <java classname="${keytool.classname}" failonerror="true">
                                 <arg value="@{command}"/>
                                 <!-- common arguments -->
                                 <arg value="-validity"/>
                                 <arg value="365"/>
                                 <arg value="-keyalg"/>
                                 <arg value="RSA"/>
                                 <arg value="-keysize"/>
                                 <arg value="2048"/>
                                 <arg value="-noprompt"/>
                                 <arg value="-storepass"/>
                                 <arg value="${default.password}"/>
                                 <arg value="-storetype"/>
                                 <arg value="pkcs12"/>
                                 <!-- additional arguments -->
                                 <args/>
                              </java>
                           </sequential>
                        </macrodef>
                        <delete quiet="true">
                           <fileset dir="${project.build.testOutputDirectory}" includes="*.jks,*.csr,*.cer,*.p12"/>
                        </delete>
                        <echo message="Generate the CA certificate"/>
                        <keytool command="-genkeypair">
                           <args>
                              <arg value="-alias"/>
                              <arg value="${ca.alias}"/>
                              <arg value="-dname"/>
                              <arg value="${ca.dname}"/>
                              <arg value="-keystore"/>
                              <arg value="${ca.keystore}"/>
                              <arg value="-ext"/>
                              <arg value="bc:c"/>
                              <arg value="-keypass"/>
                              <arg value="${default.password}"/>
                           </args>
                        </keytool>
                        <keytool command="-exportcert">
                           <args>
                              <arg value="-alias"/>
                              <arg value="${ca.alias}"/>
                              <arg value="-keystore"/>
                              <arg value="${ca.keystore}"/>
                              <arg value="-file"/>
                              <arg value="${project.build.testOutputDirectory}/ca.cer"/>
                              <arg value="-keypass"/>
                              <arg value="${default.password}"/>
                           </args>
                        </keytool>
                        <echo message="Import the CA certificate to the server truststore"/>
                        <keytool command="-importcert">
                           <args>
                              <arg value="-alias"/>
                              <arg value="${ca.alias}"/>
                              <arg value="-keystore"/>
                              <arg value="${project.build.testOutputDirectory}/truststore_server.p12"/>
                              <arg value="-file"/>
                              <arg value="${project.build.testOutputDirectory}/ca.cer"/>
                              <arg value="-keypass"/>
                              <arg value="${default.password}"/>
                           </args>
                        </keytool>
                        <echo message="Import the CA certificate to the client truststore"/>
                        <keytool command="-importcert">
                           <args>
                              <arg value="-alias"/>
                              <arg value="${ca.alias}"/>
                              <arg value="-keystore"/>
                              <arg value="${project.build.testOutputDirectory}/truststore_client.p12"/>
                              <arg value="-file"/>
                              <arg value="${project.build.testOutputDirectory}/ca.cer"/>
                              <arg value="-keypass"/>
                              <arg value="${default.password}"/>
                           </args>
                        </keytool>
                        <echo message="Generate the client certificate"/>
                        <keytool command="-genkeypair">
                           <args>
                              <arg value="-alias"/>
                              <arg value="${client.alias}"/>
                              <arg value="-dname"/>
                              <arg value="${client.dname}"/>
                              <arg value="-keystore"/>
                              <arg value="${client.keystore}"/>
                              <arg value="-keypass"/>
                              <arg value="${default.password}"/>
                           </args>
                        </keytool>
                        <echo message="Sign the client certificate with the CA"/>
                        <keytool command="-certreq">
                           <args>
                              <arg value="-alias"/>
                              <arg value="${client.alias}"/>
                              <arg value="-dname"/>
                              <arg value="${client.dname}"/>
                              <arg value="-keystore"/>
                              <arg value="${client.keystore}"/>
                              <arg value="-file"/>
                              <arg value="${project.build.testOutputDirectory}/client1.csr"/>
                              <arg value="-keypass"/>
                              <arg value="${default.password}"/>
                           </args>
                        </keytool>
                        <keytool command="-gencert">
                           <args>
                              <arg value="-alias"/>
                              <arg value="${ca.alias}"/>
                              <arg value="-keystore"/>
                              <arg value="${ca.keystore}"/>
                              <arg value="-infile"/>
                              <arg value="${project.build.testOutputDirectory}/client1.csr"/>
                              <arg value="-outfile"/>
                              <arg value="${project.build.testOutputDirectory}/client1.cer"/>
                              <arg value="-keypass"/>
                              <arg value="${default.password}"/>
                           </args>
                        </keytool>
                        <echo message="Import the CA certificate to the client keystore"/>
                        <keytool command="-importcert">
                           <args>
                              <arg value="-alias"/>
                              <arg value="${ca.alias}"/>
                              <arg value="-keystore"/>
                              <arg value="${client.keystore}"/>
                              <arg value="-file"/>
                              <arg value="${project.build.testOutputDirectory}/ca.cer"/>
                              <arg value="-keypass"/>
                              <arg value="${default.password}"/>
                           </args>
                        </keytool>
                        <echo message="Import the client certificate to the client keystore"/>
                        <keytool command="-importcert">
                           <args>
                              <arg value="-alias"/>
                              <arg value="${client.alias}"/>
                              <arg value="-keystore"/>
                              <arg value="${client.keystore}"/>
                              <arg value="-file"/>
                              <arg value="${project.build.testOutputDirectory}/client1.cer"/>
                              <arg value="-keypass"/>
                              <arg value="${default.password}"/>
                           </args>
                        </keytool>
                        <!-- Server -->
                        <echo message="Generate the server certificate"/>
                        <keytool command="-genkeypair">
                           <args>
                              <arg value="-alias"/>
                              <arg value="${server.alias}"/>
                              <arg value="-dname"/>
                              <arg value="${server.dname}"/>
                              <arg value="-keystore"/>
                              <arg value="${server.keystore}"/>
                              <arg value="-keypass"/>
                              <arg value="${default.password}"/>
                           </args>
                        </keytool>
                        <echo message="Sign the server certificate with the CA"/>
                        <keytool command="-certreq">
                           <args>
                              <arg value="-alias"/>
                              <arg value="${server.alias}"/>
                              <arg value="-dname"/>
                              <arg value="${server.dname}"/>
                              <arg value="-keystore"/>
                              <arg value="${server.keystore}"/>
                              <arg value="-file"/>
                              <arg value="${project.build.testOutputDirectory}/server.csr"/>
                              <arg value="-keypass"/>
                              <arg value="${default.password}"/>
                           </args>
                        </keytool>
                        <keytool command="-gencert">
                           <args>
                              <arg value="-alias"/>
                              <arg value="${ca.alias}"/>
                              <arg value="-keystore"/>
                              <arg value="${ca.keystore}"/>
                              <arg value="-infile"/>
                              <arg value="${project.build.testOutputDirectory}/server.csr"/>
                              <arg value="-outfile"/>
                              <arg value="${project.build.testOutputDirectory}/server.cer"/>
                               <arg value="-keypass"/>
                               <arg value="${default.password}"/>
                           </args>
                        </keytool>
                        <echo message="Import the CA certificate to the server keystore"/>
                        <keytool command="-importcert">
                           <args>
                              <arg value="-alias"/>
                              <arg value="${ca.alias}"/>
                              <arg value="-keystore"/>
                              <arg value="${server.keystore}"/>
                              <arg value="-file"/>
                              <arg value="${project.build.testOutputDirectory}/ca.cer"/>
                               <arg value="-keypass"/>
                               <arg value="${default.password}"/>
                           </args>
                        </keytool>
                        <echo message="Import the server certificate to the server keystore"/>
                        <keytool command="-importcert">
                           <args>
                              <arg value="-alias"/>
                              <arg value="${server.alias}"/>
                              <arg value="-keystore"/>
                              <arg value="${server.keystore}"/>
                              <arg value="-file"/>
                              <arg value="${project.build.testOutputDirectory}/server.cer"/>
                              <arg value="-keypass"/>
                              <arg value="${default.password}"/>
                           </args>
                        </keytool>
                        <!-- Alternate password client certificate -->
                        <echo message="Clone the client keystore with an alternate key password"/>
                        <keytool command="-importkeystore">
                           <args>
                              <arg value="-srcalias"/>
                              <arg value="${client.alias}"/>
                              <arg value="-srckeystore"/>
                              <arg value="${client.keystore}"/>
                              <arg value="-srcstorepass"/>
                              <arg value="${default.password}"/>
                              <arg value="-srckeypass"/>
                              <arg value="${default.password}"/>
                              <arg value="-destkeystore"/>
                              <arg value="${project.build.testOutputDirectory}/keystore_client.jks"/>
                              <arg value="-deststorepass"/>
                              <arg value="${default.password}"/>
                              <arg value="-destkeypass"/>
                              <arg value="${alt.password}"/>
                              <arg value="-srcstoretype"/>
                              <arg value="pkcs12"/>
                              <arg value="-deststoretype"/>
                              <arg value="JCEKS"/>
                           </args>
                        </keytool>
                        <keytool command="-importcert">
                           <args>
                              <arg value="-alias"/>
                              <arg value="${ca.alias}"/>
                              <arg value="-keystore"/>
                              <arg value="${project.build.testOutputDirectory}/keystore_client.jks"/>
                              <arg value="-file"/>
                              <arg value="${project.build.testOutputDirectory}/ca.cer"/>
                              <arg value="-keypass"/>
                              <arg value="${alt.password}"/>
                              <arg value="-storetype"/>
                              <arg value="JCEKS"/>
                           </args>
                        </keytool>
                        <!-- Alternate password server certificate -->
                        <echo message="Clone the server keystore with an alternate key password"/>
                        <keytool command="-importkeystore">
                           <args>
                              <arg value="-srcalias"/>
                              <arg value="${server.alias}"/>
                              <arg value="-srckeystore"/>
                              <arg value="${server.keystore}"/>
                              <arg value="-srcstorepass"/>
                              <arg value="${default.password}"/>
                              <arg value="-srckeypass"/>
                              <arg value="${default.password}"/>
                              <arg value="-destkeystore"/>
                              <arg value="${project.build.testOutputDirectory}/keystore_server.jks"/>
                              <arg value="-deststorepass"/>
                              <arg value="${default.password}"/>
                              <arg value="-destkeypass"/>
                              <arg value="${alt.password}"/>
                              <arg value="-srcstoretype"/>
                              <arg value="pkcs12"/>
                              <arg value="-deststoretype"/>
                              <arg value="JCEKS"/>
                           </args>
                        </keytool>
                        <keytool command="-importcert">
                           <args>
                              <arg value="-alias"/>
                              <arg value="${ca.alias}"/>
                              <arg value="-keystore"/>
                              <arg value="${project.build.testOutputDirectory}/keystore_server.jks"/>
                              <arg value="-file"/>
                              <arg value="${project.build.testOutputDirectory}/ca.cer"/>
                              <arg value="-keypass"/>
                              <arg value="${alt.password}"/>
                              <arg value="-storetype"/>
                              <arg value="JCEKS"/>
                           </args>
                        </keytool>
                     </target>
                  </configuration>
               </execution>
            </executions>
         </plugin>
         <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <configuration>
               <instructions>
                  <Export-Package>
                     ${project.groupId}.client.hotrod.*;version=${project.version};-split-package:=error
                  </Export-Package>
                  <Import-Package>
                     *
                  </Import-Package>
               </instructions>
            </configuration>
         </plugin>
         <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <executions>
               <execution>
                  <id>attach-artifacts</id>
                  <phase>package</phase>
                  <goals>
                     <goal>attach-artifact</goal>
                  </goals>
                  <configuration>
                     <artifacts>
                        <artifact>
                           <file>target/classes/features.xml</file>
                           <type>xml</type>
                           <classifier>features</classifier>
                        </artifact>
                     </artifacts>
                  </configuration>
               </execution>
            </executions>
         </plugin>
         <plugin>
            <groupId>org.apache.karaf.tooling</groupId>
            <artifactId>karaf-maven-plugin</artifactId>
            <configuration>
               <features>
                  <feature>infinispan-client-hotrod,infinispan-client-hotrod-with-query,hotrod-client,hotrod-client-with-query</feature>
               </features>
            </configuration>
         </plugin>
      </plugins>
   </build>

   <profiles>
      <profile>
         <id>smoke</id>
         <build>
            <plugins>
               <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-surefire-plugin</artifactId>
                  <configuration>
                     <excludes>
                        <exclude>**/*QueryDslConditions*.java</exclude>
                        <exclude>**/*QueryString*.java</exclude>
                     </excludes>
                  </configuration>
               </plugin>
            </plugins>
         </build>
      </profile>
   </profiles>
</project>
