<?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</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <artifactId>acceptance-pack-tcc-spring-demo</artifactId>
  <name>Pack:Acceptance Tests::TCC::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>
                      <JAVA_OPTS>
                        -Dspring.profiles.active=prd,test
                      </JAVA_OPTS>
                    </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>tcc-inventory:${project.version}</name>
                  <alias>inventory</alias>
                  <run>
                    <env>
                      <JAVA_OPTS>
                        -Dspring.profiles.active=prd
                      </JAVA_OPTS>
                    </env>
                    <wait>
                      <log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
                      <tcp>
                        <ports>
                          <port>8080</port>
                        </ports>
                      </tcp>
                      <time>120000</time>
                    </wait>
                    <links>
                      <link>alpha:alpha-server.servicecomb.io</link>
                    </links>
                    <ports>
                      <port>inventory.port:8080</port>
                    </ports>
                    <dependsOn>
                      <container>alpha</container>
                    </dependsOn>
                  </run>
                </image>
                <image>
                  <name>tcc-payment:${project.version}</name>
                  <alias>payment</alias>
                  <run>
                    <env>
                      <JAVA_OPTS>
                        -Dspring.profiles.active=prd
                      </JAVA_OPTS>
                    </env>
                    <wait>
                      <log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
                      <tcp>
                        <ports>
                          <port>8080</port>
                        </ports>
                      </tcp>
                      <time>120000</time>
                    </wait>
                    <links>
                      <link>alpha:alpha-server.servicecomb.io</link>
                    </links>
                    <ports>
                      <port>payment.port:8080</port>
                    </ports>
                    <dependsOn>
                      <container>alpha</container>
                    </dependsOn>
                  </run>
                </image>
                <image>
                  <name>tcc-ordering:${project.version}</name>
                  <alias>ordering</alias>
                  <run>
                    <wait>
                      <log>Started [a-zA-Z]+ in [0-9.]+ seconds</log>
                      <tcp>
                        <ports>
                          <port>8080</port>
                        </ports>
                      </tcp>
                      <time>120000</time>
                    </wait>
                    <links>
                      <link>alpha:alpha-server.servicecomb.io</link>
                      <link>inventory:inventory.servicecomb.io</link>
                      <link>payment:payment.servicecomb.io</link>
                    </links>
                    <ports>
                      <port>ordering.port:8080</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>
                <inventory.service.address>
                  http://${docker.hostname}:${inventory.port}
                </inventory.service.address>
                <payment.service.address>
                  http://${docker.hostname}:${payment.port}
                </payment.service.address>
                <ordering.service.address>
                  http://${docker.hostname}:${ordering.port}
                </ordering.service.address>
                <spring.datasource.url>
                  jdbc:postgresql://${docker.hostname}:${postgres.port}/saga?useSSL=false
                </spring.datasource.url>
                <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>
