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

    Copyright (c) 1997, 2018 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

-->

<!--
INSTRUCTIONS for running nucleus admin dev tests.

To run all of the tests using the staged nucleus build in distributions/nucleus:
    mvn test

To run just one test:
    mvn -Dtest=MiscCommandsTest,NucleusStartStopTest test

Some tests require testing libraries/modules in running distribution. Please do
NOT start test against running instance.

To run tests based on your own install:
    mvn -Dnucleus.home=...somedirectory/nucleus test

To see the output of a test run, look in the target/surefire-reports directory.
The TEST-TestSuite.xml file is especially useful.

INSTRUCTIONS for adding tests.

Copy one of the existing test files, such as MiscCommandsTest.java.  Then add
tests.  The file will automatically be picked up as part of the suite. There is
no need to modify this pom.xml file or any other configuration file. Useful
utilities are in the NucleusTestUtils class.

Test suit contains place for additional modules/libraries with testing content
that are copied into the Nucleus before start and removed after stop:
- src/addon/module/* -> <Nucleus>/modules
(If you need to add your testing module to different directory in nucleus than
modify org.glassfish.nucleus.admin.NucleusStartStopTest static initializer
of COPY_LIB map constant.)

-->
<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.glassfish.main.tests</groupId>
        <artifactId>nucleus-tests</artifactId>
        <version>5.1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <groupId>org.glassfish.tests</groupId>
    <artifactId>nucleus-admin</artifactId>
    <name>Nucleus Admin Devtests</name>
    <version>5.1.0-SNAPSHOT</version>
    <description>This pom describes how to run admin developer tests on the Nucleus Bundle</description>
    <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12.4</version>
            <configuration>
              <properties>
                <property>
                  <name>listener</name>
                  <value>org.testng.reporters.VerboseReporter</value>
                </property>
                <property>
                  <name>reporter</name>
                  <value>listenReport.Reporter</value>
                </property>
                <runOrder>alphabetical</runOrder>
              </properties>
            </configuration>
          </plugin>

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-invoker-plugin</artifactId>
            <version>1.8</version>
            <configuration>
                <pomIncludes>
                    <pomInclude>modules/*/pom.xml</pomInclude>
                    <pomInclude>asadmin/*/pom.xml</pomInclude>
                </pomIncludes>
                <goals>
                    <goal>clean</goal>
                    <goal>package</goal>
                </goals>
                <projectsDirectory>${basedir}/src/addon/</projectsDirectory>
                <cloneProjectsTo>${project.build.directory}/addon</cloneProjectsTo>
            </configuration>
            <executions>
              <execution>
                <id>build-addons</id>
                <phase>process-test-resources</phase>
                <goals>
                  <goal>run</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.glassfish.main.common</groupId>
            <artifactId>common-util</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.glassfish.main.tests</groupId>
            <artifactId>utils-ng</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-server</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.inject</groupId>
            <artifactId>jersey-hk2</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.main.admin</groupId>
            <artifactId>rest-client</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.hk2</groupId>
            <artifactId>hk2-api</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.main.admin</groupId>
            <artifactId>rest-service</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
            <type>jar</type>
        </dependency>
    </dependencies>
</project>

