def test_get_cmd_args_strings(self): conn_settings = SETTINGS_DICT conn_settings['PASSWORD'] = STRING_PASSWORD rds_args = DatabaseClient.settings_to_cmd_args(conn_settings, []) mysql_args = MySQLDatabaseClient.settings_to_cmd_args( conn_settings, []) self.assertEqual(rds_args, mysql_args) self.assertEqual(rds_args[2], f'--password={STRING_PASSWORD}')
def __init__(self, *args, **kwargs): super(DatabaseWrapper, self).__init__(*args, **kwargs) self.features = DatabaseFeatures(self) self.ops = DatabaseOperations(self) self.client = DatabaseClient(self) self.creation = DatabaseCreation(self) self.introspection = DatabaseIntrospection(self) self.validation = DatabaseValidation(self)
def __init__(self, *args, **kwargs): super(DatabaseWrapper, self).__init__(*args, **kwargs) self.server_version = None self.features = DatabaseFeatures() self.ops = mysqldb_base.DatabaseOperations() self.client = DatabaseClient(self) self.creation = DatabaseCreation(self) self.introspection = DatabaseIntrospection(self) self.validation = DatabaseValidation(self) self.pool = None
def __init__(self, *args, **kwargs): super(DatabaseWrapper, self).__init__(*args, **kwargs) self.server_version = None self.features = DatabaseFeatures(self) self.ops = DatabaseOperations(self) self.client = DatabaseClient(self) self.creation = DatabaseCreation(self) #数据库创建器, from django.db.backends.mysql.creation import DatabaseCreation self.introspection = DatabaseIntrospection(self) self.validation = DatabaseValidation(self)
def test_crash_password_does_not_leak(self): # The password doesn't leak in an exception that results from a client # crash. args, env = DatabaseClient.settings_to_cmd_args_env( { 'NAME': 'somedbname', 'USER': '******', 'PASSWORD': '******', 'HOST': 'somehost', 'PORT': 444, 'OPTIONS': {}, }, [], ) fake_client = Path(__file__).with_name('fake_client.py') args[0:1] = [sys.executable, str(fake_client)] with self.assertRaises(subprocess.CalledProcessError) as ctx: subprocess.run(args, check=True, env=env) self.assertNotIn('somepassword', str(ctx.exception))
def test_crash_password_does_not_leak(self): # The password doesn't leak in an exception that results from a client # crash. args, env = DatabaseClient.settings_to_cmd_args_env( { "NAME": "somedbname", "USER": "******", "PASSWORD": "******", "HOST": "somehost", "PORT": 444, "OPTIONS": {}, }, [], ) if env: env = {**os.environ, **env} fake_client = Path(__file__).with_name("fake_client.py") args[0:1] = [sys.executable, str(fake_client)] with self.assertRaises(subprocess.CalledProcessError) as ctx: subprocess.run(args, check=True, env=env) self.assertNotIn("somepassword", str(ctx.exception))
def get_command_line_arguments(self, connection_settings, parameters=None): if parameters is None: parameters = [] return DatabaseClient.settings_to_cmd_args(connection_settings, parameters)
def settings_to_cmd_args_env(self, settings_dict, parameters=None): if parameters is None: parameters = [] return DatabaseClient.settings_to_cmd_args_env(settings_dict, parameters)
def get_command_line_arguments(self, connection_settings): return DatabaseClient.settings_to_cmd_args(connection_settings)
def test_exec(self): client = DatabaseClient(connection) self.assertRaises(CalledProcessError, client.runshell, input=b'invalid', stdout=PIPE, stderr=PIPE)
def test_exec(self): client = DatabaseClient(connection) run_result = client.runshell(input=b'SHOW VARIABLES', stdout=PIPE, stderr=PIPE) self.assertTrue(run_result.stdout) self.assertFalse(run_result.stderr)