From 7408a93dcd9c231cfc122b22663b63bc131a5cd0 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Mon, 15 Apr 2024 11:47:25 +0900 Subject: [PATCH] db: Replace use of Engine.execute() method Resolve the following RemovedIn20Warning warning: The Engine.execute() method is considered legacy as of the 1.x series of SQLAlchemy and will be removed in 2.0. Closes-Bug: #2061345 Co-Authored-By: Stephen Finucane Change-Id: Ib0519af8a15ca02e351f8d739d52f4e658f7615a --- ironic/cmd/status.py | 4 +++- ironic/tests/unit/cmd/test_status.py | 30 ++++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/ironic/cmd/status.py b/ironic/cmd/status.py index d395b985b7..5e56be5520 100644 --- a/ironic/cmd/status.py +++ b/ironic/cmd/status.py @@ -101,7 +101,9 @@ class Checks(upgradecheck.UpgradeCommands): # This test only applies to mysql and database schema # selection. return upgradecheck.Result(upgradecheck.Code.SUCCESS) - res = engine.execute("show create table allocations") + with engine.connect() as conn, conn.begin(): + res = conn.execute( + sqlalchemy.text("show create table allocations")) results = str(res.all()).lower() if 'utf8' not in results: msg = ('The Allocations table is is not using UTF8 encoding. ' diff --git a/ironic/tests/unit/cmd/test_status.py b/ironic/tests/unit/cmd/test_status.py index 2d044cc13f..8f404c6d31 100644 --- a/ironic/tests/unit/cmd/test_status.py +++ b/ironic/tests/unit/cmd/test_status.py @@ -45,16 +45,30 @@ class TestUpgradeChecks(db_base.DbTestCase): self.assertEqual(Code.SUCCESS, check_result.code) + def _create_mock_context_manager(self, return_self=True): + mock_obj = mock.Mock() + if return_self: + val = mock_obj + else: + val = mock.Mock() + mock_obj.__enter__ = mock.Mock(return_value=val) + mock_obj.__exit__ = mock.Mock() + return mock_obj + @mock.patch.object(sqlalchemy.enginefacade.reader, 'get_engine', autospec=True) def test__check_allocations_table_latin1(self, mock_reader): mock_engine = mock.Mock() mock_res = mock.Mock() + mock_engine.url = '..mysql..' mock_res.all.return_value = ( '... ENGINE=InnoDB DEFAULT CHARSET=latin1', ) - mock_engine.url = '..mysql..' - mock_engine.execute.return_value = mock_res + mock_conn = self._create_mock_context_manager(True) + mock_trans = self._create_mock_context_manager(False) + mock_engine.connect.return_value = mock_conn + mock_conn.execute.return_value = mock_res + mock_conn.begin.return_value = mock_trans mock_reader.return_value = mock_engine check_result = self.cmd._check_allocations_table() self.assertEqual(Code.WARNING, @@ -76,7 +90,11 @@ class TestUpgradeChecks(db_base.DbTestCase): mock_res.all.return_value = ( '... ENGINE=MyIASM DEFAULT CHARSET=utf8', ) - mock_engine.execute.return_value = mock_res + mock_conn = self._create_mock_context_manager(True) + mock_trans = self._create_mock_context_manager(False) + mock_engine.connect.return_value = mock_conn + mock_conn.execute.return_value = mock_res + mock_conn.begin.return_value = mock_trans mock_reader.return_value = mock_engine check_result = self.cmd._check_allocations_table() self.assertEqual(Code.WARNING, @@ -100,7 +118,11 @@ class TestUpgradeChecks(db_base.DbTestCase): mock_res.all.return_value = ( '... ENGINE=MyIASM DEFAULT CHARSET=latin1', ) - mock_engine.execute.return_value = mock_res + mock_conn = self._create_mock_context_manager(True) + mock_trans = self._create_mock_context_manager(False) + mock_engine.connect.return_value = mock_conn + mock_conn.execute.return_value = mock_res + mock_conn.begin.return_value = mock_trans mock_reader.return_value = mock_engine check_result = self.cmd._check_allocations_table() self.assertEqual(Code.WARNING,