diff --git a/swh/core/db/__init__.py b/swh/core/db/__init__.py --- a/swh/core/db/__init__.py +++ b/swh/core/db/__init__.py @@ -295,3 +295,14 @@ def mktemp(self, tblname: str, cur: Optional[psycopg2.extensions.cursor] = None): self.cursor(cur).execute("SELECT swh_mktemp(%s)", (tblname,)) + + def get_current_version(self): + """Return the database version stored in the backend. This should match the + current_version attribute of the backend implementation class. + + """ + with self.transaction() as cur: + cur.execute("select version from dbversion order by dbversion desc limit 1") + res = cur.fetchone() + assert res is not None + return res[0] diff --git a/swh/core/db/tests/test_cli.py b/swh/core/db/tests/test_cli.py --- a/swh/core/db/tests/test_cli.py +++ b/swh/core/db/tests/test_cli.py @@ -334,3 +334,25 @@ in result.output ) assert swh_db_module(conninfo) == module_name + + +def test_cli_swh_db_version(swh_db_cli, mock_import_swhmodule, postgresql): + module_name = "test.cli" + cli_runner, db_params = swh_db_cli + + conninfo = craft_conninfo(postgresql, "test-db-version") + # This creates the db and installs the necessary admin extensions + result = cli_runner.invoke(swhdb, ["create", module_name, "--dbname", conninfo]) + assert result.exit_code == 0, f"Unexpected output: {result.output}" + + # This initializes the schema and data + result = cli_runner.invoke(swhdb, ["init", module_name, "--dbname", conninfo]) + + db = BaseDb.connect(conninfo) + with db.cursor() as cur: + cur.execute("select version from dbversion order by dbversion desc limit 1") + expected_version = cur.fetchone()[0] + assert db.get_current_version() == expected_version + + assert result.exit_code == 0, f"Unexpected output: {result.output}" + assert f"initialized at version {expected_version}" in result.output