Forráskód Böngészése

pass all existing tests (and formatting)

Divyansh Singh 2 éve
szülő
commit
89602d1614

+ 8 - 8
borgmatic/actions/restore.py

@@ -304,6 +304,13 @@ def run_restore(
     restore_names = find_databases_to_restore(restore_arguments.databases, archive_database_names)
     restore_names = find_databases_to_restore(restore_arguments.databases, archive_database_names)
     found_names = set()
     found_names = set()
     remaining_restore_names = {}
     remaining_restore_names = {}
+    connection_params = {
+        'hostname': restore_arguments.hostname,
+        'port': restore_arguments.port,
+        'username': restore_arguments.username,
+        'password': restore_arguments.password,
+        'restore_path': restore_arguments.restore_path,
+    }
 
 
     for hook_name, database_names in restore_names.items():
     for hook_name, database_names in restore_names.items():
         for database_name in database_names:
         for database_name in database_names:
@@ -311,14 +318,6 @@ def run_restore(
                 hooks, archive_database_names, hook_name, database_name
                 hooks, archive_database_names, hook_name, database_name
             )
             )
 
 
-            connection_params = {
-                'hostname': restore_arguments.hostname,
-                'port': restore_arguments.port,
-                'username': restore_arguments.username,
-                'password': restore_arguments.password,
-                'restore_path': restore_arguments.restore_path,
-            }
-
             if not found_database:
             if not found_database:
                 remaining_restore_names.setdefault(found_hook_name or hook_name, []).append(
                 remaining_restore_names.setdefault(found_hook_name or hook_name, []).append(
                     database_name
                     database_name
@@ -368,6 +367,7 @@ def run_restore(
                 archive_name,
                 archive_name,
                 found_hook_name or hook_name,
                 found_hook_name or hook_name,
                 dict(database, **{'schemas': restore_arguments.schemas}),
                 dict(database, **{'schemas': restore_arguments.schemas}),
+                connection_params,
             )
             )
 
 
     borgmatic.hooks.dispatch.call_hooks_even_if_unconfigured(
     borgmatic.hooks.dispatch.call_hooks_even_if_unconfigured(

+ 2 - 1
borgmatic/commands/arguments.py

@@ -725,7 +725,8 @@ def make_parsers():
         help='Database hostname to restore to. Defaults to the "restore_hostname" option in borgmatic\'s configuration',
         help='Database hostname to restore to. Defaults to the "restore_hostname" option in borgmatic\'s configuration',
     )
     )
     restore_group.add_argument(
     restore_group.add_argument(
-        '--port', help='Port to restore to. Defaults to the "restore_port" option in borgmatic\'s configuration'
+        '--port',
+        help='Port to restore to. Defaults to the "restore_port" option in borgmatic\'s configuration',
     )
     )
     restore_group.add_argument(
     restore_group.add_argument(
         '--username',
         '--username',

+ 3 - 2
borgmatic/config/schema.yaml

@@ -816,7 +816,8 @@ properties:
                                 OWNER or SET SESSION AUTHORIZATION statements 
                                 OWNER or SET SESSION AUTHORIZATION statements 
                                 to set ownership of created schema elements. 
                                 to set ownership of created schema elements. 
                                 These statements will fail unless the initial
                                 These statements will fail unless the initial
-                                connection to the database is made by a superuser.
+                                connection to the database is made by a 
+                                superuser.
                         format:
                         format:
                             type: string
                             type: string
                             enum: ['plain', 'custom', 'directory', 'tar']
                             enum: ['plain', 'custom', 'directory', 'tar']
@@ -1103,7 +1104,7 @@ properties:
                             description: |
                             description: |
                                 Database hostname to restore to. Defaults to
                                 Database hostname to restore to. Defaults to
                                 the "hostname" option.
                                 the "hostname" option.
-                            example: database.example.org                        
+                            example: database.example.org
                         port:
                         port:
                             type: integer
                             type: integer
                             description: Port to connect to. Defaults to 27017.
                             description: Port to connect to. Defaults to 27017.

+ 15 - 5
borgmatic/hooks/mongodb.py

@@ -102,7 +102,9 @@ def make_database_dump_pattern(
     return dump.make_database_dump_filename(make_dump_path(location_config), name, hostname='*')
     return dump.make_database_dump_filename(make_dump_path(location_config), name, hostname='*')
 
 
 
 
-def restore_database_dump(database_config, log_prefix, location_config, dry_run, extract_process, connection_params):
+def restore_database_dump(
+    database_config, log_prefix, location_config, dry_run, extract_process, connection_params
+):
     '''
     '''
     Restore the given MongoDB database from an extract stream. The database is supplied as a
     Restore the given MongoDB database from an extract stream. The database is supplied as a
     one-element sequence containing a dict describing the database, as per the configuration schema.
     one-element sequence containing a dict describing the database, as per the configuration schema.
@@ -122,7 +124,9 @@ def restore_database_dump(database_config, log_prefix, location_config, dry_run,
     dump_filename = dump.make_database_dump_filename(
     dump_filename = dump.make_database_dump_filename(
         make_dump_path(location_config), database['name'], database.get('hostname')
         make_dump_path(location_config), database['name'], database.get('hostname')
     )
     )
-    restore_command = build_restore_command(extract_process, database, dump_filename, connection_params)
+    restore_command = build_restore_command(
+        extract_process, database, dump_filename, connection_params
+    )
 
 
     logger.debug(f"{log_prefix}: Restoring MongoDB database {database['name']}{dry_run_label}")
     logger.debug(f"{log_prefix}: Restoring MongoDB database {database['name']}{dry_run_label}")
     if dry_run:
     if dry_run:
@@ -142,10 +146,16 @@ def build_restore_command(extract_process, database, dump_filename, connection_p
     '''
     '''
     Return the mongorestore command from a single database configuration.
     Return the mongorestore command from a single database configuration.
     '''
     '''
-    hostname = connection_params['hostname'] or database.get('restore_hostname', database.get('hostname'))
+    hostname = connection_params['hostname'] or database.get(
+        'restore_hostname', database.get('hostname')
+    )
     port = str(connection_params['port'] or database.get('restore_port', database.get('port', '')))
     port = str(connection_params['port'] or database.get('restore_port', database.get('port', '')))
-    username = connection_params['username'] or database.get('restore_username', database.get('username'))
-    password = connection_params['password'] or database.get('restore_password', database.get('password'))
+    username = connection_params['username'] or database.get(
+        'restore_username', database.get('username')
+    )
+    password = connection_params['password'] or database.get(
+        'restore_password', database.get('password')
+    )
 
 
     command = ['mongorestore']
     command = ['mongorestore']
     if extract_process:
     if extract_process:

+ 12 - 4
borgmatic/hooks/mysql.py

@@ -185,7 +185,9 @@ def make_database_dump_pattern(
     return dump.make_database_dump_filename(make_dump_path(location_config), name, hostname='*')
     return dump.make_database_dump_filename(make_dump_path(location_config), name, hostname='*')
 
 
 
 
-def restore_database_dump(database_config, log_prefix, location_config, dry_run, extract_process, connection_params):
+def restore_database_dump(
+    database_config, log_prefix, location_config, dry_run, extract_process, connection_params
+):
     '''
     '''
     Restore the given MySQL/MariaDB database from an extract stream. The database is supplied as a
     Restore the given MySQL/MariaDB database from an extract stream. The database is supplied as a
     one-element sequence containing a dict describing the database, as per the configuration schema.
     one-element sequence containing a dict describing the database, as per the configuration schema.
@@ -200,10 +202,16 @@ def restore_database_dump(database_config, log_prefix, location_config, dry_run,
 
 
     database = database_config[0]
     database = database_config[0]
 
 
-    hostname = connection_params['hostname'] or database.get('restore_hostname', database.get('hostname'))
+    hostname = connection_params['hostname'] or database.get(
+        'restore_hostname', database.get('hostname')
+    )
     port = str(connection_params['port'] or database.get('restore_port', database.get('port', '')))
     port = str(connection_params['port'] or database.get('restore_port', database.get('port', '')))
-    username = connection_params['username'] or database.get('restore_username', database.get('username'))
-    password = connection_params['password'] or database.get('restore_password', database.get('password'))
+    username = connection_params['username'] or database.get(
+        'restore_username', database.get('username')
+    )
+    password = connection_params['password'] or database.get(
+        'restore_password', database.get('password')
+    )
 
 
     restore_command = (
     restore_command = (
         ('mysql', '--batch')
         ('mysql', '--batch')

+ 17 - 6
borgmatic/hooks/postgresql.py

@@ -22,6 +22,7 @@ def make_dump_path(location_config):  # pragma: no cover
         location_config.get('borgmatic_source_directory'), 'postgresql_databases'
         location_config.get('borgmatic_source_directory'), 'postgresql_databases'
     )
     )
 
 
+
 def make_extra_environment(database, restore_connection_params=None):
 def make_extra_environment(database, restore_connection_params=None):
     '''
     '''
     Make the extra_environment dict from the given database configuration.
     Make the extra_environment dict from the given database configuration.
@@ -31,12 +32,14 @@ def make_extra_environment(database, restore_connection_params=None):
 
 
     try:
     try:
         if restore_connection_params:
         if restore_connection_params:
-            extra['PGPASSWORD'] = restore_connection_params.get('password') or database.get('restore_password', database['password'])
+            extra['PGPASSWORD'] = restore_connection_params.get('password') or database.get(
+                'restore_password', database['password']
+            )
         else:
         else:
             extra['PGPASSWORD'] = database['password']
             extra['PGPASSWORD'] = database['password']
     except (AttributeError, KeyError):
     except (AttributeError, KeyError):
         pass
         pass
-    
+
     extra['PGSSLMODE'] = database.get('ssl_mode', 'disable')
     extra['PGSSLMODE'] = database.get('ssl_mode', 'disable')
     if 'ssl_cert' in database:
     if 'ssl_cert' in database:
         extra['PGSSLCERT'] = database['ssl_cert']
         extra['PGSSLCERT'] = database['ssl_cert']
@@ -200,7 +203,9 @@ def make_database_dump_pattern(
     return dump.make_database_dump_filename(make_dump_path(location_config), name, hostname='*')
     return dump.make_database_dump_filename(make_dump_path(location_config), name, hostname='*')
 
 
 
 
-def restore_database_dump(database_config, log_prefix, location_config, dry_run, extract_process, connection_params):
+def restore_database_dump(
+    database_config, log_prefix, location_config, dry_run, extract_process, connection_params
+):
     '''
     '''
     Restore the given PostgreSQL database from an extract stream. The database is supplied as a
     Restore the given PostgreSQL database from an extract stream. The database is supplied as a
     one-element sequence containing a dict describing the database, as per the configuration schema.
     one-element sequence containing a dict describing the database, as per the configuration schema.
@@ -221,9 +226,13 @@ def restore_database_dump(database_config, log_prefix, location_config, dry_run,
 
 
     database = database_config[0]
     database = database_config[0]
 
 
-    hostname = connection_params['hostname'] or database.get('restore_hostname', database.get('hostname'))
+    hostname = connection_params['hostname'] or database.get(
+        'restore_hostname', database.get('hostname')
+    )
     port = str(connection_params['port'] or database.get('restore_port', database.get('port', '')))
     port = str(connection_params['port'] or database.get('restore_port', database.get('port', '')))
-    username = connection_params['username'] or database.get('restore_username', database.get('username'))
+    username = connection_params['username'] or database.get(
+        'restore_username', database.get('username')
+    )
 
 
     all_databases = bool(database['name'] == 'all')
     all_databases = bool(database['name'] == 'all')
     dump_filename = dump.make_database_dump_filename(
     dump_filename = dump.make_database_dump_filename(
@@ -260,7 +269,9 @@ def restore_database_dump(database_config, log_prefix, location_config, dry_run,
         )
         )
     )
     )
 
 
-    extra_environment = make_extra_environment(database, restore_connection_params=connection_params)
+    extra_environment = make_extra_environment(
+        database, restore_connection_params=connection_params
+    )
 
 
     logger.debug(f"{log_prefix}: Restoring PostgreSQL database {database['name']}{dry_run_label}")
     logger.debug(f"{log_prefix}: Restoring PostgreSQL database {database['name']}{dry_run_label}")
     if dry_run:
     if dry_run:

+ 6 - 2
borgmatic/hooks/sqlite.py

@@ -85,7 +85,9 @@ def make_database_dump_pattern(
     return dump.make_database_dump_filename(make_dump_path(location_config), name)
     return dump.make_database_dump_filename(make_dump_path(location_config), name)
 
 
 
 
-def restore_database_dump(database_config, log_prefix, location_config, dry_run, extract_process, connection_params):
+def restore_database_dump(
+    database_config, log_prefix, location_config, dry_run, extract_process, connection_params
+):
     '''
     '''
     Restore the given SQLite3 database from an extract stream. The database is supplied as a
     Restore the given SQLite3 database from an extract stream. The database is supplied as a
     one-element sequence containing a dict describing the database, as per the configuration schema.
     one-element sequence containing a dict describing the database, as per the configuration schema.
@@ -98,7 +100,9 @@ def restore_database_dump(database_config, log_prefix, location_config, dry_run,
     if len(database_config) != 1:
     if len(database_config) != 1:
         raise ValueError('The database configuration value is invalid')
         raise ValueError('The database configuration value is invalid')
 
 
-    database_path = connection_params['restore_path'] or database_config[0].get('restore_path', database_config[0].get('path'))
+    database_path = connection_params['restore_path'] or database_config[0].get(
+        'restore_path', database_config[0].get('path')
+    )
 
 
     logger.debug(f'{log_prefix}: Restoring SQLite database at {database_path}{dry_run_label}')
     logger.debug(f'{log_prefix}: Restoring SQLite database at {database_path}{dry_run_label}')
     if dry_run:
     if dry_run:

+ 44 - 4
tests/unit/actions/test_restore.py

@@ -241,6 +241,7 @@ def test_run_restore_restores_each_database():
         archive_name=object,
         archive_name=object,
         hook_name='postgresql_databases',
         hook_name='postgresql_databases',
         database={'name': 'foo', 'schemas': None},
         database={'name': 'foo', 'schemas': None},
+        connection_params=object,
     ).once()
     ).once()
     flexmock(module).should_receive('restore_single_database').with_args(
     flexmock(module).should_receive('restore_single_database').with_args(
         repository=object,
         repository=object,
@@ -254,6 +255,7 @@ def test_run_restore_restores_each_database():
         archive_name=object,
         archive_name=object,
         hook_name='postgresql_databases',
         hook_name='postgresql_databases',
         database={'name': 'bar', 'schemas': None},
         database={'name': 'bar', 'schemas': None},
+        connection_params=object,
     ).once()
     ).once()
     flexmock(module).should_receive('ensure_databases_found')
     flexmock(module).should_receive('ensure_databases_found')
 
 
@@ -264,7 +266,15 @@ def test_run_restore_restores_each_database():
         hooks=flexmock(),
         hooks=flexmock(),
         local_borg_version=flexmock(),
         local_borg_version=flexmock(),
         restore_arguments=flexmock(
         restore_arguments=flexmock(
-            repository='repo', archive='archive', databases=flexmock(), schemas=None
+            repository='repo',
+            archive='archive',
+            databases=flexmock(),
+            schemas=None,
+            hostname=None,
+            port=None,
+            username=None,
+            password=None,
+            restore_path=None,
         ),
         ),
         global_arguments=flexmock(dry_run=False),
         global_arguments=flexmock(dry_run=False),
         local_path=flexmock(),
         local_path=flexmock(),
@@ -337,6 +347,7 @@ def test_run_restore_restores_database_configured_with_all_name():
         archive_name=object,
         archive_name=object,
         hook_name='postgresql_databases',
         hook_name='postgresql_databases',
         database={'name': 'foo', 'schemas': None},
         database={'name': 'foo', 'schemas': None},
+        connection_params=object,
     ).once()
     ).once()
     flexmock(module).should_receive('restore_single_database').with_args(
     flexmock(module).should_receive('restore_single_database').with_args(
         repository=object,
         repository=object,
@@ -350,6 +361,7 @@ def test_run_restore_restores_database_configured_with_all_name():
         archive_name=object,
         archive_name=object,
         hook_name='postgresql_databases',
         hook_name='postgresql_databases',
         database={'name': 'bar', 'schemas': None},
         database={'name': 'bar', 'schemas': None},
+        connection_params=object,
     ).once()
     ).once()
     flexmock(module).should_receive('ensure_databases_found')
     flexmock(module).should_receive('ensure_databases_found')
 
 
@@ -360,7 +372,15 @@ def test_run_restore_restores_database_configured_with_all_name():
         hooks=flexmock(),
         hooks=flexmock(),
         local_borg_version=flexmock(),
         local_borg_version=flexmock(),
         restore_arguments=flexmock(
         restore_arguments=flexmock(
-            repository='repo', archive='archive', databases=flexmock(), schemas=None
+            repository='repo',
+            archive='archive',
+            databases=flexmock(),
+            schemas=None,
+            hostname=None,
+            port=None,
+            username=None,
+            password=None,
+            restore_path=None,
         ),
         ),
         global_arguments=flexmock(dry_run=False),
         global_arguments=flexmock(dry_run=False),
         local_path=flexmock(),
         local_path=flexmock(),
@@ -411,6 +431,7 @@ def test_run_restore_skips_missing_database():
         archive_name=object,
         archive_name=object,
         hook_name='postgresql_databases',
         hook_name='postgresql_databases',
         database={'name': 'foo', 'schemas': None},
         database={'name': 'foo', 'schemas': None},
+        connection_params=object,
     ).once()
     ).once()
     flexmock(module).should_receive('restore_single_database').with_args(
     flexmock(module).should_receive('restore_single_database').with_args(
         repository=object,
         repository=object,
@@ -424,6 +445,7 @@ def test_run_restore_skips_missing_database():
         archive_name=object,
         archive_name=object,
         hook_name='postgresql_databases',
         hook_name='postgresql_databases',
         database={'name': 'bar', 'schemas': None},
         database={'name': 'bar', 'schemas': None},
+        connection_params=object,
     ).never()
     ).never()
     flexmock(module).should_receive('ensure_databases_found')
     flexmock(module).should_receive('ensure_databases_found')
 
 
@@ -434,7 +456,15 @@ def test_run_restore_skips_missing_database():
         hooks=flexmock(),
         hooks=flexmock(),
         local_borg_version=flexmock(),
         local_borg_version=flexmock(),
         restore_arguments=flexmock(
         restore_arguments=flexmock(
-            repository='repo', archive='archive', databases=flexmock(), schemas=None
+            repository='repo',
+            archive='archive',
+            databases=flexmock(),
+            schemas=None,
+            hostname=None,
+            port=None,
+            username=None,
+            password=None,
+            restore_path=None,
         ),
         ),
         global_arguments=flexmock(dry_run=False),
         global_arguments=flexmock(dry_run=False),
         local_path=flexmock(),
         local_path=flexmock(),
@@ -479,6 +509,7 @@ def test_run_restore_restores_databases_from_different_hooks():
         archive_name=object,
         archive_name=object,
         hook_name='postgresql_databases',
         hook_name='postgresql_databases',
         database={'name': 'foo', 'schemas': None},
         database={'name': 'foo', 'schemas': None},
+        connection_params=object,
     ).once()
     ).once()
     flexmock(module).should_receive('restore_single_database').with_args(
     flexmock(module).should_receive('restore_single_database').with_args(
         repository=object,
         repository=object,
@@ -492,6 +523,7 @@ def test_run_restore_restores_databases_from_different_hooks():
         archive_name=object,
         archive_name=object,
         hook_name='mysql_databases',
         hook_name='mysql_databases',
         database={'name': 'bar', 'schemas': None},
         database={'name': 'bar', 'schemas': None},
+        connection_params=object,
     ).once()
     ).once()
     flexmock(module).should_receive('ensure_databases_found')
     flexmock(module).should_receive('ensure_databases_found')
 
 
@@ -502,7 +534,15 @@ def test_run_restore_restores_databases_from_different_hooks():
         hooks=flexmock(),
         hooks=flexmock(),
         local_borg_version=flexmock(),
         local_borg_version=flexmock(),
         restore_arguments=flexmock(
         restore_arguments=flexmock(
-            repository='repo', archive='archive', databases=flexmock(), schemas=None
+            repository='repo',
+            archive='archive',
+            databases=flexmock(),
+            schemas=None,
+            hostname=None,
+            port=None,
+            username=None,
+            password=None,
+            restore_path=None,
         ),
         ),
         global_arguments=flexmock(dry_run=False),
         global_arguments=flexmock(dry_run=False),
         local_path=flexmock(),
         local_path=flexmock(),

+ 99 - 9
tests/unit/hooks/test_mongodb.py

@@ -171,7 +171,17 @@ def test_restore_database_dump_runs_mongorestore():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -185,7 +195,17 @@ def test_restore_database_dump_errors_on_multiple_database_config():
 
 
     with pytest.raises(ValueError):
     with pytest.raises(ValueError):
         module.restore_database_dump(
         module.restore_database_dump(
-            database_config, 'test.yaml', {}, dry_run=False, extract_process=flexmock()
+            database_config,
+            'test.yaml',
+            {},
+            dry_run=False,
+            extract_process=flexmock(),
+            connection_params={
+                'hostname': None,
+                'port': None,
+                'username': None,
+                'password': None,
+            },
         )
         )
 
 
 
 
@@ -215,7 +235,17 @@ def test_restore_database_dump_runs_mongorestore_with_hostname_and_port():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -253,7 +283,17 @@ def test_restore_database_dump_runs_mongorestore_with_username_and_password():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -271,7 +311,17 @@ def test_restore_database_dump_runs_mongorestore_with_options():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -299,7 +349,17 @@ def test_restore_databases_dump_runs_mongorestore_with_schemas():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -317,7 +377,17 @@ def test_restore_database_dump_runs_psql_for_all_database_dump():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -329,7 +399,17 @@ def test_restore_database_dump_with_dry_run_skips_restore():
     flexmock(module).should_receive('execute_command_with_processes').never()
     flexmock(module).should_receive('execute_command_with_processes').never()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=True, extract_process=flexmock()
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=True,
+        extract_process=flexmock(),
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -346,5 +426,15 @@ def test_restore_database_dump_without_extract_process_restores_from_disk():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=None
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=None,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )

+ 66 - 6
tests/unit/hooks/test_mysql.py

@@ -392,7 +392,17 @@ def test_restore_database_dump_runs_mysql_to_restore():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -404,7 +414,17 @@ def test_restore_database_dump_errors_on_multiple_database_config():
 
 
     with pytest.raises(ValueError):
     with pytest.raises(ValueError):
         module.restore_database_dump(
         module.restore_database_dump(
-            database_config, 'test.yaml', {}, dry_run=False, extract_process=flexmock()
+            database_config,
+            'test.yaml',
+            {},
+            dry_run=False,
+            extract_process=flexmock(),
+            connection_params={
+                'hostname': None,
+                'port': None,
+                'username': None,
+                'password': None,
+            },
         )
         )
 
 
 
 
@@ -421,7 +441,17 @@ def test_restore_database_dump_runs_mysql_with_options():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -447,7 +477,17 @@ def test_restore_database_dump_runs_mysql_with_hostname_and_port():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -464,7 +504,17 @@ def test_restore_database_dump_runs_mysql_with_username_and_password():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -474,5 +524,15 @@ def test_restore_database_dump_with_dry_run_skips_restore():
     flexmock(module).should_receive('execute_command_with_processes').never()
     flexmock(module).should_receive('execute_command_with_processes').never()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=True, extract_process=flexmock()
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=True,
+        extract_process=flexmock(),
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )

+ 121 - 11
tests/unit/hooks/test_postgresql.py

@@ -479,7 +479,17 @@ def test_restore_database_dump_runs_pg_restore():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -494,7 +504,17 @@ def test_restore_database_dump_errors_on_multiple_database_config():
 
 
     with pytest.raises(ValueError):
     with pytest.raises(ValueError):
         module.restore_database_dump(
         module.restore_database_dump(
-            database_config, 'test.yaml', {}, dry_run=False, extract_process=flexmock()
+            database_config,
+            'test.yaml',
+            {},
+            dry_run=False,
+            extract_process=flexmock(),
+            connection_params={
+                'restore_hostname': None,
+                'restore_port': None,
+                'restore_username': None,
+                'restore_password': None,
+            },
         )
         )
 
 
 
 
@@ -545,7 +565,17 @@ def test_restore_database_dump_runs_pg_restore_with_hostname_and_port():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -594,7 +624,17 @@ def test_restore_database_dump_runs_pg_restore_with_username_and_password():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -644,7 +684,17 @@ def test_restore_database_dump_runs_pg_restore_with_options():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -672,7 +722,17 @@ def test_restore_database_dump_runs_psql_for_all_database_dump():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -705,7 +765,17 @@ def test_restore_database_dump_runs_psql_for_plain_database_dump():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -759,7 +829,17 @@ def test_restore_database_dump_runs_non_default_pg_restore_and_psql():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -772,7 +852,17 @@ def test_restore_database_dump_with_dry_run_skips_restore():
     flexmock(module).should_receive('execute_command_with_processes').never()
     flexmock(module).should_receive('execute_command_with_processes').never()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=True, extract_process=flexmock()
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=True,
+        extract_process=flexmock(),
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -813,7 +903,17 @@ def test_restore_database_dump_without_extract_process_restores_from_disk():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=None
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=None,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )
 
 
 
 
@@ -858,5 +958,15 @@ def test_restore_database_dump_with_schemas_restores_schemas():
     ).once()
     ).once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=None
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=None,
+        connection_params={
+            'hostname': None,
+            'port': None,
+            'username': None,
+            'password': None,
+        },
     )
     )

+ 18 - 3
tests/unit/hooks/test_sqlite.py

@@ -99,7 +99,12 @@ def test_restore_database_dump_restores_database():
     flexmock(module.os).should_receive('remove').once()
     flexmock(module.os).should_receive('remove').once()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=False,
+        extract_process=extract_process,
+        connection_params={'restore_path': None},
     )
     )
 
 
 
 
@@ -111,7 +116,12 @@ def test_restore_database_dump_does_not_restore_database_if_dry_run():
     flexmock(module.os).should_receive('remove').never()
     flexmock(module.os).should_receive('remove').never()
 
 
     module.restore_database_dump(
     module.restore_database_dump(
-        database_config, 'test.yaml', {}, dry_run=True, extract_process=extract_process
+        database_config,
+        'test.yaml',
+        {},
+        dry_run=True,
+        extract_process=extract_process,
+        connection_params={'restore_path': None},
     )
     )
 
 
 
 
@@ -121,5 +131,10 @@ def test_restore_database_dump_raises_error_if_database_config_is_invalid():
 
 
     with pytest.raises(ValueError):
     with pytest.raises(ValueError):
         module.restore_database_dump(
         module.restore_database_dump(
-            database_config, 'test.yaml', {}, dry_run=False, extract_process=extract_process
+            database_config,
+            'test.yaml',
+            {},
+            dry_run=False,
+            extract_process=extract_process,
+            connection_params={'restore_path': None},
         )
         )