<?xml version="1.0"?>
<!--
  ~ 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
  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>
  <artifactId>demo-zeroconfig-schemadiscovery-registry-tests</artifactId>
  <name>Java Chassis::Demo::ZeroConfig-SchemaDiscovery Registry Tests</name>
  <parent>
    <groupId>org.apache.servicecomb.demo</groupId>
    <artifactId>demo-zeroconfig-schemadiscovery-registry</artifactId>
    <version>2.7.9</version>
  </parent>

  <properties>
    <demo.main>org.apache.servicecomb.demo.zeroconfig.tests.Application</demo.main>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.apache.servicecomb</groupId>
      <artifactId>java-chassis-spring-boot-starter-servlet</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.servicecomb</groupId>
      <artifactId>registry-schema-discovery</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.servicecomb.demo</groupId>
      <artifactId>demo-schema</artifactId>
    </dependency>
  </dependencies>

  <profiles>
    <profile>
      <id>docker</id>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>io.fabric8</groupId>
              <artifactId>docker-maven-plugin</artifactId>
              <configuration>
                <images>
                  <image>
                    <name>demo-zeroconfig-schemadiscovery-registry-server:${project.version}</name>
                    <alias>demo-zeroconfig-schemadiscovery-registry-server</alias>
                    <run>
                      <env>
                        <JAR_PATH>/maven/maven/demo-zeroconfig-schemadiscovery-registry-server-${project.version}.jar
                        </JAR_PATH>
                      </env>
                      <wait>
                        <log>Service information is shown below</log>
                        <tcp>
                          <ports>
                            <port>8080</port>
                          </ports>
                        </tcp>
                        <time>120000</time>
                      </wait>
                      <ports>
                        <port>8080:8080</port>
                      </ports>
                    </run>
                  </image>

                  <image>
                    <name>demo-zeroconfig-schemadiscovery-registry-client:${project.version}</name>
                    <alias>demo-zeroconfig-schemadiscovery-registry-client</alias>
                    <run>
                      <env>
                        <JAR_PATH>/maven/maven/demo-zeroconfig-schemadiscovery-registry-client-${project.version}.jar
                        </JAR_PATH>
                      </env>
                      <wait>
                        <log>Service information is shown below</log>
                        <tcp>
                          <ports>
                            <port>8082</port>
                          </ports>
                        </tcp>
                        <time>120000</time>
                      </wait>
                      <ports>
                        <port>8082:8082</port>
                      </ports>
                    </run>
                  </image>

                  <image>
                    <name>demo-zeroconfig-schemadiscovery-registry-edge:${project.version}</name>
                    <alias>demo-zeroconfig-schemadiscovery-registry-edge</alias>
                    <run>
                      <env>
                        <JAR_PATH>/maven/maven/demo-zeroconfig-schemadiscovery-registry-edge-${project.version}.jar
                        </JAR_PATH>
                      </env>
                      <wait>
                        <log>Service information is shown below</log>
                        <tcp>
                          <ports>
                            <port>8888</port>
                          </ports>
                        </tcp>
                        <time>120000</time>
                      </wait>
                      <ports>
                        <port>8888:8888</port>
                      </ports>
                    </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>
          </plugins>
        </pluginManagement>
        <plugins>
          <plugin>
            <groupId>io.fabric8</groupId>
            <artifactId>docker-maven-plugin</artifactId>
          </plugin>
          <plugin>
            <groupId>org.codehaus.gmavenplus</groupId>
            <artifactId>gmavenplus-plugin</artifactId>
            <executions>
              <execution>
                <id>add-default-properties</id>
                <phase>initialize</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <scripts>
                    <script>
                      project.properties.setProperty('docker.hostname', 'localhost')
                      log.info("Docker hostname is " + project.properties['docker.hostname'])
                    </script>
                  </scripts>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <configuration>
              <argLine>${jacoco.failsafe.argLine}</argLine>
            </configuration>
            <executions>
              <execution>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>


