test_change_passphrase.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  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'), config=config, borg_exit_codes=borg_exit_codes
  54. )
  55. module.change_passphrase(
  56. repository_path='repo',
  57. config=config,
  58. local_borg_version='1.2.3',
  59. change_passphrase_arguments=flexmock(),
  60. global_arguments=flexmock(dry_run=False),
  61. )
  62. def test_change_passphrase_calls_borg_with_remote_path_flags():
  63. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  64. insert_execute_command_mock(
  65. ('borg', 'key', 'change-passphrase', '--remote-path', 'borg1', 'repo')
  66. )
  67. module.change_passphrase(
  68. repository_path='repo',
  69. config={},
  70. local_borg_version='1.2.3',
  71. change_passphrase_arguments=flexmock(),
  72. global_arguments=flexmock(dry_run=False),
  73. remote_path='borg1',
  74. )
  75. def test_change_passphrase_calls_borg_with_umask_flags():
  76. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  77. config = {'umask': '0770'}
  78. insert_execute_command_mock(
  79. ('borg', 'key', 'change-passphrase', '--umask', '0770', 'repo'), config=config
  80. )
  81. module.change_passphrase(
  82. repository_path='repo',
  83. config=config,
  84. local_borg_version='1.2.3',
  85. change_passphrase_arguments=flexmock(),
  86. global_arguments=flexmock(dry_run=False),
  87. )
  88. def test_change_passphrase_calls_borg_with_log_json_flags():
  89. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  90. config = {'log_json': True}
  91. insert_execute_command_mock(
  92. ('borg', 'key', 'change-passphrase', '--log-json', 'repo'), config=config
  93. )
  94. module.change_passphrase(
  95. repository_path='repo',
  96. config=config,
  97. local_borg_version='1.2.3',
  98. change_passphrase_arguments=flexmock(),
  99. global_arguments=flexmock(dry_run=False),
  100. )
  101. def test_change_passphrase_calls_borg_with_lock_wait_flags():
  102. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  103. config = {'lock_wait': '5'}
  104. insert_execute_command_mock(
  105. ('borg', 'key', 'change-passphrase', '--lock-wait', '5', 'repo'), config=config
  106. )
  107. module.change_passphrase(
  108. repository_path='repo',
  109. config=config,
  110. local_borg_version='1.2.3',
  111. change_passphrase_arguments=flexmock(),
  112. global_arguments=flexmock(dry_run=False),
  113. )
  114. def test_change_passphrase_with_log_info_calls_borg_with_info_parameter():
  115. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  116. insert_execute_command_mock(('borg', 'key', 'change-passphrase', '--info', 'repo'))
  117. insert_logging_mock(logging.INFO)
  118. module.change_passphrase(
  119. repository_path='repo',
  120. config={},
  121. local_borg_version='1.2.3',
  122. change_passphrase_arguments=flexmock(),
  123. global_arguments=flexmock(dry_run=False),
  124. )
  125. def test_change_passphrase_with_log_debug_calls_borg_with_debug_flags():
  126. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  127. insert_execute_command_mock(
  128. ('borg', 'key', 'change-passphrase', '--debug', '--show-rc', 'repo')
  129. )
  130. insert_logging_mock(logging.DEBUG)
  131. module.change_passphrase(
  132. repository_path='repo',
  133. config={},
  134. local_borg_version='1.2.3',
  135. change_passphrase_arguments=flexmock(),
  136. global_arguments=flexmock(dry_run=False),
  137. )
  138. def test_change_passphrase_with_dry_run_skips_borg_call():
  139. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  140. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  141. flexmock(module.borgmatic.execute).should_receive('execute_command').never()
  142. module.change_passphrase(
  143. repository_path='repo',
  144. config={},
  145. local_borg_version='1.2.3',
  146. change_passphrase_arguments=flexmock(paper=False, qr_html=False, path=None),
  147. global_arguments=flexmock(dry_run=True),
  148. )
  149. def test_change_passphrase_calls_borg_without_passphrase():
  150. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  151. insert_execute_command_mock(
  152. ('borg', 'key', 'change-passphrase', 'repo'), config={'option': 'foo'}
  153. )
  154. module.change_passphrase(
  155. repository_path='repo',
  156. config={
  157. 'encryption_passphrase': 'test',
  158. 'encryption_passcommand': 'getpass',
  159. 'option': 'foo',
  160. },
  161. local_borg_version='1.2.3',
  162. change_passphrase_arguments=flexmock(),
  163. global_arguments=flexmock(dry_run=False),
  164. )
  165. def test_change_passphrase_calls_borg_with_working_directory():
  166. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  167. config = {'working_directory': '/working/dir'}
  168. insert_execute_command_mock(
  169. ('borg', 'key', 'change-passphrase', 'repo'),
  170. config=config,
  171. working_directory='/working/dir',
  172. )
  173. module.change_passphrase(
  174. repository_path='repo',
  175. config=config,
  176. local_borg_version='1.2.3',
  177. change_passphrase_arguments=flexmock(),
  178. global_arguments=flexmock(dry_run=False),
  179. )