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

    Copyright (c) 1997, 2020 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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.glassfish.main.tests</groupId>
        <artifactId>nucleus-tests</artifactId>
        <version>6.0.0-SNAPSHOT</version>
    </parent>

    <groupId>org.glassfish.tests</groupId>
    <artifactId>nucleus-admin</artifactId>

    <name>Nucleus Admin Devtests</name>
    <description>This pom describes how to run admin developer tests on the Nucleus Bundle</description>

    <dependencies>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <scope>test</scope>
        </dependency>
        
        <dependency>
            <groupId>org.glassfish.hk2</groupId>
            <artifactId>hk2-api</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.main.admin</groupId>
            <artifactId>rest-service</artifactId>
            <version>${project.version}</version>
            <type>jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.main.common</groupId>
            <artifactId>common-util</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.main.tests</groupId>
            <artifactId>utils-ng</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-invoker-plugin</artifactId>
                <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>
        
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M4</version>
                <configuration>
                    <properties>
                        <runOrder>alphabetical</runOrder>
                    </properties>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
