test_transfer.py 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623
  1. import logging
  2. import pytest
  3. from flexmock import flexmock
  4. from borgmatic.borg import transfer as module
  5. from ..test_verbosity import insert_logging_mock
  6. def test_transfer_archives_calls_borg_with_flags():
  7. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  8. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  9. flexmock(module.flags).should_receive('make_flags').and_return(())
  10. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  11. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  12. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  13. flexmock(module.environment).should_receive('make_environment')
  14. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  15. flexmock(module).should_receive('execute_command').with_args(
  16. ('borg', 'transfer', '--repo', 'repo'),
  17. output_log_level=module.borgmatic.logger.ANSWER,
  18. output_file=None,
  19. environment=None,
  20. working_directory=None,
  21. borg_local_path='borg',
  22. borg_exit_codes=None,
  23. )
  24. module.transfer_archives(
  25. dry_run=False,
  26. repository_path='repo',
  27. config={},
  28. local_borg_version='2.3.4',
  29. transfer_arguments=flexmock(
  30. archive=None, progress=None, match_archives=None, source_repository=None
  31. ),
  32. global_arguments=flexmock(log_json=False),
  33. )
  34. def test_transfer_archives_with_dry_run_calls_borg_with_dry_run_flag():
  35. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  36. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  37. flexmock(module.flags).should_receive('make_flags').and_return(())
  38. flexmock(module.flags).should_receive('make_flags').with_args('dry-run', True).and_return(
  39. ('--dry-run',)
  40. )
  41. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  42. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  43. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  44. flexmock(module.environment).should_receive('make_environment')
  45. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  46. flexmock(module).should_receive('execute_command').with_args(
  47. ('borg', 'transfer', '--repo', 'repo', '--dry-run'),
  48. output_log_level=module.borgmatic.logger.ANSWER,
  49. output_file=None,
  50. environment=None,
  51. working_directory=None,
  52. borg_local_path='borg',
  53. borg_exit_codes=None,
  54. )
  55. module.transfer_archives(
  56. dry_run=True,
  57. repository_path='repo',
  58. config={},
  59. local_borg_version='2.3.4',
  60. transfer_arguments=flexmock(
  61. archive=None, progress=None, match_archives=None, source_repository=None
  62. ),
  63. global_arguments=flexmock(log_json=False),
  64. )
  65. def test_transfer_archives_with_log_info_calls_borg_with_info_flag():
  66. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  67. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  68. flexmock(module.flags).should_receive('make_flags').and_return(())
  69. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  70. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  71. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  72. flexmock(module.environment).should_receive('make_environment')
  73. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  74. flexmock(module).should_receive('execute_command').with_args(
  75. ('borg', 'transfer', '--info', '--repo', 'repo'),
  76. output_log_level=module.borgmatic.logger.ANSWER,
  77. output_file=None,
  78. environment=None,
  79. working_directory=None,
  80. borg_local_path='borg',
  81. borg_exit_codes=None,
  82. )
  83. insert_logging_mock(logging.INFO)
  84. module.transfer_archives(
  85. dry_run=False,
  86. repository_path='repo',
  87. config={},
  88. local_borg_version='2.3.4',
  89. transfer_arguments=flexmock(
  90. archive=None, progress=None, match_archives=None, source_repository=None
  91. ),
  92. global_arguments=flexmock(log_json=False),
  93. )
  94. def test_transfer_archives_with_log_debug_calls_borg_with_debug_flag():
  95. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  96. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  97. flexmock(module.flags).should_receive('make_flags').and_return(())
  98. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  99. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  100. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  101. flexmock(module.environment).should_receive('make_environment')
  102. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  103. flexmock(module).should_receive('execute_command').with_args(
  104. ('borg', 'transfer', '--debug', '--show-rc', '--repo', 'repo'),
  105. output_log_level=module.borgmatic.logger.ANSWER,
  106. output_file=None,
  107. environment=None,
  108. working_directory=None,
  109. borg_local_path='borg',
  110. borg_exit_codes=None,
  111. )
  112. insert_logging_mock(logging.DEBUG)
  113. module.transfer_archives(
  114. dry_run=False,
  115. repository_path='repo',
  116. config={},
  117. local_borg_version='2.3.4',
  118. transfer_arguments=flexmock(
  119. archive=None, progress=None, match_archives=None, source_repository=None
  120. ),
  121. global_arguments=flexmock(log_json=False),
  122. )
  123. def test_transfer_archives_with_archive_calls_borg_with_match_archives_flag():
  124. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  125. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  126. flexmock(module.flags).should_receive('make_flags').and_return(())
  127. flexmock(module.flags).should_receive('make_match_archives_flags').with_args(
  128. 'archive', 'bar-{now}', '2.3.4' # noqa: FS003
  129. ).and_return(('--match-archives', 'archive'))
  130. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  131. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  132. flexmock(module.environment).should_receive('make_environment')
  133. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  134. flexmock(module).should_receive('execute_command').with_args(
  135. ('borg', 'transfer', '--match-archives', 'archive', '--repo', 'repo'),
  136. output_log_level=module.borgmatic.logger.ANSWER,
  137. output_file=None,
  138. environment=None,
  139. working_directory=None,
  140. borg_local_path='borg',
  141. borg_exit_codes=None,
  142. )
  143. module.transfer_archives(
  144. dry_run=False,
  145. repository_path='repo',
  146. config={'archive_name_format': 'bar-{now}'}, # noqa: FS003
  147. local_borg_version='2.3.4',
  148. transfer_arguments=flexmock(
  149. archive='archive', progress=None, match_archives=None, source_repository=None
  150. ),
  151. global_arguments=flexmock(log_json=False),
  152. )
  153. def test_transfer_archives_with_match_archives_calls_borg_with_match_archives_flag():
  154. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  155. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  156. flexmock(module.flags).should_receive('make_flags').and_return(())
  157. flexmock(module.flags).should_receive('make_match_archives_flags').with_args(
  158. 'sh:foo*', 'bar-{now}', '2.3.4' # noqa: FS003
  159. ).and_return(('--match-archives', 'sh:foo*'))
  160. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  161. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  162. flexmock(module.environment).should_receive('make_environment')
  163. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  164. flexmock(module).should_receive('execute_command').with_args(
  165. ('borg', 'transfer', '--match-archives', 'sh:foo*', '--repo', 'repo'),
  166. output_log_level=module.borgmatic.logger.ANSWER,
  167. output_file=None,
  168. environment=None,
  169. working_directory=None,
  170. borg_local_path='borg',
  171. borg_exit_codes=None,
  172. )
  173. module.transfer_archives(
  174. dry_run=False,
  175. repository_path='repo',
  176. config={'archive_name_format': 'bar-{now}'}, # noqa: FS003
  177. local_borg_version='2.3.4',
  178. transfer_arguments=flexmock(
  179. archive=None, progress=None, match_archives='sh:foo*', source_repository=None
  180. ),
  181. global_arguments=flexmock(log_json=False),
  182. )
  183. def test_transfer_archives_with_archive_name_format_calls_borg_with_match_archives_flag():
  184. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  185. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  186. flexmock(module.flags).should_receive('make_flags').and_return(())
  187. flexmock(module.flags).should_receive('make_match_archives_flags').with_args(
  188. None, 'bar-{now}', '2.3.4' # noqa: FS003
  189. ).and_return(('--match-archives', 'sh:bar-*'))
  190. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  191. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  192. flexmock(module.environment).should_receive('make_environment')
  193. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  194. flexmock(module).should_receive('execute_command').with_args(
  195. ('borg', 'transfer', '--match-archives', 'sh:bar-*', '--repo', 'repo'),
  196. output_log_level=module.borgmatic.logger.ANSWER,
  197. output_file=None,
  198. environment=None,
  199. working_directory=None,
  200. borg_local_path='borg',
  201. borg_exit_codes=None,
  202. )
  203. module.transfer_archives(
  204. dry_run=False,
  205. repository_path='repo',
  206. config={'archive_name_format': 'bar-{now}'}, # noqa: FS003
  207. local_borg_version='2.3.4',
  208. transfer_arguments=flexmock(
  209. archive=None, progress=None, match_archives=None, source_repository=None
  210. ),
  211. global_arguments=flexmock(log_json=False),
  212. )
  213. def test_transfer_archives_with_local_path_calls_borg_via_local_path():
  214. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  215. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  216. flexmock(module.flags).should_receive('make_flags').and_return(())
  217. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  218. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  219. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  220. flexmock(module.environment).should_receive('make_environment')
  221. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  222. flexmock(module).should_receive('execute_command').with_args(
  223. ('borg2', 'transfer', '--repo', 'repo'),
  224. output_log_level=module.borgmatic.logger.ANSWER,
  225. output_file=None,
  226. environment=None,
  227. working_directory=None,
  228. borg_local_path='borg2',
  229. borg_exit_codes=None,
  230. )
  231. module.transfer_archives(
  232. dry_run=False,
  233. repository_path='repo',
  234. config={},
  235. local_borg_version='2.3.4',
  236. transfer_arguments=flexmock(
  237. archive=None, progress=None, match_archives=None, source_repository=None
  238. ),
  239. global_arguments=flexmock(log_json=False),
  240. local_path='borg2',
  241. )
  242. def test_transfer_archives_with_exit_codes_calls_borg_using_them():
  243. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  244. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  245. flexmock(module.flags).should_receive('make_flags').and_return(())
  246. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  247. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  248. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  249. flexmock(module.environment).should_receive('make_environment')
  250. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  251. borg_exit_codes = flexmock()
  252. flexmock(module).should_receive('execute_command').with_args(
  253. ('borg', 'transfer', '--repo', 'repo'),
  254. output_log_level=module.borgmatic.logger.ANSWER,
  255. output_file=None,
  256. environment=None,
  257. working_directory=None,
  258. borg_local_path='borg',
  259. borg_exit_codes=borg_exit_codes,
  260. )
  261. module.transfer_archives(
  262. dry_run=False,
  263. repository_path='repo',
  264. config={'borg_exit_codes': borg_exit_codes},
  265. local_borg_version='2.3.4',
  266. transfer_arguments=flexmock(
  267. archive=None, progress=None, match_archives=None, source_repository=None
  268. ),
  269. global_arguments=flexmock(log_json=False),
  270. )
  271. def test_transfer_archives_with_remote_path_calls_borg_with_remote_path_flags():
  272. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  273. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  274. flexmock(module.flags).should_receive('make_flags').and_return(())
  275. flexmock(module.flags).should_receive('make_flags').with_args(
  276. 'remote-path', 'borg2'
  277. ).and_return(('--remote-path', 'borg2'))
  278. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  279. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  280. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  281. flexmock(module.environment).should_receive('make_environment')
  282. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  283. flexmock(module).should_receive('execute_command').with_args(
  284. ('borg', 'transfer', '--remote-path', 'borg2', '--repo', 'repo'),
  285. output_log_level=module.borgmatic.logger.ANSWER,
  286. output_file=None,
  287. environment=None,
  288. working_directory=None,
  289. borg_local_path='borg',
  290. borg_exit_codes=None,
  291. )
  292. module.transfer_archives(
  293. dry_run=False,
  294. repository_path='repo',
  295. config={},
  296. local_borg_version='2.3.4',
  297. transfer_arguments=flexmock(
  298. archive=None, progress=None, match_archives=None, source_repository=None
  299. ),
  300. global_arguments=flexmock(log_json=False),
  301. remote_path='borg2',
  302. )
  303. def test_transfer_archives_with_umask_calls_borg_with_umask_flags():
  304. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  305. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  306. flexmock(module.flags).should_receive('make_flags').replace_with(
  307. lambda name, value: (f'--{name}', value) if value else ()
  308. )
  309. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  310. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  311. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  312. flexmock(module.environment).should_receive('make_environment')
  313. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  314. flexmock(module).should_receive('execute_command').with_args(
  315. ('borg', 'transfer', '--umask', '077', '--repo', 'repo'),
  316. output_log_level=module.borgmatic.logger.ANSWER,
  317. output_file=None,
  318. environment=None,
  319. working_directory=None,
  320. borg_local_path='borg',
  321. borg_exit_codes=None,
  322. )
  323. module.transfer_archives(
  324. dry_run=False,
  325. repository_path='repo',
  326. config={'umask': '077'},
  327. local_borg_version='2.3.4',
  328. transfer_arguments=flexmock(
  329. archive=None, progress=None, match_archives=None, source_repository=None
  330. ),
  331. global_arguments=flexmock(log_json=False),
  332. )
  333. def test_transfer_archives_with_log_json_calls_borg_with_log_json_flags():
  334. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  335. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  336. flexmock(module.flags).should_receive('make_flags').and_return(())
  337. flexmock(module.flags).should_receive('make_flags').with_args('log-json', True).and_return(
  338. ('--log-json',)
  339. )
  340. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  341. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  342. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  343. flexmock(module.environment).should_receive('make_environment')
  344. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  345. flexmock(module).should_receive('execute_command').with_args(
  346. ('borg', 'transfer', '--log-json', '--repo', 'repo'),
  347. output_log_level=module.borgmatic.logger.ANSWER,
  348. output_file=None,
  349. environment=None,
  350. working_directory=None,
  351. borg_local_path='borg',
  352. borg_exit_codes=None,
  353. )
  354. module.transfer_archives(
  355. dry_run=False,
  356. repository_path='repo',
  357. config={},
  358. local_borg_version='2.3.4',
  359. transfer_arguments=flexmock(
  360. archive=None, progress=None, match_archives=None, source_repository=None
  361. ),
  362. global_arguments=flexmock(log_json=True),
  363. )
  364. def test_transfer_archives_with_lock_wait_calls_borg_with_lock_wait_flags():
  365. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  366. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  367. flexmock(module.flags).should_receive('make_flags').and_return(())
  368. flexmock(module.flags).should_receive('make_flags').with_args('lock-wait', 5).and_return(
  369. ('--lock-wait', '5')
  370. )
  371. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  372. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  373. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  374. config = {'lock_wait': 5}
  375. flexmock(module.environment).should_receive('make_environment')
  376. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  377. flexmock(module).should_receive('execute_command').with_args(
  378. ('borg', 'transfer', '--lock-wait', '5', '--repo', 'repo'),
  379. output_log_level=module.borgmatic.logger.ANSWER,
  380. output_file=None,
  381. environment=None,
  382. working_directory=None,
  383. borg_local_path='borg',
  384. borg_exit_codes=None,
  385. )
  386. module.transfer_archives(
  387. dry_run=False,
  388. repository_path='repo',
  389. config=config,
  390. local_borg_version='2.3.4',
  391. transfer_arguments=flexmock(
  392. archive=None, progress=None, match_archives=None, source_repository=None
  393. ),
  394. global_arguments=flexmock(log_json=False),
  395. )
  396. def test_transfer_archives_with_progress_calls_borg_with_progress_flag():
  397. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  398. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  399. flexmock(module.flags).should_receive('make_flags').and_return(())
  400. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  401. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(('--progress',))
  402. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  403. flexmock(module.environment).should_receive('make_environment')
  404. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  405. flexmock(module).should_receive('execute_command').with_args(
  406. ('borg', 'transfer', '--progress', '--repo', 'repo'),
  407. output_log_level=module.borgmatic.logger.ANSWER,
  408. output_file=module.DO_NOT_CAPTURE,
  409. environment=None,
  410. working_directory=None,
  411. borg_local_path='borg',
  412. borg_exit_codes=None,
  413. )
  414. module.transfer_archives(
  415. dry_run=False,
  416. repository_path='repo',
  417. config={},
  418. local_borg_version='2.3.4',
  419. transfer_arguments=flexmock(
  420. archive=None, progress=True, match_archives=None, source_repository=None
  421. ),
  422. global_arguments=flexmock(log_json=False),
  423. )
  424. @pytest.mark.parametrize('argument_name', ('upgrader', 'sort_by', 'first', 'last'))
  425. def test_transfer_archives_passes_through_arguments_to_borg(argument_name):
  426. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  427. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  428. flag_name = f"--{argument_name.replace('_', ' ')}"
  429. flexmock(module.flags).should_receive('make_flags').and_return(())
  430. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  431. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(
  432. (flag_name, 'value')
  433. )
  434. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  435. flexmock(module.environment).should_receive('make_environment')
  436. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  437. flexmock(module).should_receive('execute_command').with_args(
  438. ('borg', 'transfer', flag_name, 'value', '--repo', 'repo'),
  439. output_log_level=module.borgmatic.logger.ANSWER,
  440. output_file=None,
  441. environment=None,
  442. working_directory=None,
  443. borg_local_path='borg',
  444. borg_exit_codes=None,
  445. )
  446. module.transfer_archives(
  447. dry_run=False,
  448. repository_path='repo',
  449. config={},
  450. local_borg_version='2.3.4',
  451. transfer_arguments=flexmock(
  452. archive=None,
  453. progress=None,
  454. match_archives=None,
  455. source_repository=None,
  456. **{argument_name: 'value'},
  457. ),
  458. global_arguments=flexmock(log_json=False),
  459. )
  460. def test_transfer_archives_with_source_repository_calls_borg_with_other_repo_flags():
  461. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  462. flexmock(module.flags).should_receive('make_flags').and_return(())
  463. flexmock(module.flags).should_receive('make_flags').with_args('other-repo', 'other').and_return(
  464. ('--other-repo', 'other')
  465. )
  466. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  467. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  468. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  469. flexmock(module.environment).should_receive('make_environment')
  470. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  471. flexmock(module).should_receive('execute_command').with_args(
  472. ('borg', 'transfer', '--repo', 'repo', '--other-repo', 'other'),
  473. output_log_level=module.borgmatic.logger.ANSWER,
  474. output_file=None,
  475. environment=None,
  476. working_directory=None,
  477. borg_local_path='borg',
  478. borg_exit_codes=None,
  479. )
  480. module.transfer_archives(
  481. dry_run=False,
  482. repository_path='repo',
  483. config={},
  484. local_borg_version='2.3.4',
  485. transfer_arguments=flexmock(
  486. archive=None, progress=None, match_archives=None, source_repository='other'
  487. ),
  488. global_arguments=flexmock(log_json=False),
  489. )
  490. def test_transfer_archives_with_date_based_matching_calls_borg_with_date_based_flags():
  491. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  492. flexmock(module.flags).should_receive('make_flags').and_return(())
  493. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  494. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(
  495. ('--newer', '1d', '--newest', '1y', '--older', '1m', '--oldest', '1w')
  496. )
  497. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  498. flexmock(module.environment).should_receive('make_environment')
  499. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  500. flexmock(module).should_receive('execute_command').with_args(
  501. (
  502. 'borg',
  503. 'transfer',
  504. '--newer',
  505. '1d',
  506. '--newest',
  507. '1y',
  508. '--older',
  509. '1m',
  510. '--oldest',
  511. '1w',
  512. '--repo',
  513. 'repo',
  514. ),
  515. output_log_level=module.borgmatic.logger.ANSWER,
  516. output_file=None,
  517. environment=None,
  518. working_directory=None,
  519. borg_local_path='borg',
  520. borg_exit_codes=None,
  521. )
  522. module.transfer_archives(
  523. dry_run=False,
  524. repository_path='repo',
  525. config={},
  526. local_borg_version='2.3.4',
  527. global_arguments=flexmock(log_json=False),
  528. transfer_arguments=flexmock(
  529. archive=None,
  530. progress=None,
  531. source_repository='other',
  532. newer='1d',
  533. newest='1y',
  534. older='1m',
  535. oldest='1w',
  536. ),
  537. )
  538. def test_transfer_archives_calls_borg_with_working_directory():
  539. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  540. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  541. flexmock(module.flags).should_receive('make_flags').and_return(())
  542. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  543. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  544. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  545. flexmock(module.environment).should_receive('make_environment')
  546. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(
  547. '/working/dir',
  548. )
  549. flexmock(module).should_receive('execute_command').with_args(
  550. ('borg', 'transfer', '--repo', 'repo'),
  551. output_log_level=module.borgmatic.logger.ANSWER,
  552. output_file=None,
  553. environment=None,
  554. working_directory='/working/dir',
  555. borg_local_path='borg',
  556. borg_exit_codes=None,
  557. )
  558. module.transfer_archives(
  559. dry_run=False,
  560. repository_path='repo',
  561. config={'working_directory': '/working/dir'},
  562. local_borg_version='2.3.4',
  563. transfer_arguments=flexmock(
  564. archive=None, progress=None, match_archives=None, source_repository=None
  565. ),
  566. global_arguments=flexmock(log_json=False),
  567. )