test_change_passphrase.py 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. import logging
  2. from flexmock import flexmock
  3. import borgmatic.logger
  4. from borgmatic.borg import change_passphrase as module
  5. from ..test_verbosity import insert_logging_mock
  6. def insert_execute_command_mock(
  7. command,
  8. config=None,
  9. output_file=module.borgmatic.execute.DO_NOT_CAPTURE,
  10. working_directory=None,
  11. borg_exit_codes=None,
  12. ):
  13. borgmatic.logger.add_custom_log_levels()
  14. flexmock(module.environment).should_receive('make_environment').with_args(config or {}).once()
  15. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(
  16. working_directory,
  17. )
  18. flexmock(module.borgmatic.execute).should_receive('execute_command').with_args(
  19. command,
  20. output_file=output_file,
  21. output_log_level=module.logging.ANSWER,
  22. environment=None,
  23. working_directory=working_directory,
  24. borg_local_path=command[0],
  25. borg_exit_codes=borg_exit_codes,
  26. ).once()
  27. def test_change_passphrase_calls_borg_with_required_flags():
  28. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  29. insert_execute_command_mock(('borg', 'key', 'change-passphrase', 'repo'))
  30. module.change_passphrase(
  31. repository_path='repo',
  32. config={},
  33. local_borg_version='1.2.3',
  34. change_passphrase_arguments=flexmock(),
  35. global_arguments=flexmock(dry_run=False),
  36. )
  37. def test_change_passphrase_calls_borg_with_local_path():
  38. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  39. insert_execute_command_mock(('borg1', 'key', 'change-passphrase', 'repo'))
  40. module.change_passphrase(
  41. repository_path='repo',
  42. config={},
  43. local_borg_version='1.2.3',
  44. change_passphrase_arguments=flexmock(),
  45. global_arguments=flexmock(dry_run=False),
  46. local_path='borg1',
  47. )
  48. def test_change_passphrase_calls_borg_using_exit_codes():
  49. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  50. borg_exit_codes = flexmock()
  51. config = {'borg_exit_codes': borg_exit_codes}
  52. insert_execute_command_mock(
  53. ('borg', 'key', 'change-passphrase', 'repo'),
  54. config=config,
  55. borg_exit_codes=borg_exit_codes,
  56. )
  57. module.change_passphrase(
  58. repository_path='repo',
  59. config=config,
  60. local_borg_version='1.2.3',
  61. change_passphrase_arguments=flexmock(),
  62. global_arguments=flexmock(dry_run=False),
  63. )
  64. def test_change_passphrase_calls_borg_with_remote_path_flags():
  65. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  66. insert_execute_command_mock(
  67. ('borg', 'key', 'change-passphrase', '--remote-path', 'borg1', 'repo'),
  68. )
  69. module.change_passphrase(
  70. repository_path='repo',
  71. config={},
  72. local_borg_version='1.2.3',
  73. change_passphrase_arguments=flexmock(),
  74. global_arguments=flexmock(dry_run=False),
  75. remote_path='borg1',
  76. )
  77. def test_change_passphrase_calls_borg_with_umask_flags():
  78. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  79. config = {'umask': '0770'}
  80. insert_execute_command_mock(
  81. ('borg', 'key', 'change-passphrase', '--umask', '0770', 'repo'),
  82. config=config,
  83. )
  84. module.change_passphrase(
  85. repository_path='repo',
  86. config=config,
  87. local_borg_version='1.2.3',
  88. change_passphrase_arguments=flexmock(),
  89. global_arguments=flexmock(dry_run=False),
  90. )
  91. def test_change_passphrase_calls_borg_with_log_json_flags():
  92. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  93. config = {'log_json': True}
  94. insert_execute_command_mock(
  95. ('borg', 'key', 'change-passphrase', '--log-json', 'repo'),
  96. config=config,
  97. )
  98. module.change_passphrase(
  99. repository_path='repo',
  100. config=config,
  101. local_borg_version='1.2.3',
  102. change_passphrase_arguments=flexmock(),
  103. global_arguments=flexmock(dry_run=False),
  104. )
  105. def test_change_passphrase_calls_borg_with_lock_wait_flags():
  106. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  107. config = {'lock_wait': '5'}
  108. insert_execute_command_mock(
  109. ('borg', 'key', 'change-passphrase', '--lock-wait', '5', 'repo'),
  110. config=config,
  111. )
  112. module.change_passphrase(
  113. repository_path='repo',
  114. config=config,
  115. local_borg_version='1.2.3',
  116. change_passphrase_arguments=flexmock(),
  117. global_arguments=flexmock(dry_run=False),
  118. )
  119. def test_change_passphrase_calls_borg_with_extra_borg_options():
  120. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  121. config = {'extra_borg_options': {'key_change_passphrase': '--extra "value with space"'}}
  122. insert_execute_command_mock(
  123. ('borg', 'key', 'change-passphrase', '--extra', 'value with space', 'repo'),
  124. config=config,
  125. )
  126. module.change_passphrase(
  127. repository_path='repo',
  128. config=config,
  129. local_borg_version='1.2.3',
  130. change_passphrase_arguments=flexmock(),
  131. global_arguments=flexmock(dry_run=False),
  132. )
  133. def test_change_passphrase_with_log_info_calls_borg_with_info_parameter():
  134. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  135. insert_execute_command_mock(('borg', 'key', 'change-passphrase', '--info', 'repo'))
  136. insert_logging_mock(logging.INFO)
  137. module.change_passphrase(
  138. repository_path='repo',
  139. config={},
  140. local_borg_version='1.2.3',
  141. change_passphrase_arguments=flexmock(),
  142. global_arguments=flexmock(dry_run=False),
  143. )
  144. def test_change_passphrase_with_log_debug_calls_borg_with_debug_flags():
  145. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  146. insert_execute_command_mock(
  147. ('borg', 'key', 'change-passphrase', '--debug', '--show-rc', 'repo'),
  148. )
  149. insert_logging_mock(logging.DEBUG)
  150. module.change_passphrase(
  151. repository_path='repo',
  152. config={},
  153. local_borg_version='1.2.3',
  154. change_passphrase_arguments=flexmock(),
  155. global_arguments=flexmock(dry_run=False),
  156. )
  157. def test_change_passphrase_with_dry_run_skips_borg_call():
  158. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  159. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  160. flexmock(module.borgmatic.execute).should_receive('execute_command').never()
  161. module.change_passphrase(
  162. repository_path='repo',
  163. config={},
  164. local_borg_version='1.2.3',
  165. change_passphrase_arguments=flexmock(paper=False, qr_html=False, path=None),
  166. global_arguments=flexmock(dry_run=True),
  167. )
  168. def test_change_passphrase_calls_borg_without_passphrase():
  169. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  170. insert_execute_command_mock(
  171. ('borg', 'key', 'change-passphrase', 'repo'),
  172. config={'option': 'foo'},
  173. )
  174. module.change_passphrase(
  175. repository_path='repo',
  176. config={
  177. 'encryption_passphrase': 'test',
  178. 'encryption_passcommand': 'getpass',
  179. 'option': 'foo',
  180. },
  181. local_borg_version='1.2.3',
  182. change_passphrase_arguments=flexmock(),
  183. global_arguments=flexmock(dry_run=False),
  184. )
  185. def test_change_passphrase_calls_borg_with_working_directory():
  186. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  187. config = {'working_directory': '/working/dir'}
  188. insert_execute_command_mock(
  189. ('borg', 'key', 'change-passphrase', 'repo'),
  190. config=config,
  191. working_directory='/working/dir',
  192. )
  193. module.change_passphrase(
  194. repository_path='repo',
  195. config=config,
  196. local_borg_version='1.2.3',
  197. change_passphrase_arguments=flexmock(),
  198. global_arguments=flexmock(dry_run=False),
  199. )