Fixed #30636 -- Fixed options ordering when cloning test database on MySQL.
--defaults-file must be given before other options.
This commit is contained in:
parent
c1b94e32fb
commit
e47b8293a7
|
@ -56,8 +56,7 @@ class DatabaseCreation(BaseDatabaseCreation):
|
||||||
|
|
||||||
def _clone_db(self, source_database_name, target_database_name):
|
def _clone_db(self, source_database_name, target_database_name):
|
||||||
dump_args = DatabaseClient.settings_to_cmd_args(self.connection.settings_dict)[1:]
|
dump_args = DatabaseClient.settings_to_cmd_args(self.connection.settings_dict)[1:]
|
||||||
dump_args[-1] = source_database_name
|
dump_cmd = ['mysqldump', *dump_args[:-1], '--routines', '--events', source_database_name]
|
||||||
dump_cmd = ['mysqldump', '--routines', '--events'] + dump_args
|
|
||||||
load_cmd = DatabaseClient.settings_to_cmd_args(self.connection.settings_dict)
|
load_cmd = DatabaseClient.settings_to_cmd_args(self.connection.settings_dict)
|
||||||
load_cmd[-1] = target_database_name
|
load_cmd[-1] = target_database_name
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import subprocess
|
||||||
import unittest
|
import unittest
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
@ -50,3 +51,35 @@ class DatabaseCreationTests(SimpleTestCase):
|
||||||
with mock.patch.object(DatabaseCreation, '_clone_db') as _clone_db:
|
with mock.patch.object(DatabaseCreation, '_clone_db') as _clone_db:
|
||||||
creation._clone_test_db('suffix', verbosity=0, keepdb=True)
|
creation._clone_test_db('suffix', verbosity=0, keepdb=True)
|
||||||
_clone_db.assert_not_called()
|
_clone_db.assert_not_called()
|
||||||
|
|
||||||
|
def test_clone_test_db_options_ordering(self):
|
||||||
|
creation = DatabaseCreation(connection)
|
||||||
|
try:
|
||||||
|
saved_settings = connection.settings_dict
|
||||||
|
connection.settings_dict = {
|
||||||
|
'NAME': 'source_db',
|
||||||
|
'USER': '',
|
||||||
|
'PASSWORD': '',
|
||||||
|
'PORT': '',
|
||||||
|
'HOST': '',
|
||||||
|
'ENGINE': 'django.db.backends.mysql',
|
||||||
|
'OPTIONS': {
|
||||||
|
'read_default_file': 'my.cnf',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
with mock.patch.object(subprocess, 'Popen') as mocked_popen:
|
||||||
|
creation._clone_db('source_db', 'target_db')
|
||||||
|
mocked_popen.assert_has_calls([
|
||||||
|
mock.call(
|
||||||
|
[
|
||||||
|
'mysqldump',
|
||||||
|
'--defaults-file=my.cnf',
|
||||||
|
'--routines',
|
||||||
|
'--events',
|
||||||
|
'source_db',
|
||||||
|
],
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
),
|
||||||
|
])
|
||||||
|
finally:
|
||||||
|
connection.settings_dict = saved_settings
|
||||||
|
|
Loading…
Reference in New Issue