test_environment.py 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. from flexmock import flexmock
  2. from borgmatic.borg import environment as module
  3. def test_make_environment_with_passcommand_should_call_it_and_set_passphrase_file_descriptor_in_environment():
  4. flexmock(module.os).should_receive('environ').and_return({'USER': 'root'})
  5. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  6. 'resolve_credential'
  7. ).and_return(None)
  8. flexmock(module.borgmatic.borg.passcommand).should_receive(
  9. 'get_passphrase_from_passcommand'
  10. ).and_return('passphrase')
  11. flexmock(module.os).should_receive('pipe').and_return((3, 4))
  12. flexmock(module.os).should_receive('write')
  13. flexmock(module.os).should_receive('close')
  14. flexmock(module.os).should_receive('set_inheritable')
  15. environment = module.make_environment({'encryption_passcommand': 'command'})
  16. assert environment.get('BORG_PASSCOMMAND') is None
  17. assert environment.get('BORG_PASSPHRASE_FD') == '3'
  18. def test_make_environment_with_passphrase_should_set_passphrase_file_descriptor_in_environment():
  19. flexmock(module.os).should_receive('environ').and_return({'USER': 'root'})
  20. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  21. 'resolve_credential'
  22. ).replace_with(lambda value, config: value)
  23. flexmock(module.borgmatic.borg.passcommand).should_receive(
  24. 'get_passphrase_from_passcommand'
  25. ).and_return(None)
  26. flexmock(module.os).should_receive('pipe').and_return((3, 4))
  27. flexmock(module.os).should_receive('write')
  28. flexmock(module.os).should_receive('close')
  29. flexmock(module.os).should_receive('set_inheritable')
  30. environment = module.make_environment({'encryption_passphrase': 'pass'})
  31. assert environment.get('BORG_PASSPHRASE') is None
  32. assert environment.get('BORG_PASSPHRASE_FD') == '3'
  33. def test_make_environment_with_credential_tag_passphrase_should_load_it_and_set_passphrase_file_descriptor_in_environment():
  34. flexmock(module.os).should_receive('environ').and_return({'USER': 'root'})
  35. config = {'encryption_passphrase': '{credential systemd pass}'}
  36. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  37. 'resolve_credential',
  38. ).with_args('{credential systemd pass}', config).and_return('pass')
  39. flexmock(module.borgmatic.borg.passcommand).should_receive(
  40. 'get_passphrase_from_passcommand'
  41. ).never()
  42. flexmock(module.os).should_receive('pipe').and_return((3, 4))
  43. flexmock(module.os).should_receive('write')
  44. flexmock(module.os).should_receive('close')
  45. flexmock(module.os).should_receive('set_inheritable')
  46. environment = module.make_environment(config)
  47. assert environment.get('BORG_PASSPHRASE') is None
  48. assert environment.get('BORG_PASSPHRASE_FD') == '3'
  49. def test_make_environment_with_ssh_command_should_set_environment():
  50. flexmock(module.os).should_receive('environ').and_return({'USER': 'root'})
  51. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  52. 'resolve_credential'
  53. ).and_return(None)
  54. flexmock(module.os).should_receive('pipe').never()
  55. environment = module.make_environment({'ssh_command': 'ssh -C'})
  56. assert environment.get('BORG_RSH') == 'ssh -C'
  57. def test_make_environment_without_configuration_sets_certain_environment_variables():
  58. flexmock(module.os).should_receive('environ').and_return({'USER': 'root'})
  59. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  60. 'resolve_credential'
  61. ).and_return(None)
  62. flexmock(module.os).should_receive('pipe').never()
  63. environment = module.make_environment({})
  64. # Default environment variables.
  65. assert environment == {
  66. 'USER': 'root',
  67. 'BORG_EXIT_CODES': 'modern',
  68. 'BORG_RELOCATED_REPO_ACCESS_IS_OK': 'no',
  69. 'BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK': 'no',
  70. }
  71. def test_make_environment_without_configuration_passes_through_default_environment_variables_untouched():
  72. flexmock(module.os).should_receive('environ').and_return(
  73. {
  74. 'USER': 'root',
  75. 'BORG_RELOCATED_REPO_ACCESS_IS_OK': 'yup',
  76. 'BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK': 'nah',
  77. }
  78. )
  79. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  80. 'resolve_credential'
  81. ).and_return(None)
  82. flexmock(module.os).should_receive('pipe').never()
  83. environment = module.make_environment({})
  84. assert environment == {
  85. 'USER': 'root',
  86. 'BORG_RELOCATED_REPO_ACCESS_IS_OK': 'yup',
  87. 'BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK': 'nah',
  88. 'BORG_EXIT_CODES': 'modern',
  89. }
  90. def test_make_environment_with_relocated_repo_access_true_should_set_environment_yes():
  91. flexmock(module.os).should_receive('environ').and_return({'USER': 'root'})
  92. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  93. 'resolve_credential'
  94. ).and_return(None)
  95. flexmock(module.os).should_receive('pipe').never()
  96. environment = module.make_environment({'relocated_repo_access_is_ok': True})
  97. assert environment.get('BORG_RELOCATED_REPO_ACCESS_IS_OK') == 'yes'
  98. def test_make_environment_with_relocated_repo_access_false_should_set_environment_no():
  99. flexmock(module.os).should_receive('environ').and_return({'USER': 'root'})
  100. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  101. 'resolve_credential'
  102. ).and_return(None)
  103. flexmock(module.os).should_receive('pipe').never()
  104. environment = module.make_environment({'relocated_repo_access_is_ok': False})
  105. assert environment.get('BORG_RELOCATED_REPO_ACCESS_IS_OK') == 'no'
  106. def test_make_environment_check_i_know_what_i_am_doing_true_should_set_environment_YES():
  107. flexmock(module.os).should_receive('environ').and_return({'USER': 'root'})
  108. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  109. 'resolve_credential'
  110. ).and_return(None)
  111. flexmock(module.os).should_receive('pipe').never()
  112. environment = module.make_environment({'check_i_know_what_i_am_doing': True})
  113. assert environment.get('BORG_CHECK_I_KNOW_WHAT_I_AM_DOING') == 'YES'
  114. def test_make_environment_check_i_know_what_i_am_doing_false_should_set_environment_NO():
  115. flexmock(module.os).should_receive('environ').and_return({'USER': 'root'})
  116. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  117. 'resolve_credential'
  118. ).and_return(None)
  119. flexmock(module.os).should_receive('pipe').never()
  120. environment = module.make_environment({'check_i_know_what_i_am_doing': False})
  121. assert environment.get('BORG_CHECK_I_KNOW_WHAT_I_AM_DOING') == 'NO'
  122. def test_make_environment_with_integer_variable_value():
  123. flexmock(module.os).should_receive('environ').and_return({'USER': 'root'})
  124. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  125. 'resolve_credential'
  126. ).and_return(None)
  127. flexmock(module.os).should_receive('pipe').never()
  128. environment = module.make_environment({'borg_files_cache_ttl': 40})
  129. assert environment.get('BORG_FILES_CACHE_TTL') == '40'