From e84718c7824b4567d8eb53346fc04fee94187e37 Mon Sep 17 00:00:00 2001 From: Nguyen Van Trung Date: Sat, 14 Sep 2019 12:28:28 +0700 Subject: [PATCH] Fix an error when generate root password during DB initialization This issue was occurring with percona database (v5.6). Error logs: `An error occurred preparing datastore: (pymysql.err.InternalError) (1372, 'Password hash should be a 41-digit hexadecimal number'` Tested with re-enable root function for both v5.6 and v5.7. Change-Id: Ied67c7c243d3f8c644708548cce71ea2aa3cf2e7 Story: #2006546 Task: #36629 --- trove/guestagent/common/sql_query.py | 2 +- trove/tests/unittests/guestagent/test_dbaas.py | 6 +++--- trove/tests/unittests/guestagent/test_query.py | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/trove/guestagent/common/sql_query.py b/trove/guestagent/common/sql_query.py index 37dce9236b..2ad291e912 100644 --- a/trove/guestagent/common/sql_query.py +++ b/trove/guestagent/common/sql_query.py @@ -382,7 +382,7 @@ class SetPassword(object): 'user_host': self.host, 'new_password': self.new_password} return ("SET PASSWORD FOR '%(user_name)s'@'%(user_host)s' = " - "'%(new_password)s';" % properties) + "PASSWORD('%(new_password)s');" % properties) class DropUser(object): diff --git a/trove/tests/unittests/guestagent/test_dbaas.py b/trove/tests/unittests/guestagent/test_dbaas.py index 76b0eff801..b2de15276d 100644 --- a/trove/tests/unittests/guestagent/test_dbaas.py +++ b/trove/tests/unittests/guestagent/test_dbaas.py @@ -468,13 +468,13 @@ class MySqlAdminTest(trove_testtools.TestCase): def test_change_passwords(self): user = [{"name": "test_user", "host": "%", "password": "password"}] - expected = ("SET PASSWORD FOR 'test_user'@'%' = 'password';") + expected = ("SET PASSWORD FOR 'test_user'@'%' = PASSWORD('password');") with patch.object(self.mock_client, 'execute') as mock_execute: self.mySqlAdmin.change_passwords(user) self._assert_execute_call(expected, mock_execute) def test_update_attributes_password(self): - expected = ("SET PASSWORD FOR 'test_user'@'%' = 'password';") + expected = ("SET PASSWORD FOR 'test_user'@'%' = PASSWORD('password');") user = MagicMock() user.name = "test_user" user.host = "%" @@ -1409,7 +1409,7 @@ class MySqlAppTest(trove_testtools.TestCase): self.mySqlApp.secure_root() update_root_password, _ = self.mock_execute.call_args_list[0] update_expected = ("SET PASSWORD FOR 'root'@'localhost' = " - "'some_password';") + "PASSWORD('some_password');") remove_root, _ = self.mock_execute.call_args_list[1] remove_expected = ("DELETE FROM mysql.user WHERE " diff --git a/trove/tests/unittests/guestagent/test_query.py b/trove/tests/unittests/guestagent/test_query.py index 991cca7b1a..162d4470da 100644 --- a/trove/tests/unittests/guestagent/test_query.py +++ b/trove/tests/unittests/guestagent/test_query.py @@ -403,7 +403,7 @@ class SetPasswordTest(QueryTestBase): uu = sql_query.SetPassword(user=username, host=hostname, new_password=new_password) self.assertEqual("SET PASSWORD FOR 'root'@'localhost' = " - "'new_password';", str(uu)) + "PASSWORD('new_password');", str(uu)) class DropUserTest(QueryTestBase):