Skip to content
Merged
5 changes: 5 additions & 0 deletions RELEASE-CHECKLIST.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# TODO's before releasing a new java-api version

- Update `CoreReporters`
- Update `Version`: knownVersions, LATEST
- Update `build.gradle.kts`: baseVersion
10 changes: 7 additions & 3 deletions src/main/java/org/utplsql/api/TestRunner.java
Original file line number Diff line number Diff line change
Expand Up @@ -152,8 +152,12 @@ public void run(Connection conn) throws SQLException {

DatabaseInformation databaseInformation = new DefaultDatabaseInformation();

compatibilityProxy = new CompatibilityProxy(conn, options.skipCompatibilityCheck, databaseInformation);
logger.info("Running on utPLSQL {}", compatibilityProxy.getDatabaseVersion());
if ( options.skipCompatibilityCheck ) {
compatibilityProxy = new CompatibilityProxy(conn, Version.LATEST, databaseInformation);
} else {
compatibilityProxy = new CompatibilityProxy(conn, databaseInformation);
}
logger.info("Running on utPLSQL {}", compatibilityProxy.getVersionDescription());

if (reporterFactory == null) {
reporterFactory = ReporterFactory.createDefault(compatibilityProxy);
Expand Down Expand Up @@ -236,7 +240,7 @@ private void validateReporter(Connection conn, Reporter reporter) throws SQLExce
*/
public Version getUsedDatabaseVersion() {
if (compatibilityProxy != null) {
return compatibilityProxy.getDatabaseVersion();
return compatibilityProxy.getUtPlsqlVersion();
} else {
return null;
}
Expand Down
7 changes: 6 additions & 1 deletion src/main/java/org/utplsql/api/Version.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,14 @@ public class Version implements Comparable<Version> {
public final static Version V3_1_0 = new Version("3.1.0", 3, 1, 0, null, true);
public final static Version V3_1_1 = new Version("3.1.1", 3, 1, 1, null, true);
public final static Version V3_1_2 = new Version("3.1.2", 3, 1, 2, null, true);
public final static Version V3_1_3 = new Version("3.1.3", 3, 1, 3, null, true);
public final static Version V3_1_4 = new Version("3.1.4", 3, 1, 4, null, true);
public final static Version V3_1_5 = new Version("3.1.5", 3, 1, 5, null, true);
public final static Version V3_1_6 = new Version("3.1.6", 3, 1, 6, null, true);
private final static Map<String, Version> knownVersions =
Stream.of(V3_0_0, V3_0_1, V3_0_2, V3_0_3, V3_0_4, V3_1_0, V3_1_1, V3_1_2)
Stream.of(V3_0_0, V3_0_1, V3_0_2, V3_0_3, V3_0_4, V3_1_0, V3_1_1, V3_1_2, V3_1_3, V3_1_4, V3_1_5, V3_1_6)
.collect(toMap(Version::toString, Function.identity()));
public final static Version LATEST = V3_1_6;

private final String origString;
private final Integer major;
Expand Down
80 changes: 49 additions & 31 deletions src/main/java/org/utplsql/api/compatibility/CompatibilityProxy.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.utplsql.api.testRunner.TestRunnerStatement;
import org.utplsql.api.testRunner.TestRunnerStatementProvider;

import javax.annotation.Nullable;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Objects;
Expand All @@ -25,30 +26,42 @@
public class CompatibilityProxy {

public static final String UTPLSQL_COMPATIBILITY_VERSION = "3";
private static final String UTPLSQL_API_VERSION = "3.1.1";
private final DatabaseInformation databaseInformation;
private Version databaseVersion;
private Version utPlsqlVersion;
private Version realDbPlsqlVersion;
private boolean compatible = false;

public CompatibilityProxy(Connection conn) throws SQLException {
this(conn, false, null);
this(conn, null, null);
}

public CompatibilityProxy(Connection conn, DatabaseInformation databaseInformation) throws SQLException {
this(conn, false, databaseInformation);
@Deprecated
public CompatibilityProxy(Connection conn, boolean skipCompatibilityCheck ) throws SQLException {
this(conn, skipCompatibilityCheck, null);
}

public CompatibilityProxy(Connection conn, boolean skipCompatibilityCheck) throws SQLException {
this(conn, skipCompatibilityCheck, null);
@Deprecated
public CompatibilityProxy(Connection conn, boolean skipCompatibilityCheck, @Nullable DatabaseInformation databaseInformation ) throws SQLException {
this(conn, skipCompatibilityCheck ? Version.LATEST : null, databaseInformation);
}

public CompatibilityProxy(Connection conn, @Nullable DatabaseInformation databaseInformation) throws SQLException {
this(conn, null, databaseInformation);
}

public CompatibilityProxy(Connection conn, boolean skipCompatibilityCheck, DatabaseInformation databaseInformation) throws SQLException {
public CompatibilityProxy(Connection conn, @Nullable Version assumedUtPlsVersion) throws SQLException {
this(conn, assumedUtPlsVersion, null);
}

public CompatibilityProxy(Connection conn, @Nullable Version assumedUtPlsqlVersion, @Nullable DatabaseInformation databaseInformation) throws SQLException {
this.databaseInformation = (databaseInformation != null)
? databaseInformation
: new DefaultDatabaseInformation();

if (skipCompatibilityCheck) {
doExpectCompatibility();
realDbPlsqlVersion = this.databaseInformation.getUtPlsqlFrameworkVersion(conn);
if ( assumedUtPlsqlVersion != null ) {
utPlsqlVersion = assumedUtPlsqlVersion;
compatible = utPlsqlVersion.getNormalizedString().startsWith(UTPLSQL_COMPATIBILITY_VERSION);
} else {
doCompatibilityCheckWithDatabase(conn);
}
Expand All @@ -62,18 +75,18 @@ public CompatibilityProxy(Connection conn, boolean skipCompatibilityCheck, Datab
* @throws SQLException
*/
private void doCompatibilityCheckWithDatabase(Connection conn) throws SQLException {
databaseVersion = databaseInformation.getUtPlsqlFrameworkVersion(conn);
utPlsqlVersion = realDbPlsqlVersion;
Version clientVersion = Version.create(UTPLSQL_COMPATIBILITY_VERSION);

if (databaseVersion == null) {
if (utPlsqlVersion == null) {
throw new DatabaseNotCompatibleException("Could not get database version", clientVersion, null, null);
}

if (databaseVersion.getMajor() == null) {
throw new DatabaseNotCompatibleException("Illegal database version: " + databaseVersion.toString(), clientVersion, databaseVersion, null);
if (utPlsqlVersion.getMajor() == null) {
throw new DatabaseNotCompatibleException("Illegal database version: " + utPlsqlVersion.toString(), clientVersion, utPlsqlVersion, null);
}

if (OptionalFeatures.FRAMEWORK_COMPATIBILITY_CHECK.isAvailableFor(databaseVersion)) {
if (OptionalFeatures.FRAMEWORK_COMPATIBILITY_CHECK.isAvailableFor(utPlsqlVersion)) {
try {
compatible = versionCompatibilityCheck(conn, UTPLSQL_COMPATIBILITY_VERSION, null);
} catch (SQLException e) {
Expand All @@ -84,14 +97,6 @@ private void doCompatibilityCheckWithDatabase(Connection conn) throws SQLExcepti
}
}

/**
* Just prepare the proxy to expect compatibility, expecting the database framework to be the same version as the API
*/
private void doExpectCompatibility() {
databaseVersion = Version.create(UTPLSQL_API_VERSION);
compatible = true;
}

/**
* Check the utPLSQL version compatibility.
*
Expand Down Expand Up @@ -121,10 +126,10 @@ private boolean versionCompatibilityCheck(Connection conn, String requested, Str
private boolean versionCompatibilityCheckPre303(String requested) {
Version requestedVersion = Version.create(requested);

Objects.requireNonNull(databaseVersion.getMajor(), "Illegal database Version: " + databaseVersion.toString());
return databaseVersion.getMajor().equals(requestedVersion.getMajor())
Objects.requireNonNull(utPlsqlVersion.getMajor(), "Illegal database Version: " + utPlsqlVersion.toString());
return utPlsqlVersion.getMajor().equals(requestedVersion.getMajor())
&& (requestedVersion.getMinor() == null
|| requestedVersion.getMinor().equals(databaseVersion.getMinor()));
|| requestedVersion.getMinor().equals(utPlsqlVersion.getMinor()));
}

/**
Expand All @@ -133,16 +138,29 @@ private boolean versionCompatibilityCheckPre303(String requested) {
*/
public void failOnNotCompatible() throws DatabaseNotCompatibleException {
if (!isCompatible()) {
throw new DatabaseNotCompatibleException(databaseVersion);
throw new DatabaseNotCompatibleException(utPlsqlVersion);
}
}

public boolean isCompatible() {
return compatible;
}

public Version getDatabaseVersion() {
return databaseVersion;
@Deprecated
public Version getDatabaseVersion() { return utPlsqlVersion; }

public Version getUtPlsqlVersion() {
return utPlsqlVersion;
}

public Version getRealDbPlsqlVersion() { return realDbPlsqlVersion; }

public String getVersionDescription() {
if ( utPlsqlVersion != realDbPlsqlVersion ) {
return realDbPlsqlVersion.toString() + " (Assumed: " + utPlsqlVersion.toString() + ")";
} else {
return utPlsqlVersion.toString();
}
}

/**
Expand All @@ -154,7 +172,7 @@ public Version getDatabaseVersion() {
* @throws SQLException
*/
public TestRunnerStatement getTestRunnerStatement(TestRunnerOptions options, Connection conn) throws SQLException {
return TestRunnerStatementProvider.getCompatibleTestRunnerStatement(databaseVersion, options, conn);
return TestRunnerStatementProvider.getCompatibleTestRunnerStatement(utPlsqlVersion, options, conn);
}

/**
Expand All @@ -166,6 +184,6 @@ public TestRunnerStatement getTestRunnerStatement(TestRunnerOptions options, Con
* @throws SQLException
*/
public OutputBuffer getOutputBuffer(Reporter reporter, Connection conn) throws SQLException {
return OutputBufferProvider.getCompatibleOutputBuffer(databaseVersion, reporter, conn);
return OutputBufferProvider.getCompatibleOutputBuffer(utPlsqlVersion, reporter, conn);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ public enum OptionalFeatures {

FAIL_ON_ERROR("3.0.3.1266", null),
FRAMEWORK_COMPATIBILITY_CHECK("3.0.3.1266", null),
CUSTOM_REPORTERS("3.1.0.1849", null);
CUSTOM_REPORTERS("3.1.0.1849", null),
CLIENT_CHARACTER_SET("3.1.2.2130", null);

private final Version minVersion;
private final Version maxVersion;
Expand All @@ -32,6 +33,10 @@ public boolean isAvailableFor(Version version) {

public boolean isAvailableFor(Connection conn) throws SQLException {
CompatibilityProxy proxy = new CompatibilityProxy(conn);
return isAvailableFor(proxy.getDatabaseVersion());
return isAvailableFor(proxy.getUtPlsqlVersion());
}

public Version getMinVersion() { return minVersion; }

public Version getMaxVersion() { return maxVersion; }
}
14 changes: 9 additions & 5 deletions src/main/java/org/utplsql/api/reporter/CoreReporters.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,18 @@
*/
public enum CoreReporters {

UT_COVERAGE_COBERTURA_REPORTER(Version.V3_1_0, null),
UT_COVERAGE_HTML_REPORTER(Version.V3_0_0, null),
UT_DOCUMENTATION_REPORTER(Version.V3_0_0, null),
UT_TEAMCITY_REPORTER(Version.V3_0_0, null),
UT_XUNIT_REPORTER(Version.V3_0_0, null),
UT_COVERALLS_REPORTER(Version.V3_0_0, null),
UT_COVERAGE_SONAR_REPORTER(Version.V3_0_0, null),
UT_COVERALLS_REPORTER(Version.V3_0_0, null),
UT_DEBUG_REPORTER(Version.V3_1_4, null),
UT_DOCUMENTATION_REPORTER(Version.V3_0_0, null),
UT_JUNIT_REPORTER(Version.V3_1_0, null),
UT_REALTIME_REPORTER(Version.V3_1_4, null),
UT_SONAR_TEST_REPORTER(Version.V3_0_0, null),
UT_COVERAGE_COBERTURA_REPORTER(Version.V3_1_0, null);
UT_TEAMCITY_REPORTER(Version.V3_0_0, null),
UT_TFS_JUNIT_REPORTER(Version.V3_1_0, null),
UT_XUNIT_REPORTER(Version.V3_0_0, null);

private final Version since;
private final Version until;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ static ReporterInspector create(ReporterFactory reporterFactory, Connection conn

CompatibilityProxy proxy = new CompatibilityProxy(conn);

if (proxy.getDatabaseVersion().isGreaterOrEqualThan(Version.V3_1_0)) {
if (proxy.getUtPlsqlVersion().isGreaterOrEqualThan(Version.V3_1_0)) {
return new ReporterInspector310(reporterFactory, conn);
} else {
return new ReporterInspectorPre310(reporterFactory, conn);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class ReporterInspectorPre310 extends AbstractReporterInspector {
registeredReporterFactoryMethods = reporterFactory.getRegisteredReporterInfo();
initDefaultDescriptions();

Version databaseVersion = new CompatibilityProxy(connection).getDatabaseVersion();
Version databaseVersion = new CompatibilityProxy(connection).getUtPlsqlVersion();
this.infos = Arrays.stream(CoreReporters.values())
.filter(r -> r.isAvailableFor(databaseVersion))
.map(this::getReporterInfo)
Expand Down
3 changes: 1 addition & 2 deletions src/test/java/org/utplsql/api/CompatibilityIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,8 @@ void compatibleVersion() throws SQLException {

@Test
void skipCompatibilityCheck() throws SQLException {
CompatibilityProxy proxy = new CompatibilityProxy(getConnection(), true);
CompatibilityProxy proxy = new CompatibilityProxy(getConnection(), Version.LATEST);
proxy.failOnNotCompatible();
assertTrue(proxy.isCompatible());

}
}
14 changes: 13 additions & 1 deletion src/test/java/org/utplsql/api/OptionalFeaturesIT.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.utplsql.api;

import org.junit.jupiter.api.Test;
import org.omg.CORBA.DynAnyPackage.Invalid;
import org.utplsql.api.compatibility.CompatibilityProxy;
import org.utplsql.api.compatibility.OptionalFeatures;
import org.utplsql.api.exception.InvalidVersionException;
Expand All @@ -14,7 +15,7 @@ class OptionalFeaturesIT extends AbstractDatabaseTest {


private Version getDatabaseVersion() throws SQLException {
return new CompatibilityProxy(getConnection()).getDatabaseVersion();
return new CompatibilityProxy(getConnection()).getUtPlsqlVersion();
}

@Test
Expand Down Expand Up @@ -52,4 +53,15 @@ void customReporters() throws SQLException, InvalidVersionException {
assertFalse(available);
}
}

@Test
void clientCharset() throws SQLException, InvalidVersionException {
boolean available = OptionalFeatures.CLIENT_CHARACTER_SET.isAvailableFor(getConnection());

if (getDatabaseVersion().isGreaterOrEqualThan(Version.V3_1_2)) {
assertTrue(available);
} else {
assertFalse(available);
}
}
}
2 changes: 1 addition & 1 deletion src/test/java/org/utplsql/api/OutputBufferIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ void getOutputFromSonarReporter() throws SQLException {
void sonarReporterHasEncodingSet() throws SQLException, InvalidVersionException {
CompatibilityProxy proxy = new CompatibilityProxy(newConnection());

if (proxy.getDatabaseVersion().isGreaterOrEqualThan(Version.V3_1_2)) {
if (proxy.getUtPlsqlVersion().isGreaterOrEqualThan(Version.V3_1_2)) {
Reporter reporter = new DefaultReporter(CoreReporters.UT_SONAR_TEST_REPORTER.name(), null).init(getConnection());

TestRunner tr = new TestRunner()
Expand Down
2 changes: 1 addition & 1 deletion src/test/java/org/utplsql/api/ReporterInspectorIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ void testGetReporterInfo() throws SQLException, InvalidVersionException {
assertEquals(infos.get(CoreReporters.UT_TEAMCITY_REPORTER.name()).getType(), ReporterInfo.Type.SQL);
assertEquals(infos.get(CoreReporters.UT_XUNIT_REPORTER.name()).getType(), ReporterInfo.Type.SQL);

if (CoreReporters.UT_COVERAGE_COBERTURA_REPORTER.isAvailableFor(proxy.getDatabaseVersion())) {
if (CoreReporters.UT_COVERAGE_COBERTURA_REPORTER.isAvailableFor(proxy.getUtPlsqlVersion())) {
assertEquals(infos.get(CoreReporters.UT_COVERAGE_COBERTURA_REPORTER.name()).getType(), ReporterInfo.Type.SQL);
}
}
Expand Down
11 changes: 8 additions & 3 deletions src/test/java/org/utplsql/api/TestRunnerIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.function.Executable;
import org.utplsql.api.compatibility.CompatibilityProxy;
import org.utplsql.api.compatibility.OptionalFeatures;
import org.utplsql.api.db.DatabaseInformation;
import org.utplsql.api.db.DefaultDatabaseInformation;
import org.utplsql.api.exception.InvalidVersionException;
import org.utplsql.api.exception.SomeTestsFailedException;
import org.utplsql.api.reporter.CoreReporters;
Expand Down Expand Up @@ -31,9 +34,11 @@ void runWithDefaultParameters() throws SQLException {
*/
@Test
void runWithoutCompatibilityCheck() throws SQLException, InvalidVersionException {
CompatibilityProxy proxy = new CompatibilityProxy(getConnection());

if (proxy.getDatabaseVersion().isGreaterOrEqualThan(Version.V3_0_3)) {
DatabaseInformation databaseInformation = new DefaultDatabaseInformation();

// We can only test this for the versions of the latest TestRunnerStatement-Change
if ( OptionalFeatures.CLIENT_CHARACTER_SET.isAvailableFor(databaseInformation.getUtPlsqlFrameworkVersion(getConnection())) ) {
new TestRunner()
.skipCompatibilityCheck(true)
.run(getConnection());
Expand Down Expand Up @@ -65,7 +70,7 @@ void failOnErrors() throws SQLException, InvalidVersionException {

CompatibilityProxy proxy = new CompatibilityProxy(conn);

if (proxy.getDatabaseVersion().isGreaterOrEqualThan(Version.V3_0_3)) {
if (proxy.getUtPlsqlVersion().isGreaterOrEqualThan(Version.V3_0_3)) {
Executable throwingTestRunner = () -> new TestRunner()
.failOnErrors(true)
.run(conn);
Expand Down
Loading