<?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">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.skywalking.plugin.nginx-lua</groupId>
        <artifactId>e2e</artifactId>
        <version>1.0.0</version>
    </parent>
    
    <artifactId>e2e-test-kong</artifactId>

    <name>SkyWalking Kong Agent Test</name>
    <packaging>jar</packaging>

    <build>
        <plugins>
            <plugin>
                <groupId>io.fabric8</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <configuration>
                    <autoCreateCustomNetworks>true</autoCreateCustomNetworks>
                    <images>
                        <image>
                            <name>postgres:9.6</name>
                            <alias>kong-database</alias>
                            <run>
                                <env>
                                    <POSTGRES_DB>kong</POSTGRES_DB>
                                    <POSTGRES_USER>kong</POSTGRES_USER>
                                    <POSTGRES_PASSWORD>kong</POSTGRES_PASSWORD>
                                </env>
                                <hostname>kong-database</hostname>
                                <ports>
                                    <port>+pg.host:pg.port:5432</port>
                                </ports>
                                <wait>
                                    <log>.*PostgreSQL init process complete; ready for start up.*</log>
                                </wait>
                                <net>custom</net>
                            </run>
                        </image>
                        <image>
                            <name>skywalking-collector:${project.version}</name>
                            <alias>skywalking-collector</alias>
                            <run>
                                <ports>
                                    <port>+collector.host:collector.port:12800</port>
                                </ports>
                                <wait>
                                    <http>
                                        <url>http://${docker.host.address}:${collector.port}/receiveData</url>
                                    </http>
                                    <time>30000</time>
                                </wait>
                                <net>custom</net>
                                <hostname>skywalking-collector</hostname>
                            </run>
                        </image>
                        <image>
                            <name>kong:2.3.3</name>
                            <alias>kong-with-skywalking</alias>
                            <run>
                                <volumes>
                                    <bind>
                                        <volume>${project.basedir}/docker:/docker</volume>
                                        <volume>${project.basedir}/../../..:/skywalking-kong</volume>
                                    </bind>
                                </volumes>
                                <ports>
                                    <port>kong.port:8000</port>
                                    <port>admin.port:8001</port>
                                </ports>
                                <env>
                                    <KONG_DATABASE>postgres</KONG_DATABASE>
                                    <KONG_PG_HOST>kong-database</KONG_PG_HOST>
                                    <KONG_PG_PASSWORD>kong</KONG_PG_PASSWORD>
                                    <KONG_CASSANDRA_CONTACT_POINTS>kong-database</KONG_CASSANDRA_CONTACT_POINTS>
                                    <KONG_NGINX_HTTP_LUA_SHARED_DICT>tracing_buffer 128m
                                    </KONG_NGINX_HTTP_LUA_SHARED_DICT>
                                    <KONG_ADMIN_LISTEN>0.0.0.0:8001, 0.0.0.0:8444 ssl</KONG_ADMIN_LISTEN>
                                </env>
                                <net>custom</net>
                                <dependsOn>
                                    <container>kong-database</container>
                                    <container>skywalking-collector</container>
                                </dependsOn>
                                <links>
                                    <link>kong-database</link>
                                </links>
                                <wait>
                                    <http>
                                        <url>
                                            http://${docker.host.address}:${admin.port}
                                        </url>
                                    </http>
                                    <time>1800000</time>
                                </wait>
                                <cmd>/docker/entrypoint.sh</cmd>
                            </run>
                        </image>
                    </images>
                </configuration>
            </plugin>
        
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>${maven-failsafe-plugin.version}</version>
                <configuration>
                    <systemPropertyVariables>
                        <kong.admin.baseURL>http://${docker.host.address}:${admin.port}</kong.admin.baseURL>
                        <service.entry>http://${docker.host.address}:${kong.port}/mock</service.entry>
                        <collector.baseURL>http://${collector.host}:${collector.port}</collector.baseURL>
                        <collector.in.baseURL>http://skywalking-collector:12800</collector.in.baseURL>
                    </systemPropertyVariables>
                </configuration>
                <executions>
                    <execution>
                        <id>integration-test</id>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                        <configuration>
                            <excludes>
                                <exclude>none</exclude>
                            </excludes>
                            <includes>
                                <include>**/*ITCase.java</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
