<?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.6</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.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>
              <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>


