|
@@ -17,7 +17,15 @@ def test_call_hook_invokes_module_function_with_arguments_and_returns_value():
|
|
|
config = {'super_hook': flexmock(), 'other_hook': flexmock()}
|
|
|
expected_return_value = flexmock()
|
|
|
test_module = sys.modules[__name__]
|
|
|
- flexmock(module).HOOK_NAME_TO_MODULE = {'super_hook': test_module}
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.data_source
|
|
|
+ ).and_return(['other_hook'])
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.monitoring
|
|
|
+ ).and_return(['super_hook', 'third_hook'])
|
|
|
+ flexmock(module.importlib).should_receive('import_module').with_args(
|
|
|
+ 'borgmatic.hooks.monitoring.super_hook'
|
|
|
+ ).and_return(test_module)
|
|
|
flexmock(test_module).should_receive('hook_function').with_args(
|
|
|
config['super_hook'], config, 'prefix', 55, value=66
|
|
|
).and_return(expected_return_value).once()
|
|
@@ -27,11 +35,65 @@ def test_call_hook_invokes_module_function_with_arguments_and_returns_value():
|
|
|
assert return_value == expected_return_value
|
|
|
|
|
|
|
|
|
+def test_call_hook_probes_config_with_databases_suffix():
|
|
|
+ config = {'super_hook_databases': flexmock(), 'other_hook': flexmock()}
|
|
|
+ expected_return_value = flexmock()
|
|
|
+ test_module = sys.modules[__name__]
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.data_source
|
|
|
+ ).and_return(['other_hook'])
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.monitoring
|
|
|
+ ).and_return(['super_hook', 'third_hook'])
|
|
|
+ flexmock(module.importlib).should_receive('import_module').with_args(
|
|
|
+ 'borgmatic.hooks.monitoring.super_hook'
|
|
|
+ ).and_return(test_module)
|
|
|
+ flexmock(test_module).should_receive('hook_function').with_args(
|
|
|
+ config['super_hook_databases'], config, 'prefix', 55, value=66
|
|
|
+ ).and_return(expected_return_value).once()
|
|
|
+
|
|
|
+ return_value = module.call_hook('hook_function', config, 'prefix', 'super_hook', 55, value=66)
|
|
|
+
|
|
|
+ assert return_value == expected_return_value
|
|
|
+
|
|
|
+
|
|
|
+def test_call_hook_strips_databases_suffix_from_hook_name():
|
|
|
+ config = {'super_hook_databases': flexmock(), 'other_hook_databases': flexmock()}
|
|
|
+ expected_return_value = flexmock()
|
|
|
+ test_module = sys.modules[__name__]
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.data_source
|
|
|
+ ).and_return(['other_hook'])
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.monitoring
|
|
|
+ ).and_return(['super_hook', 'third_hook'])
|
|
|
+ flexmock(module.importlib).should_receive('import_module').with_args(
|
|
|
+ 'borgmatic.hooks.monitoring.super_hook'
|
|
|
+ ).and_return(test_module)
|
|
|
+ flexmock(test_module).should_receive('hook_function').with_args(
|
|
|
+ config['super_hook_databases'], config, 'prefix', 55, value=66
|
|
|
+ ).and_return(expected_return_value).once()
|
|
|
+
|
|
|
+ return_value = module.call_hook(
|
|
|
+ 'hook_function', config, 'prefix', 'super_hook_databases', 55, value=66
|
|
|
+ )
|
|
|
+
|
|
|
+ assert return_value == expected_return_value
|
|
|
+
|
|
|
+
|
|
|
def test_call_hook_without_hook_config_invokes_module_function_with_arguments_and_returns_value():
|
|
|
config = {'other_hook': flexmock()}
|
|
|
expected_return_value = flexmock()
|
|
|
test_module = sys.modules[__name__]
|
|
|
- flexmock(module).HOOK_NAME_TO_MODULE = {'super_hook': test_module}
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.data_source
|
|
|
+ ).and_return(['other_hook'])
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.monitoring
|
|
|
+ ).and_return(['super_hook', 'third_hook'])
|
|
|
+ flexmock(module.importlib).should_receive('import_module').with_args(
|
|
|
+ 'borgmatic.hooks.monitoring.super_hook'
|
|
|
+ ).and_return(test_module)
|
|
|
flexmock(test_module).should_receive('hook_function').with_args(
|
|
|
{}, config, 'prefix', 55, value=66
|
|
|
).and_return(expected_return_value).once()
|
|
@@ -44,35 +106,69 @@ def test_call_hook_without_hook_config_invokes_module_function_with_arguments_an
|
|
|
def test_call_hook_without_corresponding_module_raises():
|
|
|
config = {'super_hook': flexmock(), 'other_hook': flexmock()}
|
|
|
test_module = sys.modules[__name__]
|
|
|
- flexmock(module).HOOK_NAME_TO_MODULE = {'other_hook': test_module}
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.data_source
|
|
|
+ ).and_return(['other_hook'])
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.monitoring
|
|
|
+ ).and_return(['some_hook'])
|
|
|
+ flexmock(module.importlib).should_receive('import_module').with_args(
|
|
|
+ 'borgmatic.hooks.monitoring.super_hook'
|
|
|
+ ).and_return(test_module)
|
|
|
flexmock(test_module).should_receive('hook_function').never()
|
|
|
|
|
|
with pytest.raises(ValueError):
|
|
|
module.call_hook('hook_function', config, 'prefix', 'super_hook', 55, value=66)
|
|
|
|
|
|
|
|
|
+def test_call_hook_skips_non_hook_modules():
|
|
|
+ config = {'not_a_hook': flexmock(), 'other_hook': flexmock()}
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.data_source
|
|
|
+ ).and_return(['other_hook'])
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.monitoring
|
|
|
+ ).and_return(['not_a_hook', 'third_hook'])
|
|
|
+ not_a_hook_module = flexmock(IS_A_HOOK=False)
|
|
|
+ flexmock(module.importlib).should_receive('import_module').with_args(
|
|
|
+ 'borgmatic.hooks.monitoring.not_a_hook'
|
|
|
+ ).and_return(not_a_hook_module)
|
|
|
+
|
|
|
+ return_value = module.call_hook('hook_function', config, 'prefix', 'not_a_hook', 55, value=66)
|
|
|
+
|
|
|
+ assert return_value is None
|
|
|
+
|
|
|
+
|
|
|
def test_call_hooks_calls_each_hook_and_collects_return_values():
|
|
|
config = {'super_hook': flexmock(), 'other_hook': flexmock()}
|
|
|
expected_return_values = {'super_hook': flexmock(), 'other_hook': flexmock()}
|
|
|
+ flexmock(module.importlib).should_receive('import_module').with_args(
|
|
|
+ 'borgmatic.hooks.monitoring'
|
|
|
+ ).and_return(module.borgmatic.hooks.monitoring)
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.monitoring
|
|
|
+ ).and_return(['super_hook', 'other_hook'])
|
|
|
flexmock(module).should_receive('call_hook').and_return(
|
|
|
expected_return_values['super_hook']
|
|
|
).and_return(expected_return_values['other_hook'])
|
|
|
|
|
|
- return_values = module.call_hooks(
|
|
|
- 'do_stuff', config, 'prefix', ('super_hook', 'other_hook'), 55
|
|
|
- )
|
|
|
+ return_values = module.call_hooks('do_stuff', config, 'prefix', module.Hook_type.MONITORING, 55)
|
|
|
|
|
|
assert return_values == expected_return_values
|
|
|
|
|
|
|
|
|
-def test_call_hooks_calls_skips_return_values_for_missing_hooks():
|
|
|
+def test_call_hooks_calls_skips_return_values_for_unconfigured_hooks():
|
|
|
config = {'super_hook': flexmock()}
|
|
|
expected_return_values = {'super_hook': flexmock()}
|
|
|
+ flexmock(module.importlib).should_receive('import_module').with_args(
|
|
|
+ 'borgmatic.hooks.monitoring'
|
|
|
+ ).and_return(module.borgmatic.hooks.monitoring)
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.monitoring
|
|
|
+ ).and_return(['super_hook', 'other_hook'])
|
|
|
flexmock(module).should_receive('call_hook').and_return(expected_return_values['super_hook'])
|
|
|
|
|
|
- return_values = module.call_hooks(
|
|
|
- 'do_stuff', config, 'prefix', ('super_hook', 'other_hook'), 55
|
|
|
- )
|
|
|
+ return_values = module.call_hooks('do_stuff', config, 'prefix', module.Hook_type.MONITORING, 55)
|
|
|
|
|
|
assert return_values == expected_return_values
|
|
|
|
|
@@ -80,13 +176,35 @@ def test_call_hooks_calls_skips_return_values_for_missing_hooks():
|
|
|
def test_call_hooks_calls_treats_null_hook_as_optionless():
|
|
|
config = {'super_hook': flexmock(), 'other_hook': None}
|
|
|
expected_return_values = {'super_hook': flexmock(), 'other_hook': flexmock()}
|
|
|
+ flexmock(module.importlib).should_receive('import_module').with_args(
|
|
|
+ 'borgmatic.hooks.monitoring'
|
|
|
+ ).and_return(module.borgmatic.hooks.monitoring)
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.monitoring
|
|
|
+ ).and_return(['super_hook', 'other_hook'])
|
|
|
flexmock(module).should_receive('call_hook').and_return(
|
|
|
expected_return_values['super_hook']
|
|
|
).and_return(expected_return_values['other_hook'])
|
|
|
|
|
|
- return_values = module.call_hooks(
|
|
|
- 'do_stuff', config, 'prefix', ('super_hook', 'other_hook'), 55
|
|
|
- )
|
|
|
+ return_values = module.call_hooks('do_stuff', config, 'prefix', module.Hook_type.MONITORING, 55)
|
|
|
+
|
|
|
+ assert return_values == expected_return_values
|
|
|
+
|
|
|
+
|
|
|
+def test_call_hooks_calls_looks_up_databases_suffix_in_config():
|
|
|
+ config = {'super_hook_databases': flexmock(), 'other_hook': flexmock()}
|
|
|
+ expected_return_values = {'super_hook': flexmock(), 'other_hook': flexmock()}
|
|
|
+ flexmock(module.importlib).should_receive('import_module').with_args(
|
|
|
+ 'borgmatic.hooks.monitoring'
|
|
|
+ ).and_return(module.borgmatic.hooks.monitoring)
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.monitoring
|
|
|
+ ).and_return(['super_hook', 'other_hook'])
|
|
|
+ flexmock(module).should_receive('call_hook').and_return(
|
|
|
+ expected_return_values['super_hook']
|
|
|
+ ).and_return(expected_return_values['other_hook'])
|
|
|
+
|
|
|
+ return_values = module.call_hooks('do_stuff', config, 'prefix', module.Hook_type.MONITORING, 55)
|
|
|
|
|
|
assert return_values == expected_return_values
|
|
|
|
|
@@ -94,12 +212,18 @@ def test_call_hooks_calls_treats_null_hook_as_optionless():
|
|
|
def test_call_hooks_even_if_unconfigured_calls_each_hook_and_collects_return_values():
|
|
|
config = {'super_hook': flexmock(), 'other_hook': flexmock()}
|
|
|
expected_return_values = {'super_hook': flexmock(), 'other_hook': flexmock()}
|
|
|
+ flexmock(module.importlib).should_receive('import_module').with_args(
|
|
|
+ 'borgmatic.hooks.monitoring'
|
|
|
+ ).and_return(module.borgmatic.hooks.monitoring)
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.monitoring
|
|
|
+ ).and_return(['super_hook', 'other_hook'])
|
|
|
flexmock(module).should_receive('call_hook').and_return(
|
|
|
expected_return_values['super_hook']
|
|
|
).and_return(expected_return_values['other_hook'])
|
|
|
|
|
|
return_values = module.call_hooks_even_if_unconfigured(
|
|
|
- 'do_stuff', config, 'prefix', ('super_hook', 'other_hook'), 55
|
|
|
+ 'do_stuff', config, 'prefix', module.Hook_type.MONITORING, 55
|
|
|
)
|
|
|
|
|
|
assert return_values == expected_return_values
|
|
@@ -108,12 +232,18 @@ def test_call_hooks_even_if_unconfigured_calls_each_hook_and_collects_return_val
|
|
|
def test_call_hooks_even_if_unconfigured_calls_each_hook_configured_or_not_and_collects_return_values():
|
|
|
config = {'other_hook': flexmock()}
|
|
|
expected_return_values = {'super_hook': flexmock(), 'other_hook': flexmock()}
|
|
|
+ flexmock(module.importlib).should_receive('import_module').with_args(
|
|
|
+ 'borgmatic.hooks.monitoring'
|
|
|
+ ).and_return(module.borgmatic.hooks.monitoring)
|
|
|
+ flexmock(module).should_receive('get_submodule_names').with_args(
|
|
|
+ module.borgmatic.hooks.monitoring
|
|
|
+ ).and_return(['super_hook', 'other_hook'])
|
|
|
flexmock(module).should_receive('call_hook').and_return(
|
|
|
expected_return_values['super_hook']
|
|
|
).and_return(expected_return_values['other_hook'])
|
|
|
|
|
|
return_values = module.call_hooks_even_if_unconfigured(
|
|
|
- 'do_stuff', config, 'prefix', ('super_hook', 'other_hook'), 55
|
|
|
+ 'do_stuff', config, 'prefix', module.Hook_type.MONITORING, 55
|
|
|
)
|
|
|
|
|
|
assert return_values == expected_return_values
|