<?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-with-nacos</artifactId>
  <name>Pack:Acceptance Tests::Spring with nacos</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>nacos/nacos-server:1.4.2</name>
                  <alias>nacos</alias>
                  <run>
                    <env>
                      <MODE>standalone</MODE>
                    </env>
                    <wait>
                      <log>Nacos started successfully</log>
                      <tcp>
                        <ports>
                          <port>8848</port>
                        </ports>
                      </tcp>
                      <time>300000</time>
                    </wait>
                    <ports>
                      <port>nacos.port:8848</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>
                      <spring.profiles.active>prd,test</spring.profiles.active>
                      <alpha.spec.names>saga-db</alpha.spec.names>
                      <spring.cloud.nacos.discovery.enabled>true</spring.cloud.nacos.discovery.enabled>
                      <spring.cloud.nacos.discovery.serverAddr>nacos.servicecomb.io:8848</spring.cloud.nacos.discovery.serverAddr>
                      <nacos.client.enabled>true</nacos.client.enabled>
                    </env>
                    <links>
                      <link>postgres:postgresql.servicecomb.io</link>
                      <link>nacos:nacos.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>
                      <spring.cloud.nacos.discovery.enabled>true</spring.cloud.nacos.discovery.enabled>
                      <alpha.cluster.register.type>nacos</alpha.cluster.register.type>
                      <spring.cloud.nacos.discovery.serverAddr>nacos.servicecomb.io:8848</spring.cloud.nacos.discovery.serverAddr>
                    </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>nacos:nacos.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>
                      <spring.cloud.nacos.discovery.enabled>true</spring.cloud.nacos.discovery.enabled>
                      <alpha.cluster.register.type>nacos</alpha.cluster.register.type>
                      <spring.cloud.nacos.discovery.serverAddr>nacos.servicecomb.io:8848</spring.cloud.nacos.discovery.serverAddr>
                    </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>nacos:nacos.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>
                      <spring.cloud.nacos.discovery.enabled>true</spring.cloud.nacos.discovery.enabled>
                      <alpha.cluster.register.type>nacos</alpha.cluster.register.type>
                      <spring.cloud.nacos.discovery.serverAddr>nacos.servicecomb.io:8848</spring.cloud.nacos.discovery.serverAddr>
                    </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>nacos:nacos.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>
            <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>
