From e0a807ce1e065e6d610f93e8b8031abb92580174 Mon Sep 17 00:00:00 2001
From: vshepard <v.shepard@postgrespro.ru>
Date: Thu, 18 Jan 2024 13:28:56 +0100
Subject: [PATCH] Fix get_pg_version for linux mint issue #100

---
 testgres/utils.py    | 15 +++++++++------
 tests/test_simple.py | 12 +++++++++++-
 2 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/testgres/utils.py b/testgres/utils.py
index d84bb2b5..745a2555 100644
--- a/testgres/utils.py
+++ b/testgres/utils.py
@@ -177,20 +177,23 @@ def get_pg_version(bin_dir=None):
     Return PostgreSQL version provided by postmaster.
     """
 
-    # get raw version (e.g. postgres (PostgreSQL) 9.5.7)
+    # Get raw version (e.g., postgres (PostgreSQL) 9.5.7)
     postgres_path = os.path.join(bin_dir, 'postgres') if bin_dir else get_bin_path('postgres')
     _params = [postgres_path, '--version']
     raw_ver = tconf.os_ops.exec_command(_params, encoding='utf-8')
 
-    # Remove "(Homebrew)" if present
-    raw_ver = raw_ver.replace('(Homebrew)', '').strip()
+    return parse_pg_version(raw_ver)
 
-    # cook version of PostgreSQL
-    version = raw_ver.strip().split(' ')[-1] \
+
+def parse_pg_version(version_out):
+    # Generalize removal of system-specific suffixes (anything in parentheses)
+    raw_ver = re.sub(r'\([^)]*\)', '', version_out).strip()
+
+    # Cook version of PostgreSQL
+    version = raw_ver.split(' ')[-1] \
                      .partition('devel')[0] \
                      .partition('beta')[0] \
                      .partition('rc')[0]
-
     return version
 
 
diff --git a/tests/test_simple.py b/tests/test_simple.py
index a013f478..8cb0d94e 100644
--- a/tests/test_simple.py
+++ b/tests/test_simple.py
@@ -48,7 +48,7 @@
 
 # NOTE: those are ugly imports
 from testgres import bound_ports
-from testgres.utils import PgVer
+from testgres.utils import PgVer, parse_pg_version
 from testgres.node import ProcessProxy
 
 
@@ -1023,6 +1023,16 @@ def test_upgrade_node(self):
         node_new.start()
         self.assertTrue(b'Upgrade Complete' in res)
 
+    def test_parse_pg_version(self):
+        # Linux Mint
+        assert parse_pg_version("postgres (PostgreSQL) 15.5 (Ubuntu 15.5-1.pgdg22.04+1)") == "15.5"
+        # Linux Ubuntu
+        assert parse_pg_version("postgres (PostgreSQL) 12.17") == "12.17"
+        # Windows
+        assert parse_pg_version("postgres (PostgreSQL) 11.4") == "11.4"
+        # Macos
+        assert parse_pg_version("postgres (PostgreSQL) 14.9 (Homebrew)") == "14.9"
+
 
 if __name__ == '__main__':
     if os.environ.get('ALT_CONFIG'):