test_export_key.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. import logging
  2. import pytest
  3. from flexmock import flexmock
  4. import borgmatic.logger
  5. from borgmatic.borg import export_key as module
  6. from ..test_verbosity import insert_logging_mock
  7. def insert_execute_command_mock(command, output_file=module.DO_NOT_CAPTURE):
  8. borgmatic.logger.add_custom_log_levels()
  9. flexmock(module.environment).should_receive('make_environment')
  10. flexmock(module).should_receive('execute_command').with_args(
  11. command,
  12. output_file=output_file,
  13. output_log_level=module.logging.ANSWER,
  14. borg_local_path='borg',
  15. extra_environment=None,
  16. ).once()
  17. def test_export_key_calls_borg_with_required_flags():
  18. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  19. flexmock(module.os.path).should_receive('exists').never()
  20. insert_execute_command_mock(('borg', 'key', 'export', 'repo'))
  21. module.export_key(
  22. repository_path='repo',
  23. config={},
  24. local_borg_version='1.2.3',
  25. export_arguments=flexmock(paper=False, qr_html=False, path=None),
  26. global_arguments=flexmock(dry_run=False, log_json=False),
  27. )
  28. def test_export_key_calls_borg_with_remote_path_flags():
  29. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  30. flexmock(module.os.path).should_receive('exists').never()
  31. insert_execute_command_mock(('borg', 'key', 'export', '--remote-path', 'borg1', 'repo'))
  32. module.export_key(
  33. repository_path='repo',
  34. config={},
  35. local_borg_version='1.2.3',
  36. export_arguments=flexmock(paper=False, qr_html=False, path=None),
  37. global_arguments=flexmock(dry_run=False, log_json=False),
  38. remote_path='borg1',
  39. )
  40. def test_export_key_calls_borg_with_umask_flags():
  41. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  42. flexmock(module.os.path).should_receive('exists').never()
  43. insert_execute_command_mock(('borg', 'key', 'export', '--umask', '0770', 'repo'))
  44. module.export_key(
  45. repository_path='repo',
  46. config={'umask': '0770'},
  47. local_borg_version='1.2.3',
  48. export_arguments=flexmock(paper=False, qr_html=False, path=None),
  49. global_arguments=flexmock(dry_run=False, log_json=False),
  50. )
  51. def test_export_key_calls_borg_with_log_json_flags():
  52. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  53. flexmock(module.os.path).should_receive('exists').never()
  54. insert_execute_command_mock(('borg', 'key', 'export', '--log-json', 'repo'))
  55. module.export_key(
  56. repository_path='repo',
  57. config={},
  58. local_borg_version='1.2.3',
  59. export_arguments=flexmock(paper=False, qr_html=False, path=None),
  60. global_arguments=flexmock(dry_run=False, log_json=True),
  61. )
  62. def test_export_key_calls_borg_with_lock_wait_flags():
  63. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  64. flexmock(module.os.path).should_receive('exists').never()
  65. insert_execute_command_mock(('borg', 'key', 'export', '--lock-wait', '5', 'repo'))
  66. module.export_key(
  67. repository_path='repo',
  68. config={'lock_wait': '5'},
  69. local_borg_version='1.2.3',
  70. export_arguments=flexmock(paper=False, qr_html=False, path=None),
  71. global_arguments=flexmock(dry_run=False, log_json=False),
  72. )
  73. def test_export_key_with_log_info_calls_borg_with_info_parameter():
  74. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  75. flexmock(module.os.path).should_receive('exists').never()
  76. insert_execute_command_mock(('borg', 'key', 'export', '--info', 'repo'))
  77. insert_logging_mock(logging.INFO)
  78. module.export_key(
  79. repository_path='repo',
  80. config={},
  81. local_borg_version='1.2.3',
  82. export_arguments=flexmock(paper=False, qr_html=False, path=None),
  83. global_arguments=flexmock(dry_run=False, log_json=False),
  84. )
  85. def test_export_key_with_log_debug_calls_borg_with_debug_flags():
  86. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  87. flexmock(module.os.path).should_receive('exists').never()
  88. insert_execute_command_mock(('borg', 'key', 'export', '--debug', '--show-rc', 'repo'))
  89. insert_logging_mock(logging.DEBUG)
  90. module.export_key(
  91. repository_path='repo',
  92. config={},
  93. local_borg_version='1.2.3',
  94. export_arguments=flexmock(paper=False, qr_html=False, path=None),
  95. global_arguments=flexmock(dry_run=False, log_json=False),
  96. )
  97. def test_export_key_calls_borg_with_paper_flags():
  98. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  99. flexmock(module.os.path).should_receive('exists').never()
  100. insert_execute_command_mock(('borg', 'key', 'export', '--paper', 'repo'))
  101. module.export_key(
  102. repository_path='repo',
  103. config={},
  104. local_borg_version='1.2.3',
  105. export_arguments=flexmock(paper=True, qr_html=False, path=None),
  106. global_arguments=flexmock(dry_run=False, log_json=False),
  107. )
  108. def test_export_key_calls_borg_with_paper_flag():
  109. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  110. flexmock(module.os.path).should_receive('exists').never()
  111. insert_execute_command_mock(('borg', 'key', 'export', '--paper', 'repo'))
  112. module.export_key(
  113. repository_path='repo',
  114. config={},
  115. local_borg_version='1.2.3',
  116. export_arguments=flexmock(paper=True, qr_html=False, path=None),
  117. global_arguments=flexmock(dry_run=False, log_json=False),
  118. )
  119. def test_export_key_calls_borg_with_qr_html_flag():
  120. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  121. flexmock(module.os.path).should_receive('exists').never()
  122. insert_execute_command_mock(('borg', 'key', 'export', '--qr-html', 'repo'))
  123. module.export_key(
  124. repository_path='repo',
  125. config={},
  126. local_borg_version='1.2.3',
  127. export_arguments=flexmock(paper=False, qr_html=True, path=None),
  128. global_arguments=flexmock(dry_run=False, log_json=False),
  129. )
  130. def test_export_key_calls_borg_with_path_argument():
  131. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  132. flexmock(module.os.path).should_receive('exists').and_return(False)
  133. insert_execute_command_mock(('borg', 'key', 'export', 'repo', 'dest'), output_file=None)
  134. module.export_key(
  135. repository_path='repo',
  136. config={},
  137. local_borg_version='1.2.3',
  138. export_arguments=flexmock(paper=False, qr_html=False, path='dest'),
  139. global_arguments=flexmock(dry_run=False, log_json=False),
  140. )
  141. def test_export_key_with_already_existent_path_raises():
  142. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  143. flexmock(module.os.path).should_receive('exists').and_return(True)
  144. flexmock(module).should_receive('execute_command').never()
  145. with pytest.raises(FileExistsError):
  146. module.export_key(
  147. repository_path='repo',
  148. config={},
  149. local_borg_version='1.2.3',
  150. export_arguments=flexmock(paper=False, qr_html=False, path='dest'),
  151. global_arguments=flexmock(dry_run=False, log_json=False),
  152. )
  153. def test_export_key_with_stdout_path_calls_borg_without_path_argument():
  154. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  155. flexmock(module.os.path).should_receive('exists').never()
  156. insert_execute_command_mock(('borg', 'key', 'export', 'repo'))
  157. module.export_key(
  158. repository_path='repo',
  159. config={},
  160. local_borg_version='1.2.3',
  161. export_arguments=flexmock(paper=False, qr_html=False, path='-'),
  162. global_arguments=flexmock(dry_run=False, log_json=False),
  163. )
  164. def test_export_key_with_dry_run_skip_borg_call():
  165. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  166. flexmock(module.os.path).should_receive('exists').never()
  167. flexmock(module).should_receive('execute_command').never()
  168. module.export_key(
  169. repository_path='repo',
  170. config={},
  171. local_borg_version='1.2.3',
  172. export_arguments=flexmock(paper=False, qr_html=False, path=None),
  173. global_arguments=flexmock(dry_run=True, log_json=False),
  174. )