<!--

    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

-->

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<!--

    Tests for "WD" (Web Distribution, aka Jakarta EE Web Profile)

 -->
<suite name="QuickLookTests" verbose="2">

    <parameter name="admin.url" value="http://localhost:4848/__asadmin" />
    <parameter name="admin.user" value="admin" />
    <parameter name="admin.password" value="" />
    <parameter name="admin.console.url" value="http://localhost:4848/" />
    <parameter name="resources.xml.relative.path" value="admin/resources/resources.xml" />

    <test name="admincli_tests">
        <classes>
            <class name="test.admincli.RestartDomainTests" />
            <class name="test.admincli.ExistStatusTests" />
        </classes>
    </test>

    <!-- AMX -->
    <parameter name="amx.debug" value="true" />
    <!-- AMX: port of the JMX RMI -->
    <parameter name="amx.rmiport" value="8686" />

    <!-- AMX -->
    <test name="amx_tests">
        <classes>
            <class name="amxtest.AMXCoreTests" />
            <class name="amxtest.AMXProxyTests" />
            <class name="amxtest.AMXConfigProxyTests" />
            <class name="amxtest.AMXOtherTests" />
        </classes>
    </test>

    <!--  
    <test name="adminconsole_tests">
        <classes>
            <class name="test.admin.AdminConsoleTests" />
        </classes>
    </test>
    -->

    <test name="rest_tests">
        <classes>
            <class name="test.admin.RestTests" />
        </classes>
    </test>

    <test name="deploy_upload_test">
        <classes>
            <class name="test.web.jsp.hello.HelloJSPTestNG" />
        </classes>
    </test>

    <test name="jsf_hello_world">
        <classes>
            <class name="test.jsf.astrologer.JSFWebTestNG" />
        </classes>
    </test>

    <test name="jsf_injection">
        <classes>
            <class name="test.web.jsfinjection.JSFInjectionTestNG" />
        </classes>
    </test>

    <test name="jdbc_user_tx">
        <classes>
            <class name="test.jdbc.jdbcusertx.JdbcUserTxTestNG" />
        </classes>
    </test>

    <test name="jpa_inject_emf">
        <classes>
            <class name="test.jpa.jpainjectemf.JpaInjectEMFTestNG" />
        </classes>
    </test>
    <test name="jpa_validation">
        <classes>
            <class
                name="test.jpa.jpavalidation.JpaValidationTestNG" />
        </classes>
    </test>

    <test name="security_hello_jsp">
        <classes>
            <class
                name="test.security.hellojsp.HelloSecurityTestNG" />
        </classes>
    </test>

    <test name="security_hello_basicauth">
        <classes>
            <class name="test.security.basicauth.BasicAuthTestNG" />
        </classes>
    </test>

    <test name="ejb_stateful_cmt_ni_war">
        <classes>
            <class name="test.ejb.slsbnicmt.SlsbnicmtTestNG" />
            <class name="test.ejb.sfulnoi.SfulnoiTestNG" />
        </classes>
    </test>

    <test name="bv_servlet_simple">
        <classes>
            <class
                name="test.bv.servlet.simple.SimpleBVServletTestNG" />
        </classes>
    </test>

    <test name="weld_tests">
        <classes>
            <class name="test.web.numberguess.NumberGuessTestNG" />
            <class name="test.weld.osgi.OsgiWeldTestNG" />
            <class name="test.web.extensions.ExtensionsTestNG" />
        </classes>
    </test>

    <test name="asadmin_tests">
        <classes>
            <class name="test.admin.JvmOptionTests" />
            <class name="test.admin.JdbcConnectionPoolTests" />
            <class name="test.admin.WebtierTests" />
            <class name="test.admin.OsgiAsadminTest" />
        </classes>
    </test>

<!-- Uncomment when/if fighterfish is reenabled
    <test name="osgi_test">
        <classes>
            <class name="test.osgi.hello.HelloOSGITestNG" />
        </classes>
    </test>
-->
</suite>

