<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ 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/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>acceptance-tests</artifactId>
    <groupId>org.apache.servicecomb.pack</groupId>
    <version>0.6.0-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <artifactId>acceptance-pack-spring-with-consul</artifactId>
  <name>Pack:Acceptance Tests::Spring with consul</name>

  <dependencies>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>org.jboss.byteman</groupId>
      <artifactId>byteman-submit</artifactId>
      <version>${byteman.version}</version>
    </dependency>
  </dependencies>

  <profiles>
    <profile>
      <id>jdk9</id>
      <activation>
        <jdk>[9,)</jdk>
      </activation>
      <!-- TODO using jdk argLine to get rid of the jaxb dependencies -->
      <properties>
        <jdk.argLine>--add-modules java.xml.bind</jdk.argLine>
      </properties>
      <dependencies>
        <dependency>
          <groupId>javax.xml.bind</groupId>
          <artifactId>jaxb-api</artifactId>
          <version>${jaxb.version}</version>
        </dependency>
        <dependency>
          <groupId>com.sun.xml.bind</groupId>
          <artifactId>jaxb-impl</artifactId>
          <version>${jaxb.version}</version>
        </dependency>
        <dependency>
          <groupId>org.glassfish.jaxb</groupId>
          <artifactId>jaxb-runtime</artifactId>
          <version>${jaxb.version}</version>
        </dependency>
        <dependency>
          <groupId>javax.activation</groupId>
          <artifactId>activation</artifactId>
          <version>${javax.activation.version}</version>
        </dependency>
      </dependencies>
    </profile>
    <profile>
      <id>docker</id>
      <activation>
        <file>
          <exists>/var/run/docker.sock</exists>
        </file>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>io.fabric8</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <configuration>
              <images>
                <image>
                  <name>consul:1.5</name>
                  <alias>consul</alias>
                  <run>
                    <wait>
                      <log>Synced node info</log>
                      <tcp>
                        <ports>
                          <port>8500</port>
                        </ports>
                      </tcp>
                      <time>60000</time>
                    </wait>
                    <ports>
                      <port>consul.port:8500</port>
                    </ports>
                  </run>
                </image>
                <image>
                  <name>postgres</name>
                  <alias>postgres</alias>
                  <run>
                    <env>
                      <POSTGRES_DB>saga</POSTGRES_DB>
                      <POSTGRES_USER>saga</POSTGRES_USER>
                      <POSTGRES_PASSWORD>password</POSTGRES_PASSWORD>
                    </env>
                    <wait>
                      <log>database system is ready to accept connections</log>
                      <tcp>
                        <ports>
                          <port>5432</port>
                        </ports>
                      </tcp>
                      <time>60000</time>
                    </wait>
                    <ports>
                      <port>postgres.port:5432</port>
                    </ports>
                  </run>
                </image>
                <image>
                  <name>alpha-server:${project.version}</name>
                  <alias>alpha</alias>
                  <run>
                    <env>
                      <JAVA_OPTS>
                        -Dspring.profiles.active=prd,test
                      </JAVA_OPTS>
                      <spring.cloud.consul.enabled>true</spring.cloud.consul.enabled>
                      <spring.cloud.consul.host>consul.servicecomb.io</spring.cloud.consul.host>
                      <spring.cloud.consul.port>8500</spring.cloud.consul.port>
                      <spring.cloud.consul.discovery.tags>alpha-server-host=alpha-server.servicecomb.io,alpha-server-port=8080</spring.cloud.consul.discovery.tags>
                      <spring.cloud.consul.discovery.preferIpAddress>true</spring.cloud.consul.discovery.preferIpAddress>
                    </env>
                    <links>
                      <link>postgres:postgresql.servicecomb.io</link>
                      <link>consul:consul.servicecomb.io</link>
                    </links>
                    <wait>
                      <log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
                      <tcp>
                        <ports>
                          <port>8080</port>
                          <port>8090</port>
                        </ports>
                      </tcp>
                      <time>120000</time>
                    </wait>
                    <ports>
                      <port>alpha.port:8080</port>
                      <port>alpha.rest.port:8090</port>
                    </ports>
                    <dependsOn>
                      <container>postgres</container>
                    </dependsOn>
                  </run>
                </image>
                <image>
                  <name>car:${project.version}</name>
                  <alias>car</alias>
                  <run>
                    <env>
                      <JAVA_OPTS>
                        -Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
                        -javaagent:/maven/saga/byteman.jar=port:9092,address:0.0.0.0,listener:true
                      </JAVA_OPTS>
                      <spring.cloud.consul.enabled>true</spring.cloud.consul.enabled>
                      <alpha.cluster.address></alpha.cluster.address>
                      <alpha.cluster.register.type>consul</alpha.cluster.register.type>
                      <spring.cloud.consul.host>consul.servicecomb.io</spring.cloud.consul.host>
                      <spring.cloud.consul.port>8500</spring.cloud.consul.port>
                      <spring.cloud.consul.discovery.register>false</spring.cloud.consul.discovery.register>
                    </env>
                    <wait>
                      <log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
                      <tcp>
                        <ports>
                          <port>8080</port>
                          <port>9092</port>
                        </ports>
                      </tcp>
                      <time>120000</time>
                    </wait>
                    <links>
                      <link>alpha:alpha-server.servicecomb.io</link>
                      <link>consul:consul.servicecomb.io</link>
                    </links>
                    <ports>
                      <port>car.port:8080</port>
                      <port>car.byteman.port:9092</port>
                    </ports>
                    <dependsOn>
                      <container>alpha</container>
                    </dependsOn>
                  </run>
                </image>
                <image>
                  <name>hotel:${project.version}</name>
                  <alias>hotel</alias>
                  <run>
                    <env>
                      <JAVA_OPTS>
                        -Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
                        -javaagent:/maven/saga/byteman.jar=port:9093,address:0.0.0.0,listener:true
                      </JAVA_OPTS>
                      <spring.cloud.consul.enabled>true</spring.cloud.consul.enabled>
                      <alpha.cluster.address></alpha.cluster.address>
                      <alpha.cluster.register.type>consul</alpha.cluster.register.type>
                      <spring.cloud.consul.host>consul.servicecomb.io</spring.cloud.consul.host>
                      <spring.cloud.consul.port>8500</spring.cloud.consul.port>
                      <spring.cloud.consul.discovery.register>false</spring.cloud.consul.discovery.register>
                    </env>
                    <wait>
                      <log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
                      <tcp>
                        <ports>
                          <port>8080</port>
                          <port>9093</port>
                        </ports>
                      </tcp>
                      <time>120000</time>
                    </wait>
                    <links>
                      <link>alpha:alpha-server.servicecomb.io</link>
                      <link>consul:consul.servicecomb.io</link>
                    </links>
                    <ports>
                      <port>hotel.port:8080</port>
                      <port>hotel.byteman.port:9093</port>
                    </ports>
                    <dependsOn>
                      <container>alpha</container>
                    </dependsOn>
                  </run>
                </image>
                <image>
                  <name>booking:${project.version}</name>
                  <alias>booking</alias>
                  <run>
                    <env>
                      <JAVA_OPTS>
                        -Dorg.jboss.byteman.debug=true -Dorg.jboss.byteman.verbose=true
                        -javaagent:/maven/saga/byteman.jar=port:9091,address:0.0.0.0,listener:true
                      </JAVA_OPTS>
                      <spring.cloud.consul.enabled>true</spring.cloud.consul.enabled>
                      <alpha.cluster.address></alpha.cluster.address>
                      <alpha.cluster.register.type>consul</alpha.cluster.register.type>
                      <spring.cloud.consul.host>consul.servicecomb.io</spring.cloud.consul.host>
                      <spring.cloud.consul.port>8500</spring.cloud.consul.port>
                      <spring.cloud.consul.discovery.register>false</spring.cloud.consul.discovery.register>
                    </env>
                    <wait>
                      <log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
                      <tcp>
                        <ports>
                          <port>8080</port>
                          <port>9091</port>
                        </ports>
                      </tcp>
                      <time>120000</time>
                    </wait>
                    <links>
                      <link>alpha:alpha-server.servicecomb.io</link>
                      <link>car:car.servicecomb.io</link>
                      <link>hotel:hotel.servicecomb.io</link>
                      <link>consul:consul.servicecomb.io</link>
                    </links>
                    <ports>
                      <port>booking.port:8080</port>
                      <port>booking.byteman.port:9091</port>
                    </ports>
                    <dependsOn>
                      <container>alpha</container>
                    </dependsOn>
                  </run>
                </image>
              </images>
            </configuration>
            <executions>
              <execution>
                <id>start</id>
                <phase>pre-integration-test</phase>
                <goals>
                  <goal>start</goal>
                </goals>
              </execution>
              <execution>
                <id>stop</id>
                <phase>post-integration-test</phase>
                <goals>
                  <goal>stop</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.codehaus.gmaven</groupId>
            <artifactId>gmaven-plugin</artifactId>
            <executions>
              <execution>
                <id>add-default-properties</id>
                <phase>initialize</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <source>
                    project.properties.setProperty('docker.hostname', 'localhost')
                    log.info("Docker hostname is " + project.properties['docker.hostname'])
                  </source>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>${maven.failsafe.version}</version>
            <configuration>
              <systemPropertyVariables>
                <alpha.cluster.address>
                  http://${docker.hostname}:${alpha.port}
                </alpha.cluster.address>
                <alpha.rest.address>
                  http://${docker.hostname}:${alpha.rest.port}
                </alpha.rest.address>
                <car.service.address>
                  http://${docker.hostname}:${car.port}
                </car.service.address>
                <hotel.service.address>
                  http://${docker.hostname}:${hotel.port}
                </hotel.service.address>
                <booking.service.address>
                  http://${docker.hostname}:${booking.port}
                </booking.service.address>
                <spring.datasource.url>
                  jdbc:postgresql://${docker.hostname}:${postgres.port}/saga?useSSL=false
                </spring.datasource.url>
                <byteman.address>
                  ${docker.hostname}
                </byteman.address>
                <car.byteman.port>
                  ${car.byteman.port}
                </car.byteman.port>
                <hotel.byteman.port>
                  ${hotel.byteman.port}
                </hotel.byteman.port>
                <booking.byteman.port>
                  ${booking.byteman.port}
                </booking.byteman.port>
                <info.service.uri>
                  ${info.service.uri}
                </info.service.uri>
              </systemPropertyVariables>
              <argLine>${jacoco.failsafe.argLine}</argLine>
            </configuration>
            <executions>
              <execution>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>com.ethlo.persistence.tools</groupId>
            <artifactId>eclipselink-maven-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>docker-machine</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.gmaven</groupId>
            <artifactId>gmaven-plugin</artifactId>
            <executions>
              <execution>
                <id>add-dynamic-properties</id>
                <phase>prepare-package</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <source>
                    def process = "docker-machine ip default".execute()
                    process.waitFor()
                    project.properties.setProperty('docker.hostname', process.in.text.trim())

                    log.info("Docker hostname is " + project.properties['docker.hostname'])
                  </source>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
