<?xml version="1.0" encoding="UTF-8"?>
<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>com.atlassian.pom</groupId>
        <artifactId>closedsource-pom</artifactId>
        <version>5.0.29</version>
    </parent>

    <groupId>com.atlassian.synchrony</groupId>
    <artifactId>synchrony-proxy</artifactId>
    <version>2.1.4</version>
    <packaging>war</packaging>

    <name>Synchrony Proxy</name>
    <description>A reverse proxy web app for Synchrony</description>
    <organization>
        <name>Atlassian</name>
        <url>http://atlassian.com</url>
    </organization>

    <scm>
        <connection>scm:git:ssh://git@stash.atlassian.com:7997/confserver/synchrony-proxy.git</connection>
        <developerConnection>scm:git:ssh://git@stash.atlassian.com:7997/confserver/synchrony-proxy.git</developerConnection>
        <url>https://stash.atlassian.com/projects/CONFSERVER/repos/synchrony-proxy</url>
        <tag>synchrony-proxy-2.1.4</tag>
    </scm>

    <properties>
        <jetty.version>9.4.19.v20190610</jetty.version>
        <org.springframework.version>5.1.14.RELEASE</org.springframework.version>
        <slf4j.version>1.7.25</slf4j.version>
        <logback.version>1.2.3</logback.version>

        <cargo.version>1.7.6</cargo.version>
        <maven-surefire.version>2.22.2</maven-surefire.version>
        <maven.resources.version>3.1.0</maven.resources.version>
        <xvfb.enable>true</xvfb.enable>
        <xvfb.display>:20</xvfb.display>
        <webdriver.browser>firefox</webdriver.browser>

        <!-- Synchrony Proxy -->
        <synchrony.proxy.webapp.context>synchrony-proxy</synchrony.proxy.webapp.context>

        <!-- Confluence -->
        <confluence.version>7.0.5</confluence.version>
        <confluence.data.version>${confluence.version}</confluence.data.version>
        <confluence.stateless.testrunner.version>7.2.2</confluence.stateless.testrunner.version>
        <confluence.pageobjects.version>9.0.12</confluence.pageobjects.version>
        <confluence.webapp.context>confluence</confluence.webapp.context>
        <confluence.home>${project.build.directory}/confluence-home</confluence.home>
        <test.admin.user>admin</test.admin.user>
        <test.admin.password>admin</test.admin.password>
        <test.admin.user.name>A. D. Ministrator</test.admin.user.name>
        <test.admin.user.email>admintest@atlassian.com</test.admin.user.email>
        <skipTests>false</skipTests>

        <!-- Used by cargo -->
        <cargo.container.containerid>tomcat9x</cargo.container.containerid>
        <cargo.tomcat.version>9.0.21-atlassian-hosted</cargo.tomcat.version>
        <cargo.container.zipurlinstaller.installdir>${project.build.directory}/installs</cargo.container.zipurlinstaller.installdir>
        <tomcat.cargo.artifact.classifier>windows-x86</tomcat.cargo.artifact.classifier>
        <cargo.timeout>240000</cargo.timeout>
        <http.port>8080</http.port>
        <controller.port>1099</controller.port>
        <ajp.port>8009</ajp.port>

        <!-- JVM args -->
        <jvm.args.custom />
        <jvm.args.extra />
        <jvm.args.xmx>1g</jvm.args.xmx>
        <jvm.clustered.args.xmx>1g</jvm.clustered.args.xmx>
        <jvm.args.confluence.attachment.data.mode>LOCAL_ONLY</jvm.args.confluence.attachment.data.mode>
        <!-- Taken from https://confluence.atlassian.com/display/CONFKB/How+to+Enable+Garbage+Collection+(GC)+Logging -->
        <jvm.args.gc.common>-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:-PrintTenuringDistribution -XX:+PrintGCCause -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M</jvm.args.gc.common>
        <jvm.args.gc>-Xloggc:${project.build.directory}/output-gc.log ${jvm.args.gc.common}</jvm.args.gc>
        <jvm.args.common>-Xmx${jvm.args.xmx} -Djava.awt.headless=true -Datlassian.plugins.enable.wait=300 ${jvm.args.custom} ${jvm.args.extra} -XX:+HeapDumpOnOutOfMemoryError -Dconfluence.invalidate.rpc.sessions=true -Dconfluence.disable.mailpolling=true  -Dconfluence.index.manager.lock.timeout=5 -Ddiscovery.test.mode=true -Dconfluence.attachment.data.mode=${jvm.args.confluence.attachment.data.mode} -XX:+IgnoreUnrecognizedVMOptions</jvm.args.common>
        <jvm.args>${jvm.args.gc} ${jvm.args.common}</jvm.args>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.atlassian.confluence</groupId>
                <artifactId>confluence-webapp</artifactId>
                <version>${confluence.version}</version>
                <type>war</type>
            </dependency>
            <dependency>
                <groupId>com.atlassian.confluence</groupId>
                <artifactId>confluence-acceptance-test</artifactId>
                <version>${confluence.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-websocket</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-client</artifactId>
            <version>${jetty.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-http</artifactId>
            <version>${jetty.version}</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-proxy</artifactId>
            <version>${jetty.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.9</version>
        </dependency>

        <!--despite maven may say that jackson dependency is unused, that's not true :)
        It is still required for objects serialisation
        Pls. see https://jira.atlassian.com/browse/CONFSERVER-58522 for more details-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.10.0</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <!-- Confluence dependencies -->
        <dependency>
            <groupId>com.atlassian.confluence</groupId>
            <artifactId>confluence-webapp</artifactId>
            <type>war</type>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.atlassian.confluence</groupId>
            <artifactId>confluence-acceptance-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-configuration2</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>com.atlassian.confluence</groupId>
            <artifactId>confluence-stateless-test-runner</artifactId>
            <version>${confluence.stateless.testrunner.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.atlassian.confluence</groupId>
            <artifactId>confluence-webdriver-pageobjects</artifactId>
            <version>${confluence.pageobjects.version}</version>
            <scope>test</scope>
        </dependency>
        <!-- This is to avoid "field FIREFOX_24 not found" exceptions -->
        <dependency>
            <groupId>net.sourceforge.jwebunit</groupId>
            <artifactId>jwebunit-htmlunit-plugin</artifactId>
            <version>3.3</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <id>enforce-banned-dependencies</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <bannedDependencies>
                                    <includes>
                                        <include>com.atlassian.confluence</include>
                                    </includes>
                                </bannedDependencies>
                            </rules>
                            <fail>true</fail>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <workDirectory>target/war/work</workDirectory>
                    <overlays>
                        <overlay>
                            <groupId>com.atlassian.confluence</groupId>
                            <artifactId>confluence-webapp</artifactId>
                            <skip>true</skip>
                        </overlay>
                        <overlay>
                            <!-- empty groupId/artifactId represents the current build -->
                        </overlay>
                    </overlays>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>${maven.resources.version}</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven-surefire.version}</version>
                <configuration>
                    <includes>
                        <include>**/*Tests.java</include>
                    </includes>
                    <excludes>
                        <exclude>**/Abstract*.java</exclude>
                    </excludes>
                    <junitArtifactName>junit:junit</junitArtifactName>
                    <argLine>-Xmx512m</argLine>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <version>${cargo.version}</version>
                <configuration>
                    <container>
                        <containerId>${cargo.container.containerid}</containerId>
                        <artifactInstaller>
                            <groupId>org.apache.tomcat</groupId>
                            <artifactId>apache-tomcat</artifactId>
                            <version>${cargo.tomcat.version}</version>
                            <classifier>${tomcat.cargo.artifact.classifier}</classifier>
                            <extractDir>${cargo.container.zipurlinstaller.installdir}</extractDir>
                        </artifactInstaller>
                        <timeout>${cargo.timeout}</timeout>
                        <output>${project.build.directory}/output.log</output>
                        <systemProperties>
                            <confluence.browser.language.enabled>true</confluence.browser.language.enabled>
                            <LogMessageRecordingAppender.enabled>true</LogMessageRecordingAppender.enabled>
                            <upm.pac.disable>true</upm.pac.disable>
                            <confluence.home>${confluence.home}</confluence.home>
                            <synchrony.proxy.enabled>true</synchrony.proxy.enabled>
                        </systemProperties>
                    </container>
                    <configuration>
                        <home>${project.build.directory}/${cargo.container.containerid}/container</home>
                        <properties>
                            <cargo.servlet.port>${http.port}</cargo.servlet.port>
                            <cargo.servlet.uriencoding>UTF-8</cargo.servlet.uriencoding>
                            <cargo.rmi.port>${controller.port}</cargo.rmi.port>
                            <cargo.tomcat.ajp.port>${ajp.port}</cargo.tomcat.ajp.port>
                            <cargo.jvmargs>${jvm.args}</cargo.jvmargs>
                            <cargo.datasource.datasource />
                            <xvfb.enable>${xvfb.enable}</xvfb.enable>
                            <xvfb.display>${xvfb.display}</xvfb.display>

                            <!-- sanity tests -->
                            <confluence.base.url>http://localhost:${http.port}/${confluence.webapp.context}</confluence.base.url>
                            <confluence.test.user.username>${test.admin.user}</confluence.test.user.username>
                            <confluence.test.user.password>${test.admin.password}</confluence.test.user.password>
                            <confluence.test.user.full.name>${test.admin.user.name}</confluence.test.user.full.name>
                            <confluence.test.user.email>${test.admin.user.email}</confluence.test.user.email>
                            <confluence.test.user2.username>user</confluence.test.user2.username>
                            <confluence.test.user2.password>user</confluence.test.user2.password>
                            <confluence.test.space.key>SMOKE</confluence.test.space.key>
                            <confluence.capability.signup>false</confluence.capability.signup>
                            <confluence.capability.copyspace>false</confluence.capability.copyspace>
                            <confluence.capability.ual>false</confluence.capability.ual>
                            <confluence.capability.websudo>true</confluence.capability.websudo>
                            <confluence.capability.adminaccess>true</confluence.capability.adminaccess>
                            <confluence.capability.htmlmacros>false</confluence.capability.htmlmacros>
                            <confluence.capability.flushindex>true</confluence.capability.flushindex>
                            <confluence.capability.skipgadgets>true</confluence.capability.skipgadgets>
                        </properties>
                    </configuration>
                    <deployables>
                        <deployable>
                            <groupId>com.atlassian.confluence</groupId>
                            <artifactId>confluence-webapp</artifactId>
                            <type>war</type>
                            <properties>
                                <context>${confluence.webapp.context}</context>
                            </properties>
                            <pingURL>http://localhost:${http.port}/${confluence.webapp.context}</pingURL>
                            <pingTimeout>240000</pingTimeout>
                        </deployable>
                        <deployable>
                            <groupId>${project.groupId}</groupId>
                            <artifactId>${project.artifactId}</artifactId>
                            <type>war</type>
                            <properties>
                                <context>${confluence.webapp.context}/${synchrony.proxy.webapp.context}</context>
                            </properties>
                            <pingURL>http://localhost:${http.port}/${confluence.webapp.context}/${synchrony.proxy.webapp.context}/healthcheck</pingURL>
                            <pingTimeout>240000</pingTimeout>
                        </deployable>
                    </deployables>
                </configuration>
                <executions>
                    <execution>
                        <id>start-server</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>start</goal>
                        </goals>
                        <configuration>
                            <skip>${skipTests}</skip>
                        </configuration>
                    </execution>
                    <execution>
                        <id>stop-server</id>
                        <phase>post-integration-test</phase>
                        <goals>
                            <goal>stop</goal>
                        </goals>
                        <configuration>
                            <skip>${skipTests}</skip>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>${maven-surefire.version}</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.surefire</groupId>
                        <artifactId>surefire-junit4</artifactId>
                        <version>${maven-surefire.version}</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <failIfNoTests>true</failIfNoTests>
                    <dependenciesToScan>
                        <dependency>com.atlassian.confluence:confluence-acceptance-test</dependency>
                    </dependenciesToScan>
                </configuration>
                <executions>
                    <execution>
                        <id>00_setup</id>
                        <goals>
                            <goal>integration-test</goal>
                        </goals>
                        <configuration>
                            <includes>
                                <include>com/atlassian/confluence/setup/SetupAcceptanceTest.java</include>
                            </includes>
                        </configuration>
                    </execution>
                    <execution>
                        <id>50_integration_tests</id>
                        <goals>
                            <goal>integration-test</goal>
                        </goals>
                        <configuration>
                            <includes>
                                <include>com/atlassian/confluence/setup/StartupErrorTest.java</include>
                                <include>com/atlassian/synchrony/proxy/it/SanityEditorTest.java</include>
                                <include>com/atlassian/synchrony/proxy/it/HealthCheckEndpointAcceptanceTest.java</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>java-modern</id>
            <activation>
                <jdk>[9,]</jdk>
                <os>
                    <family>!Windows</family>
                </os>
            </activation>
            <properties>
                <!-- Java 11 GC log config -->
                <jvm.args.gc.common />
                <jvm.args.gc>-Xlog:gc+age=debug:file=${project.build.directory}/output-gc.log::filecount=5,filesize=2M</jvm.args.gc>
            </properties>
        </profile>
        <profile>
            <id>java-modern-windows</id>
            <activation>
                <jdk>[9,]</jdk>
                <os>
                    <family>Windows</family>
                </os>
            </activation>
            <properties>
                <!-- Java 11 GC log config -->
                <!-- Java 11 needs escapes for windows paths, but Cargo 1.7.6 strips the quotes, even inside escape sequences -->
                <jvm.args.gc.common />
                <jvm.args.gc />
            </properties>
        </profile>
    </profiles>
</project>
