2
0

test_container.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import io
  2. import sys
  3. import pytest
  4. from flexmock import flexmock
  5. from borgmatic.hooks.credential import container as module
  6. @pytest.mark.parametrize('credential_parameters', ((), ('foo', 'bar')))
  7. def test_load_credential_with_invalid_credential_parameters_raises(credential_parameters):
  8. with pytest.raises(ValueError):
  9. module.load_credential(
  10. hook_config={}, config={}, credential_parameters=credential_parameters
  11. )
  12. def test_load_credential_with_invalid_secret_name_raises():
  13. with pytest.raises(ValueError):
  14. module.load_credential(
  15. hook_config={}, config={}, credential_parameters=('this is invalid',)
  16. )
  17. def test_load_credential_reads_named_secret_from_file():
  18. credential_stream = io.StringIO('password')
  19. credential_stream.name = '/run/secrets/mysecret'
  20. builtins = flexmock(sys.modules['builtins'])
  21. builtins.should_receive('open').with_args('/run/secrets/mysecret').and_return(credential_stream)
  22. assert (
  23. module.load_credential(hook_config={}, config={}, credential_parameters=('mysecret',))
  24. == 'password'
  25. )
  26. def test_load_credential_with_custom_secrets_directory_looks_there_for_secret_file():
  27. config = {'container': {'secrets_directory': '/secrets'}}
  28. credential_stream = io.StringIO('password')
  29. credential_stream.name = '/secrets/mysecret'
  30. builtins = flexmock(sys.modules['builtins'])
  31. builtins.should_receive('open').with_args('/secrets/mysecret').and_return(credential_stream)
  32. assert (
  33. module.load_credential(
  34. hook_config=config['container'], config=config, credential_parameters=('mysecret',)
  35. )
  36. == 'password'
  37. )
  38. def test_load_credential_with_file_not_found_error_raises():
  39. builtins = flexmock(sys.modules['builtins'])
  40. builtins.should_receive('open').with_args('/run/secrets/mysecret').and_raise(FileNotFoundError)
  41. with pytest.raises(ValueError):
  42. module.load_credential(hook_config={}, config={}, credential_parameters=('mysecret',))