2
0

test_change_passphrase.py 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  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. extra_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, log_json=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, log_json=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, log_json=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, log_json=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, log_json=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. insert_execute_command_mock(('borg', 'key', 'change-passphrase', '--log-json', 'repo'))
  91. module.change_passphrase(
  92. repository_path='repo',
  93. config={},
  94. local_borg_version='1.2.3',
  95. change_passphrase_arguments=flexmock(),
  96. global_arguments=flexmock(dry_run=False, log_json=True),
  97. )
  98. def test_change_passphrase_calls_borg_with_lock_wait_flags():
  99. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  100. config = {'lock_wait': '5'}
  101. insert_execute_command_mock(
  102. ('borg', 'key', 'change-passphrase', '--lock-wait', '5', 'repo'), config=config
  103. )
  104. module.change_passphrase(
  105. repository_path='repo',
  106. config=config,
  107. local_borg_version='1.2.3',
  108. change_passphrase_arguments=flexmock(),
  109. global_arguments=flexmock(dry_run=False, log_json=False),
  110. )
  111. def test_change_passphrase_with_log_info_calls_borg_with_info_parameter():
  112. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  113. insert_execute_command_mock(('borg', 'key', 'change-passphrase', '--info', 'repo'))
  114. insert_logging_mock(logging.INFO)
  115. module.change_passphrase(
  116. repository_path='repo',
  117. config={},
  118. local_borg_version='1.2.3',
  119. change_passphrase_arguments=flexmock(),
  120. global_arguments=flexmock(dry_run=False, log_json=False),
  121. )
  122. def test_change_passphrase_with_log_debug_calls_borg_with_debug_flags():
  123. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  124. insert_execute_command_mock(
  125. ('borg', 'key', 'change-passphrase', '--debug', '--show-rc', 'repo')
  126. )
  127. insert_logging_mock(logging.DEBUG)
  128. module.change_passphrase(
  129. repository_path='repo',
  130. config={},
  131. local_borg_version='1.2.3',
  132. change_passphrase_arguments=flexmock(),
  133. global_arguments=flexmock(dry_run=False, log_json=False),
  134. )
  135. def test_change_passphrase_with_dry_run_skips_borg_call():
  136. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  137. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  138. flexmock(module.borgmatic.execute).should_receive('execute_command').never()
  139. module.change_passphrase(
  140. repository_path='repo',
  141. config={},
  142. local_borg_version='1.2.3',
  143. change_passphrase_arguments=flexmock(paper=False, qr_html=False, path=None),
  144. global_arguments=flexmock(dry_run=True, log_json=False),
  145. )
  146. def test_change_passphrase_calls_borg_without_passphrase():
  147. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  148. insert_execute_command_mock(
  149. ('borg', 'key', 'change-passphrase', 'repo'), config={'option': 'foo'}
  150. )
  151. module.change_passphrase(
  152. repository_path='repo',
  153. config={
  154. 'encryption_passphrase': 'test',
  155. 'encryption_passcommand': 'getpass',
  156. 'option': 'foo',
  157. },
  158. local_borg_version='1.2.3',
  159. change_passphrase_arguments=flexmock(),
  160. global_arguments=flexmock(dry_run=False, log_json=False),
  161. )
  162. def test_change_passphrase_calls_borg_with_working_directory():
  163. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  164. config = {'working_directory': '/working/dir'}
  165. insert_execute_command_mock(
  166. ('borg', 'key', 'change-passphrase', 'repo'),
  167. config=config,
  168. working_directory='/working/dir',
  169. )
  170. module.change_passphrase(
  171. repository_path='repo',
  172. config=config,
  173. local_borg_version='1.2.3',
  174. change_passphrase_arguments=flexmock(),
  175. global_arguments=flexmock(dry_run=False, log_json=False),
  176. )