Skip to content

Commit

Permalink
[DOP-13850] - add min_digits version check to oracle package
Browse files Browse the repository at this point in the history
  • Loading branch information
maxim-lixakov committed Apr 17, 2024
1 parent ec0ae8b commit 0aa87d9
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 10 deletions.
6 changes: 3 additions & 3 deletions onetl/connection/db_connection/oracle/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,14 +206,14 @@ def get_packages(
"""

default_java_version = "8"
default_package_version = "23.3.0.0.23.09"
default_package_version = "23.3.0.23.09"

java_ver = Version(java_version or default_java_version)
if java_ver.major < 8:
raise ValueError(f"Java version must be at least 8, got {java_ver.major}")

jre_ver = "8" if java_ver.major < 11 else "11"
jdbc_version = Version(package_version or default_package_version)
jdbc_version = Version(package_version or default_package_version).min_digits(4)

return [f"com.oracle.database.jdbc:ojdbc{jre_ver}:{jdbc_version}"]

Expand All @@ -222,7 +222,7 @@ def package(cls) -> str:
"""Get package name to be downloaded by Spark."""
msg = "`Oracle.package` will be removed in 1.0.0, use `Oracle.get_packages()` instead"
warnings.warn(msg, UserWarning, stacklevel=3)
return "com.oracle.database.jdbc:ojdbc8:23.3.0.0.23.09"
return "com.oracle.database.jdbc:ojdbc8:23.3.0.23.09"

@property
def jdbc_url(self) -> str:
Expand Down
32 changes: 25 additions & 7 deletions tests/tests_unit/tests_db_connection_unit/test_oracle_unit.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def test_oracle_class_attributes():
def test_oracle_package():
warning_msg = re.escape("will be removed in 1.0.0, use `Oracle.get_packages()` instead")
with pytest.warns(UserWarning, match=warning_msg):
assert Oracle.package == "com.oracle.database.jdbc:ojdbc8:23.3.0.0.23.09"
assert Oracle.package == "com.oracle.database.jdbc:ojdbc8:23.3.0.23.09"


def test_oracle_get_packages_no_input():
Expand All @@ -30,20 +30,38 @@ def test_oracle_get_packages_java_version_not_supported(java_version):
@pytest.mark.parametrize(
"java_version, package_version, expected_packages",
[
(None, None, ["com.oracle.database.jdbc:ojdbc8:23.3.0.0.23.09"]),
("8", None, ["com.oracle.database.jdbc:ojdbc8:23.3.0.0.23.09"]),
("8", "23.3.0.0.23.09", ["com.oracle.database.jdbc:ojdbc8:23.3.0.0.23.09"]),
("9", None, ["com.oracle.database.jdbc:ojdbc8:23.3.0.0.23.09"]),
("11", None, ["com.oracle.database.jdbc:ojdbc11:23.3.0.0.23.09"]),
(None, None, ["com.oracle.database.jdbc:ojdbc8:23.3.0.23.09"]),
("8", None, ["com.oracle.database.jdbc:ojdbc8:23.3.0.23.09"]),
("8", "23.3.0.23.09", ["com.oracle.database.jdbc:ojdbc8:23.3.0.23.09"]),
("8", "21.13.0.0", ["com.oracle.database.jdbc:ojdbc8:21.13.0.0"]),
("9", None, ["com.oracle.database.jdbc:ojdbc8:23.3.0.23.09"]),
("9", "21.13.0.0", ["com.oracle.database.jdbc:ojdbc8:21.13.0.0"]),
("11", None, ["com.oracle.database.jdbc:ojdbc11:23.3.0.23.09"]),
("11", "21.13.0.0", ["com.oracle.database.jdbc:ojdbc11:21.13.0.0"]),
("17", "21.13.0.0", ["com.oracle.database.jdbc:ojdbc11:21.13.0.0"]),
("20", "23.3.0.0.23.09", ["com.oracle.database.jdbc:ojdbc11:23.3.0.0.23.09"]),
("20", "23.3.0.23.09", ["com.oracle.database.jdbc:ojdbc11:23.3.0.23.09"]),
],
)
def test_oracle_get_packages(java_version, package_version, expected_packages):
assert Oracle.get_packages(java_version=java_version, package_version=package_version) == expected_packages


@pytest.mark.parametrize(
"java_version, package_version",
[
("8", "23.3.0"),
("11", "23.3"),
("11", "a.b.c.d"),
],
)
def test_oracle_get_packages_invalid_version(java_version, package_version):
with pytest.raises(
ValueError,
match=rf"Version '{package_version}' does not have enough numeric components for requested format \(expected at least 4\).",
):
Oracle.get_packages(java_version=java_version, package_version=package_version)


@pytest.mark.parametrize("java_version", ["7", "6"])
def test_oracle_get_packages_java_version_not_supported(java_version):
with pytest.raises(ValueError, match=f"Java version must be at least 8, got {java_version}"):
Expand Down

0 comments on commit 0aa87d9

Please sign in to comment.