<!--

    Copyright (c) 2021 Contributors to Eclipse Foundation.
    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" >

<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="security_app_permissions">
        <classes>
            <class name="test.security.appperms.ApppermsTestNG" />
        </classes>
    </test>
    <test name="ejb_remoteview">
        <classes>
            <class name="test.ejb.remoteview.RemoteViewTestNG" />
        </classes>
    </test>

    <test name="ejb_singleton_ear_redeploy">
        <classes>
            <class name="test.ejb.singleton.SingletonTestNG" />
        </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="ejb_cmp_ear">
        <classes>
            <class name="test.CmpRosterTestNG" />
        </classes>
    </test>

    <!-- MDB tests parameters -->
    <parameter name="MDB_APP_DIR" value="./dist/mdb/" />
    <parameter name="BATCH_FILE1" value="ejb/mdb/create_resources.asadmin" />
    <parameter name="BATCH_FILE2" value="ejb/mdb/delete_resources.asadmin" />
    <test name="MDB_tests">
        <classes>
            <class name="test.mdb.MDBTests" />
        </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>
-->

    <test name="jms_injection_jmsContext">
        <classes>
            <class name="test.jms.injection.ClientTestNG" />
        </classes>
    </test>
</suite>

