<?xml version="1.0" encoding="UTF-8"?>
<!--

    Copyright (c) 2015, 2021 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<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.glassfish.jersey.tests.memleaks.redeployment</groupId>
        <artifactId>project</artifactId>
        <version>2.36-SNAPSHOT</version>
    </parent>

    <artifactId>redeployment-hello-world-app-ref</artifactId>
    <name>jersey-tests-memleak-redeployment-hello-world-app-ref</name>

    <description>
        Maven module that tests :helloworld-webapp:war in order to prevent regression of a problem where a repetitive redeployment
        may have caused memory leaks.

        To run this test, execute from Jersey root dir:

        [1] Glassfish: mvn install -am -pl :redeployment-hello-world-app-ref -P gf4,memleak-redeployment

        [2] Weblogic: mvn install -am -pl :redeployment-hello-world-app-ref -P wls,memleak-redeployment

        [3] Tomcat: mvn install -am -pl :redeployment-hello-world-app-ref -P tomcat,memleak-redeployment
    </description>

    <properties>
        <memleak.jvm.maxheap>256m</memleak.jvm.maxheap>
        <memleak.tomcat.maxheap>56m</memleak.tomcat.maxheap>

        <external.container.warPath>${org.glassfish.jersey.examples:helloworld-webapp:war}</external.container.warPath>
        <external.container.contextRoot>helloworld-webapp</external.container.contextRoot>

        <memleak.redeploy.count>200</memleak.redeploy.count>
        <memleak.redeploy.expectedStatus>200</memleak.redeploy.expectedStatus>
        <memleak.redeploy.requestPathQuery>${external.container.contextRoot}/helloworld</memleak.redeploy.requestPathQuery>
    </properties>

    <profiles>
        <profile>
            <id>tomcat</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-enforcer-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>enforce-threadlocals-left-cleaned</id>
                                <goals>
                                    <goal>enforce</goal>
                                </goals>
                                <phase>${phase.redeployment.post-integration-test}</phase>
                                <configuration>
                                    <!-- assure that Tomcat ThreadLocal memory leak detection messages weren't included in the Tomcat output.
                                    If so, ThreadLocals aren't kept clean and that's what users do not like (see JERSEY-2890). -->
                                    <rules>
                                        <rule implementation="org.glassfish.jersey.test.maven.rule.PatternNotMatchedInFileRule">
                                            <file>${external.container.logFile}</file>
                                            <pattern>
                                                <![CDATA[.*SEVERE.*The web application.*created a ThreadLocal with key.*avoid a probable memory leak.*]]></pattern>
                                            <maxMatchedLines>3</maxMatchedLines>
                                        </rule>
                                    </rules>
                                    <fail>true</fail>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>memleak-reproducer</id>
            <properties>
                <memleak.jersey.version>2.19</memleak.jersey.version>
            </properties>
        </profile>
    </profiles>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.glassfish.jersey.test-framework.maven</groupId>
                <artifactId>container-runner-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
            </plugin>

            <plugin>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>resolve-maven-dependencies</id>
                        <goals>
                            <goal>properties</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>


    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.examples</groupId>
            <artifactId>helloworld-webapp</artifactId>
            <type>war</type>
            <version>2.36-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>
