test_change_passphrase.py 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  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_with_log_info_calls_borg_with_info_parameter():
  120. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  121. insert_execute_command_mock(('borg', 'key', 'change-passphrase', '--info', 'repo'))
  122. insert_logging_mock(logging.INFO)
  123. module.change_passphrase(
  124. repository_path='repo',
  125. config={},
  126. local_borg_version='1.2.3',
  127. change_passphrase_arguments=flexmock(),
  128. global_arguments=flexmock(dry_run=False),
  129. )
  130. def test_change_passphrase_with_log_debug_calls_borg_with_debug_flags():
  131. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  132. insert_execute_command_mock(
  133. ('borg', 'key', 'change-passphrase', '--debug', '--show-rc', 'repo'),
  134. )
  135. insert_logging_mock(logging.DEBUG)
  136. module.change_passphrase(
  137. repository_path='repo',
  138. config={},
  139. local_borg_version='1.2.3',
  140. change_passphrase_arguments=flexmock(),
  141. global_arguments=flexmock(dry_run=False),
  142. )
  143. def test_change_passphrase_with_dry_run_skips_borg_call():
  144. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  145. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  146. flexmock(module.borgmatic.execute).should_receive('execute_command').never()
  147. module.change_passphrase(
  148. repository_path='repo',
  149. config={},
  150. local_borg_version='1.2.3',
  151. change_passphrase_arguments=flexmock(paper=False, qr_html=False, path=None),
  152. global_arguments=flexmock(dry_run=True),
  153. )
  154. def test_change_passphrase_calls_borg_without_passphrase():
  155. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  156. insert_execute_command_mock(
  157. ('borg', 'key', 'change-passphrase', 'repo'),
  158. config={'option': 'foo'},
  159. )
  160. module.change_passphrase(
  161. repository_path='repo',
  162. config={
  163. 'encryption_passphrase': 'test',
  164. 'encryption_passcommand': 'getpass',
  165. 'option': 'foo',
  166. },
  167. local_borg_version='1.2.3',
  168. change_passphrase_arguments=flexmock(),
  169. global_arguments=flexmock(dry_run=False),
  170. )
  171. def test_change_passphrase_calls_borg_with_working_directory():
  172. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  173. config = {'working_directory': '/working/dir'}
  174. insert_execute_command_mock(
  175. ('borg', 'key', 'change-passphrase', 'repo'),
  176. config=config,
  177. working_directory='/working/dir',
  178. )
  179. module.change_passphrase(
  180. repository_path='repo',
  181. config=config,
  182. local_borg_version='1.2.3',
  183. change_passphrase_arguments=flexmock(),
  184. global_arguments=flexmock(dry_run=False),
  185. )