blob: 9abb19ac344bc43b6d36ee60702f5da59c122d87 [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 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.types;
import java.util.Enumeration;
import java.util.TimeZone;
import org.eclipse.persistence.internal.helper.Helper;
import org.eclipse.persistence.internal.sessions.AbstractSession;
import org.eclipse.persistence.platform.database.oracle.Oracle9Platform;
import org.eclipse.persistence.sessions.DatabaseSession;
import org.eclipse.persistence.testing.framework.*;
import org.eclipse.persistence.testing.tests.types.CalendarToTSTZWithoutSessionTZTest;
public class OracleTIMESTAMPTypeTestModel extends org.eclipse.persistence.testing.framework.TestModel {
protected boolean useAccessors;
public static String defaultTimeZone = TimeZone.getDefault().getID();
public static String alternativeTimeZone = "America/Los_Angeles";
static {
if(defaultTimeZone.equals(alternativeTimeZone)) {
alternativeTimeZone = "America/Chicago";
}
}
public OracleTIMESTAMPTypeTestModel() {
this(true);
}
public OracleTIMESTAMPTypeTestModel(boolean usingAccessors) {
useAccessors = usingAccessors;
if (useAccessors) {
setDescription("Testing of Oracle-specific types and their mappings in TopLink (using Accessors)");
} else {
setDescription("Testing of Oracle-specific types and their mappings in TopLink (without Accessors)");
}
}
@Override
public void addRequiredSystems() {
addRequiredSystem(new OracleTIMESTAMPTypeTestSystem());
}
@Override
public void addTests() {
if (getSession().getPlatform() instanceof Oracle9Platform) {
Oracle9Platform platform = (Oracle9Platform)getSession().getPlatform();
((AbstractSession)getSession()).getAccessor().incrementCallCount((AbstractSession)getSession());
// unwrap connection if it's wrapped
String driverVersion= platform.getDriverVersion();
// isTimestampInGmt==true if driverVersion is 11.1.0.7 or later and
// oracleConnection's property "oracle.jdbc.timestampTzInGmt" is set to "true".
TIMESTAMPTester.isTimestampInGmt = platform.isTimestampInGmt();
TIMESTAMPTester.isLtzTimestampInGmt = platform.isLtzTimestampInGmt();
((AbstractSession)getSession()).getAccessor().decrementCallCount();
//The combination of driver version of 9.2.0.4 or lower and JDK14 or up would cause
//an exception, and therefore is not tested
if (driverVersion.indexOf("9.2.0.4") == -1) {
//Oracle 9.2.0.x OCI driver causes an exception, and therefore is not tested. Bug 4483904
if (driverVersion.indexOf("9.2") == -1 ||
getSession().getLogin().getDatabaseURL().indexOf("oci") == -1) {
// set default time zone as a session time zone
addTest(getTIMESTAMPTestSuite(true));
addTest(getTIMESTAMPWithBindingTestSuite(true));
addTest(getTIMESTAMPUsingNativeSQLTestSuite(true));
addTest(getTIMESTAMPTestSuite(false));
addTest(getTIMESTAMPWithBindingTestSuite(false));
addTest(getTIMESTAMPUsingNativeSQLTestSuite(false));
// Known to pass with Oracle jdbc 11.2.0.0.2, fail with 11.1.0.7, 11.1.0.6
// Even with ojdbc 11.2.0.0.2 fails on db 9.2.0.1, but passes on 10.2.0.4, 11.1.0.6.0, 11.1.0.7.
if(Helper.compareVersions(driverVersion, "11.2.0.0.2") >= 0) {
addTest(getCalToTSTZWithBindingAndNoCalendarPrintingTestSuite());
}
addTest(getCalendarDaylightSavingsTestSuite());
}
if (!useAccessors) {
//Oracle 9.2.0.x OCI driver causes an exception, and therefore is not tested. Bug 4483904
if (driverVersion.indexOf("9.2") ==
-1 || getSession().getLogin().getDatabaseURL().indexOf("oci") == -1) {
addTest(getTIMESTAMPTCTestSuite(true));
addTest(getTIMESTAMPTCWithBindingTestSuite(true));
addTest(getTIMESTAMPTCUsingNativeSQLTestSuite(true));
addTest(getTIMESTAMPTCTestSuite(false));
addTest(getTIMESTAMPTCWithBindingTestSuite(false));
addTest(getTIMESTAMPTCUsingNativeSQLTestSuite(false));
}
addTest(new SerializationOfValueHolderWithTIMESTAMPTZTest());
}
}
if (!useAccessors) {
addTest(getCalToTSTZTestSuite());
}
}
}
public static String getTimeZone(boolean useDefaultTimeZone) {
String timeZone;
if(useDefaultTimeZone) {
timeZone = defaultTimeZone;
} else {
timeZone = alternativeTimeZone;
}
return timeZone;
}
public static String getTimeZoneInfo(String timeZone) {
if(timeZone == null || timeZone.length()==0) {
return " without time zone";
} else {
return " with " + (defaultTimeZone.equals(timeZone) ? "default" : "alternative") + " time zone " + timeZone;
}
}
public static TestSuite getTIMESTAMPTestSuite(boolean useDefaultTimeZone) {
TestSuite suite = new TestSuite();
Enumeration examples = TIMESTAMPDirectToFieldTester.testInstances().elements();
String timeZone = getTimeZone(useDefaultTimeZone);
suite.setName("TIMESTAMP & TIMESTAMPTZ Types Test Suite" + getTimeZoneInfo(timeZone));
suite.setDescription("Tests the use of TIMESTAMP/TIMESTAMPTZ with TopLink");
while (examples.hasMoreElements()) {
TIMESTAMPTester tester = (TIMESTAMPTester)examples.nextElement();
tester.setSessionTimezone(timeZone);
WriteTypeObjectTest wTest = new WriteTypeObjectTest(tester);
wTest.setShouldBindAllParameters(false);
suite.addTest(wTest);
}
return suite;
}
public static TestSuite getTIMESTAMPWithBindingTestSuite(boolean useDefaultTimeZone) {
TestSuite suite = new TestSuite();
Enumeration examples = TIMESTAMPDirectToFieldTester.testInstances1().elements();
String timeZone = getTimeZone(useDefaultTimeZone);
suite.setName("TIMESTAMP & TIMESTAMPTZ Types with binding Test Suite" + getTimeZoneInfo(timeZone));
suite.setDescription("Tests the use of TIMESTAMP/TIMESTAMPTZ with binding with TopLink");
while (examples.hasMoreElements()) {
TIMESTAMPTester tester = (TIMESTAMPTester)examples.nextElement();
tester.setSessionTimezone(timeZone);
WriteTypeObjectTest wTest = new WriteTypeObjectTest(tester);
wTest.setShouldBindAllParameters(true);
suite.addTest(wTest);
}
return suite;
}
public static TestSuite getTIMESTAMPUsingNativeSQLTestSuite(boolean useDefaultTimeZone) {
TestSuite suite = new TestSuite();
Enumeration examples = TIMESTAMPDirectToFieldTester.testInstances2().elements();
String timeZone = getTimeZone(useDefaultTimeZone);
suite.setName("TIMESTAMP & TIMESTAMPTZ Types using native sql Test Suite" + getTimeZoneInfo(timeZone));
suite.setDescription("Tests the use of TIMESTAMP/TIMESTAMPTZ using native sql with TopLink");
while (examples.hasMoreElements()) {
TIMESTAMPTester tester = (TIMESTAMPTester)examples.nextElement();
tester.setSessionTimezone(timeZone);
WriteTypeObjectTest wTest = new WriteTypeObjectTest(tester);
wTest.setShouldBindAllParameters(false);
wTest.setUseNativeSQL(true);
suite.addTest(wTest);
}
return suite;
}
public static TestSuite getTIMESTAMPTCTestSuite(boolean useDefaultTimeZone) {
TestSuite suite = new TestSuite();
Enumeration examples = TIMESTAMPTypeConversionTester.testInstances().elements();
String timeZone = getTimeZone(useDefaultTimeZone);
suite.setName("TIMESTAMP & TIMESTAMPTZ Type Conversion Test Suite" + getTimeZoneInfo(timeZone));
suite.setDescription("Tests the use of TIMESTAMP/TIMESTAMPTZ/TIMESTAMPLTZ with type conversion");
while (examples.hasMoreElements()) {
TIMESTAMPTester tester = (TIMESTAMPTester)examples.nextElement();
tester.setSessionTimezone(timeZone);
suite.addTest(new WriteTypeObjectTest(tester));
}
return suite;
}
public static TestSuite getTIMESTAMPTCWithBindingTestSuite(boolean useDefaultTimeZone) {
TestSuite suite = new TestSuite();
Enumeration examples = TIMESTAMPTypeConversionTester.testInstances1().elements();
String timeZone = getTimeZone(useDefaultTimeZone);
suite.setName("TIMESTAMP & TIMESTAMPTZ with Type Conversion and with binding Test Suite" + getTimeZoneInfo(timeZone));
suite.setDescription("Tests the use of TIMESTAMP/TIMESTAMPTZ with binding with type conversion");
while (examples.hasMoreElements()) {
TIMESTAMPTester tester = (TIMESTAMPTester)examples.nextElement();
tester.setSessionTimezone(timeZone);
WriteTypeObjectTest wTest = new WriteTypeObjectTest(tester);
wTest.setShouldBindAllParameters(true);
suite.addTest(wTest);
}
return suite;
}
public static TestSuite getTIMESTAMPTCUsingNativeSQLTestSuite(boolean useDefaultTimeZone) {
TestSuite suite = new TestSuite();
Enumeration examples = TIMESTAMPTypeConversionTester.testInstances2().elements();
String timeZone = getTimeZone(useDefaultTimeZone);
suite.setName("TIMESTAMP & TIMESTAMPTZ with Type Conversion and with native sql Test Suite" + getTimeZoneInfo(timeZone));
suite.setDescription("Tests the use of TIMESTAMP/TIMESTAMPTZ using native sql with type conversion");
while (examples.hasMoreElements()) {
TIMESTAMPTester tester = (TIMESTAMPTester)examples.nextElement();
tester.setSessionTimezone(timeZone);
WriteTypeObjectTest wTest = new WriteTypeObjectTest(tester);
wTest.setUseNativeSQL(true);
suite.addTest(wTest);
}
return suite;
}
public static TestSuite getCalToTSTZTestSuite() {
TestSuite suite = new TestSuite();
Enumeration examples = CalendarToTSTZWithoutSessionTZTest.testInstances().elements();
suite.setName("Calendar to TIMESTAMPTZ Test Suite");
suite.setDescription("Tests if Calendar to TIMESTAMPTZ without session timezone works properly");
while (examples.hasMoreElements()) {
suite.addTest(new WriteTypeObjectTest((TypeTester)examples.nextElement()));
}
return suite;
}
public static TestSuite getCalToTSTZWithBindingAndNoCalendarPrintingTestSuite() {
TestSuite suite = new TestSuite();
Enumeration examples = CalendarToTSTZWithBindingTest.testInstancesWithBindingAndNoCalendarPrinting().elements();
suite.setName("Calendar to TIMESTAMPTZ Test Suite With Binding, No Calendar Printing");
suite.setDescription("Tests if Calendar to TIMESTAMPTZ with binding and direct Calendar usage works properly");
while (examples.hasMoreElements()) {
suite.addTest((CalendarToTSTZWithBindingTest)examples.nextElement());
}
return suite;
}
public static TestSuite getCalendarDaylightSavingsTestSuite() {
TestSuite suite = new TestSuite();
Enumeration examples = CalendarDaylightSavingsTest.testInstancesWithNoBindingAndNativeSql().elements();
suite.setName("Calendar Daylight Savings Test Suite");
suite.setDescription("Tests if daylight savings-aware calendar printing works properly");
while (examples.hasMoreElements()) {
suite.addTest((TestCase)examples.nextElement());
}
return suite;
}
@Override
public void setup() {
DatabaseSession session = (DatabaseSession)getSession();
if (useAccessors) {
if (getSession().getPlatform() instanceof Oracle9Platform) {
session.addDescriptor(TIMESTAMPDirectToFieldTester.descriptorWithAccessors());
session.addDescriptor(CalendarToTSTZWithBindingTest.descriptorWithAccessors());
session.addDescriptor(CalendarDaylightSavingsTest.descriptorWithAccessors());
}
} else {
if (getSession().getPlatform() instanceof Oracle9Platform) {
session.addDescriptor(TIMESTAMPDirectToFieldTester.descriptor());
session.addDescriptor(TIMESTAMPTypeConversionTester.descriptor());
session.addDescriptor(CalendarToTSTZWithoutSessionTZTest.descriptor());
session.addDescriptor(TIMESTAMPTZOwner.descriptor());
session.addDescriptor(CalendarToTSTZWithBindingTest.descriptor());
session.addDescriptor(CalendarDaylightSavingsTest.descriptor());
}
}
}
}