test_file.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import io
  2. import sys
  3. import pytest
  4. from flexmock import flexmock
  5. from borgmatic.hooks.credential import file 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_credential_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_credential_from_file():
  18. credential_stream = io.StringIO('password')
  19. credential_stream.name = '/credentials/mycredential'
  20. builtins = flexmock(sys.modules['builtins'])
  21. flexmock(module.os.path).should_receive('expanduser').with_args(
  22. '/credentials/mycredential'
  23. ).and_return('/credentials/mycredential')
  24. builtins.should_receive('open').with_args('/credentials/mycredential').and_return(
  25. credential_stream
  26. )
  27. assert (
  28. module.load_credential(
  29. hook_config={}, config={}, credential_parameters=('/credentials/mycredential',)
  30. )
  31. == 'password'
  32. )
  33. def test_load_credential_reads_named_credential_from_file_using_working_directory():
  34. credential_stream = io.StringIO('password')
  35. credential_stream.name = '/working/credentials/mycredential'
  36. builtins = flexmock(sys.modules['builtins'])
  37. flexmock(module.os.path).should_receive('expanduser').with_args(
  38. 'credentials/mycredential'
  39. ).and_return('credentials/mycredential')
  40. builtins.should_receive('open').with_args('/working/credentials/mycredential').and_return(
  41. credential_stream
  42. )
  43. assert (
  44. module.load_credential(
  45. hook_config={},
  46. config={'working_directory': '/working'},
  47. credential_parameters=('credentials/mycredential',),
  48. )
  49. == 'password'
  50. )
  51. def test_load_credential_with_file_not_found_error_raises():
  52. builtins = flexmock(sys.modules['builtins'])
  53. flexmock(module.os.path).should_receive('expanduser').with_args(
  54. '/credentials/mycredential'
  55. ).and_return('/credentials/mycredential')
  56. builtins.should_receive('open').with_args('/credentials/mycredential').and_raise(
  57. FileNotFoundError
  58. )
  59. with pytest.raises(ValueError):
  60. module.load_credential(
  61. hook_config={}, config={}, credential_parameters=('/credentials/mycredential',)
  62. )
  63. def test_load_credential_reads_named_credential_from_expanded_directory():
  64. credential_stream = io.StringIO('password')
  65. credential_stream.name = '/root/credentials/mycredential'
  66. builtins = flexmock(sys.modules['builtins'])
  67. flexmock(module.os.path).should_receive('expanduser').with_args(
  68. '~/credentials/mycredential'
  69. ).and_return('/root/credentials/mycredential')
  70. builtins.should_receive('open').with_args('/root/credentials/mycredential').and_return(
  71. credential_stream
  72. )
  73. assert (
  74. module.load_credential(
  75. hook_config={}, config={}, credential_parameters=('~/credentials/mycredential',)
  76. )
  77. == 'password'
  78. )