<?xml version="1.0" encoding="utf-8" ?>
<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one or more
  ~ contributor license agreements.  See the NOTICE file distributed with
  ~ this work for additional information regarding copyright ownership.
  ~ The ASF licenses this file to You under the Apache License, Version 2.0
  ~ (the "License"); you may not use this file except in compliance with
  ~ the License.  You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="dolphinscheduler_e2e" parallel="true">
    <test name="dolphinscheduler_test" preserve-order="true">
        <groups>
            <run>
                <include name="functionTests"/>
            </run>
        </groups>

        <classes>
            <class name="org.apache.dolphinscheduler.testcase.LoginTest"></class>
            <class name="org.apache.dolphinscheduler.testcase.security.TenantManageTest"></class>
            <class name="org.apache.dolphinscheduler.testcase.security.UserManageTest"></class>
            <class name="org.apache.dolphinscheduler.testcase.project.CreateProjectTest"></class>
            <class name="org.apache.dolphinscheduler.testcase.project.CreateWorkflowTest"></class>
            <class name="org.apache.dolphinscheduler.testcase.deleteData.DeleteWorkflowTest"></class>
            <class name="org.apache.dolphinscheduler.testcase.deleteData.DeleteProjectTest"></class>
            <class name="org.apache.dolphinscheduler.testcase.deleteData.DeleteUserTest"></class>
            <class name="org.apache.dolphinscheduler.testcase.deleteData.DeleteTenantTest"></class>
        </classes>
    </test>

    <listeners>
        <listener class-name="org.uncommons.reportng.HTMLReporter" />
        <listener class-name="org.uncommons.reportng.JUnitXMLReporter" />
    </listeners>
</suite>
