test_systemd.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import io
  2. import sys
  3. import pytest
  4. from flexmock import flexmock
  5. from borgmatic.hooks.credential import systemd as module
  6. @pytest.mark.parametrize('credential_parameters', ((), ('foo', 'bar')))
  7. def test_load_credential_with_invalid_credential_parameters_raises(credential_parameters):
  8. flexmock(module.os.environ).should_receive('get').never()
  9. with pytest.raises(ValueError):
  10. module.load_credential(
  11. hook_config={}, config={}, credential_parameters=credential_parameters
  12. )
  13. def test_load_credential_without_credentials_directory_raises():
  14. flexmock(module.os.environ).should_receive('get').with_args('CREDENTIALS_DIRECTORY').and_return(
  15. None
  16. )
  17. with pytest.raises(ValueError):
  18. module.load_credential(hook_config={}, config={}, credential_parameters=('mycredential',))
  19. def test_load_credential_with_invalid_credential_name_raises():
  20. flexmock(module.os.environ).should_receive('get').with_args('CREDENTIALS_DIRECTORY').and_return(
  21. '/var'
  22. )
  23. with pytest.raises(ValueError):
  24. module.load_credential(
  25. hook_config={}, config={}, credential_parameters=('../../my!@#$credential',)
  26. )
  27. def test_load_credential_reads_named_credential_from_file():
  28. flexmock(module.os.environ).should_receive('get').with_args('CREDENTIALS_DIRECTORY').and_return(
  29. '/var'
  30. )
  31. credential_stream = io.StringIO('password')
  32. credential_stream.name = '/var/borgmatic.pw'
  33. builtins = flexmock(sys.modules['builtins'])
  34. builtins.should_receive('open').with_args('/var/borgmatic.pw').and_return(credential_stream)
  35. assert (
  36. module.load_credential(hook_config={}, config={}, credential_parameters=('borgmatic.pw',))
  37. == 'password'
  38. )
  39. def test_load_credential_with_file_not_found_error_raises():
  40. flexmock(module.os.environ).should_receive('get').with_args('CREDENTIALS_DIRECTORY').and_return(
  41. '/var'
  42. )
  43. builtins = flexmock(sys.modules['builtins'])
  44. builtins.should_receive('open').with_args('/var/mycredential').and_raise(FileNotFoundError)
  45. with pytest.raises(ValueError):
  46. module.load_credential(hook_config={}, config={}, credential_parameters=('mycredential',))