/*
 * Copyright (c) 1998, 2023 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,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

// Contributors:
//     Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.tests.sessionsxml;

import org.eclipse.persistence.testing.framework.TestModel;
import org.eclipse.persistence.testing.framework.TestProblemException;
import org.eclipse.persistence.testing.framework.TestSuite;

public class SessionsXMLTestModel extends TestModel {
    public SessionsXMLTestModel() {
        super();
        setDescription("This model tests the Sessions XML feature.");
    }

    public SessionsXMLTestModel(boolean isSRG) {
        this();
        this.isSRG = isSRG;
    }

    @Override
    public void addTests() {
        addTest(getSessionsXMLLoadingTestSuite());
        addTest(getSessionsXMLRCMTestSuite());
        addTest(getSessionManagerTestSuite());
        addTest(getSessionXMLSchemaTestSuite());
    }

    //SRG test set is maintained by QA only, do NOT add any new tests into it.

    @Override
    public void addSRGTests() {
        addTest(getSRGSessionXMLSchemaTestSuite());
    }

    public TestSuite getSessionsXMLLoadingTestSuite() {
        TestSuite suite = new TestSuite();
        suite.setName("Sessions.xml standard loading tests");
        // Added test for bug 2700794
        suite.addTest(new JavaLogSessionsXMLTest());
        // Bug 391278
        suite.addTest(new JavaLogSessionNamespaceTest());
        return suite;
    }

    public TestSuite getSessionXMLSchemaTestSuite() {
        TestSuite suite = new TestSuite();
        suite.setName("XML Schema tests");
        suite.addTest(new SessionsXMLSchemaTest());
        addSessionsXMLSchemaWriteTest(suite);
        suite.addTest(new SessionsXMLSchemaNoLoggingTest());
        suite.addTest(new SessionsXMLSchemaDefaultValueTest());
        suite.addTest(new SessionsXMLServerSessionSchemaTest());
        suite.addTest(new SessionsXMLSessionEventListenerTest());
        if (!getExecutor().isServer) {
            suite.addTest(new SessionsXMLSchemaReloadTest());
        }
        suite.addTest(new SessionsXMLSchemaJavaLogTest());
        suite.addTest(new SessionsXMLSchemaSequencingTest());
        suite.addTest(new SessionsXMLSchemaInvalidTagTest());
        suite.addTest(new SessionsXMLSchemaMisplacedDependentTagTest());
        suite.addTest(new SessionsXMLSchemaIncorrectTagValuesTest());
        suite.addTest(new SessionsXMLSchemaProjectXMLTest());
        suite.addTest(new SessionsXMLSchemaWebsphere61PlatformTest());
        suite.addTest(new SessionsXMLSchemaWeblogicPlatformTest());
        suite.addTest(new SessionsXMLSchemaLoggingOptionsTest());
        suite.addTest(new SessionsXMLSchemaJBossPlatformTest());
        suite.addTest(new SessionsXMLSchemaWildFlyPlatformTest());
        suite.addTest(new SessionManagerGetMultipleSessionsTest());
        suite.addTest(new FailoverLoginSettingsTest());

        return suite;
    }

    //SRG test set is maintained by QA only, do NOT add any new tests into it.

    public TestSuite getSRGSessionXMLSchemaTestSuite() {
        TestSuite suite = new TestSuite();
        suite.setName("XML Schema tests");
        suite.addTest(new SessionsXMLSchemaTest());
        addSessionsXMLSchemaWriteTest(suite);
        return suite;
    }

    public TestSuite getSessionsXMLRCMTestSuite() {
        TestSuite suite = new TestSuite();
        suite.setName("sessions.xml with RCM loading tests");
        suite.addTest(new RcmWithRmiAndJndiTest());
        suite.addTest(new RcmWithRmiAndRmiRegistryTest());
        suite.addTest(new RcmWithTransportClassTest());
        suite.addTest(new RcmEncryptedPasswordTest());
        suite.addTest(new RCMWithJmsTopicTest());
        return suite;
    }

    public TestSuite getSessionManagerTestSuite() {
        TestSuite suite = new TestSuite();
        suite.setName("SessionManager tests");

        suite.addTest(new SessionManagerGetSessionStringStringTest());
        suite.addTest(new SessionManagerGetSessionNotFoundTest());
        suite.addTest(new MWConfigModelEncryptionTest());
        return suite;
    }

    public void addSessionsXMLSchemaWriteTest(TestSuite suite){

        try{
            Class<?> testCaseClass = Class.forName("org.eclipse.persistence.testing.tests.sessionsxml.SessionsXMLSchemaWriteTest");
            junit.framework.Test testCase = (junit.framework.Test)testCaseClass.getConstructor().newInstance();
            suite.addTest(testCase);
        } catch (Exception e){
            getSession().logMessage("Unable to load SessionsXMLSchemaWriteTest.  This usually occurs when the tests were compiled " +
                    " on a non-Oracle environment. If you are not running on Oracle, this is not a problem.");
            if (getSession().getPlatform().isOracle()){
                throw new TestProblemException("Could not load: SessionsXMLSchemaWriteTest", e);
            }
        }
    }
}
