From 03197e2503c494945c31b1d78328e2fffc7f7626 Mon Sep 17 00:00:00 2001 From: mayurinehate Date: Fri, 3 Feb 2023 14:56:38 +0530 Subject: [PATCH] fix(check upgrade): fix logic to compare server and client version --- .../src/datahub/upgrade/upgrade.py | 9 ++++-- .../tests/unit/test_check_upgrade.py | 32 +++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 metadata-ingestion/tests/unit/test_check_upgrade.py diff --git a/metadata-ingestion/src/datahub/upgrade/upgrade.py b/metadata-ingestion/src/datahub/upgrade/upgrade.py index 9806fb0cd033b4..0aed7237be73b8 100644 --- a/metadata-ingestion/src/datahub/upgrade/upgrade.py +++ b/metadata-ingestion/src/datahub/upgrade/upgrade.py @@ -235,7 +235,7 @@ def valid_server_version(version: Version) -> bool: def is_client_server_compatible(client: VersionStats, server: VersionStats) -> int: """ - -ve implies client is behind server + -ve implies server is behind client 0 implies client and server are aligned +ve implies server is ahead of client """ @@ -244,7 +244,12 @@ def is_client_server_compatible(client: VersionStats, server: VersionStats) -> i ): # we cannot evaluate compatibility, choose True as default return 0 - return server.version.micro - client.version.micro + if server.version.major != client.version.major: + return server.version.major - client.version.major + elif server.version.minor != client.version.minor: + return server.version.minor - client.version.minor + else: + return server.version.micro - client.version.micro def maybe_print_upgrade_message( # noqa: C901 diff --git a/metadata-ingestion/tests/unit/test_check_upgrade.py b/metadata-ingestion/tests/unit/test_check_upgrade.py new file mode 100644 index 00000000000000..fad8c29974c3da --- /dev/null +++ b/metadata-ingestion/tests/unit/test_check_upgrade.py @@ -0,0 +1,32 @@ +from packaging.version import Version + +from datahub.upgrade.upgrade import VersionStats, is_client_server_compatible + + +def test_is_client_server_compatible(): + + # Client and Server are Compatible + assert compare_client_server_version_string("0.9.6", "0.9.6") == 0 + assert compare_client_server_version_string("0.9.6.1", "0.9.6") == 0 + + # Server is behind Client + assert compare_client_server_version_string("0.9.6", "0.9.5") < 0 + assert compare_client_server_version_string("0.9.6.1", "0.9.5") < 0 + assert compare_client_server_version_string("0.9.5.1", "0.8.5") < 0 + + # Server is ahead of Client + assert compare_client_server_version_string("0.9.6", "0.9.7") > 0 + assert compare_client_server_version_string("0.9.6.1", "0.9.7") > 0 + assert compare_client_server_version_string("0.8.45.1", "0.9.7") > 0 + + # Pre-relase versions are ignored and compatibility is assumed + assert compare_client_server_version_string("0.9.6.1rc1", "0.9.6") == 0 + assert compare_client_server_version_string("0.9.6.1rc1", "0.9.5") == 0 + assert compare_client_server_version_string("0.9.6.1rc1", "0.9.7") == 0 + + +def compare_client_server_version_string(client_ver_str, server_ver_str): + client_ver = VersionStats(version=Version(client_ver_str)) + server_ver = VersionStats(version=Version(server_ver_str)) + + return is_client_server_compatible(client_ver, server_ver)