mirror of
https://github.com/borgmatic-collective/borgmatic.git
synced 2026-07-27 11:53:02 +02:00
96 lines
3.2 KiB
Python
96 lines
3.2 KiB
Python
import pytest
|
|
from flexmock import flexmock
|
|
|
|
from borgmatic.hooks.credential import parse as module
|
|
|
|
|
|
def test_hash_adapter_is_always_equal():
|
|
assert module.Hash_adapter({1: 2}) == module.Hash_adapter({3: 4})
|
|
|
|
|
|
def test_hash_adapter_alwaysh_hashes_the_same():
|
|
assert hash(module.Hash_adapter({1: 2})) == hash(module.Hash_adapter({3: 4}))
|
|
|
|
|
|
def test_cache_ignoring_unhashable_arguments_caches_arguments_after_first_call():
|
|
hashable = 3
|
|
unhashable = {1, 2}
|
|
calls = 0
|
|
|
|
@module.cache_ignoring_unhashable_arguments
|
|
def function(first, second, third):
|
|
nonlocal calls
|
|
calls += 1
|
|
|
|
assert first == hashable
|
|
assert second == unhashable
|
|
assert third == unhashable
|
|
|
|
return first
|
|
|
|
assert function(hashable, unhashable, third=unhashable) == hashable
|
|
assert calls == 1
|
|
|
|
assert function(hashable, unhashable, third=unhashable) == hashable
|
|
assert calls == 1
|
|
|
|
|
|
def test_resolve_credential_passes_through_string_without_credential():
|
|
module.resolve_credential.cache_clear()
|
|
flexmock(module.borgmatic.hooks.dispatch).should_receive('call_hook').never()
|
|
|
|
assert module.resolve_credential('{no credentials here}', config={}) == '{no credentials here}'
|
|
|
|
|
|
def test_resolve_credential_passes_through_none():
|
|
module.resolve_credential.cache_clear()
|
|
flexmock(module.borgmatic.hooks.dispatch).should_receive('call_hook').never()
|
|
|
|
assert module.resolve_credential(None, config={}) is None
|
|
|
|
|
|
@pytest.mark.parametrize('invalid_value', ('{credential}', '{credential }', '{credential systemd}'))
|
|
def test_resolve_credential_with_invalid_credential_raises(invalid_value):
|
|
module.resolve_credential.cache_clear()
|
|
flexmock(module.borgmatic.hooks.dispatch).should_receive('call_hook').never()
|
|
|
|
with pytest.raises(ValueError):
|
|
module.resolve_credential(invalid_value, config={})
|
|
|
|
|
|
def test_resolve_credential_with_valid_credential_loads_credential():
|
|
module.resolve_credential.cache_clear()
|
|
flexmock(module.borgmatic.hooks.dispatch).should_receive('call_hook').with_args(
|
|
'load_credential',
|
|
{},
|
|
'systemd',
|
|
('mycredential',),
|
|
).and_return('result').once()
|
|
|
|
assert module.resolve_credential('{credential systemd mycredential}', config={}) == 'result'
|
|
|
|
|
|
def test_resolve_credential_with_valid_credential_and_quoted_parameters_loads_credential():
|
|
module.resolve_credential.cache_clear()
|
|
flexmock(module.borgmatic.hooks.dispatch).should_receive('call_hook').with_args(
|
|
'load_credential',
|
|
{},
|
|
'systemd',
|
|
('my credential',),
|
|
).and_return('result').once()
|
|
|
|
assert module.resolve_credential('{credential systemd "my credential"}', config={}) == 'result'
|
|
|
|
|
|
def test_resolve_credential_caches_credential_after_first_call():
|
|
module.resolve_credential.cache_clear()
|
|
flexmock(module.borgmatic.hooks.dispatch).should_receive('call_hook').with_args(
|
|
'load_credential',
|
|
{},
|
|
'systemd',
|
|
('mycredential',),
|
|
).and_return('result').once()
|
|
|
|
assert module.resolve_credential('{credential systemd mycredential}', config={}) == 'result'
|
|
assert module.resolve_credential('{credential systemd mycredential}', config={}) == 'result'
|