<?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>${revision}</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

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

  <dependencies>
    <dependency>
      <groupId>org.apache.servicecomb.pack</groupId>
      <artifactId>acceptance-test-common</artifactId>
      <type>test-jar</type>
    </dependency>
  </dependencies>

  <profiles>
    <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>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>
                      <spring.profiles.active>prd,test</spring.profiles.active>
                      <alpha.spec.names>saga-db</alpha.spec.names>
                    </env>
                    <links>
                      <link>postgres:postgresql.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>
                      <omega.spec.names>saga</omega.spec.names>
                    </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>
                    </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>
                      <omega.spec.names>saga</omega.spec.names>
                    </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>
                    </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>
                      <omega.spec.names>saga</omega.spec.names>
                    </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>
                    </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>
