test_transfer.py 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626
  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(),
  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(),
  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(),
  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(),
  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(),
  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}', 'match_archives': 'sh:foo*'}, # 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(),
  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(),
  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(),
  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(),
  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(),
  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(),
  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={'log_json': True},
  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(),
  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(),
  395. )
  396. def test_transfer_archives_with_progress_calls_borg_with_progress_flags():
  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_flags').with_args('progress', True).and_return(
  401. ('--progress',)
  402. )
  403. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  404. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  405. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  406. flexmock(module.environment).should_receive('make_environment')
  407. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  408. flexmock(module).should_receive('execute_command').with_args(
  409. ('borg', 'transfer', '--progress', '--repo', 'repo'),
  410. output_log_level=module.borgmatic.logger.ANSWER,
  411. output_file=module.DO_NOT_CAPTURE,
  412. environment=None,
  413. working_directory=None,
  414. borg_local_path='borg',
  415. borg_exit_codes=None,
  416. )
  417. module.transfer_archives(
  418. dry_run=False,
  419. repository_path='repo',
  420. config={'progress': True},
  421. local_borg_version='2.3.4',
  422. transfer_arguments=flexmock(
  423. archive=None, progress=None, match_archives=None, source_repository=None
  424. ),
  425. global_arguments=flexmock(),
  426. )
  427. @pytest.mark.parametrize('argument_name', ('upgrader', 'sort_by', 'first', 'last'))
  428. def test_transfer_archives_passes_through_arguments_to_borg(argument_name):
  429. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  430. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  431. flag_name = f"--{argument_name.replace('_', ' ')}"
  432. flexmock(module.flags).should_receive('make_flags').and_return(())
  433. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  434. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(
  435. (flag_name, 'value')
  436. )
  437. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  438. flexmock(module.environment).should_receive('make_environment')
  439. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  440. flexmock(module).should_receive('execute_command').with_args(
  441. ('borg', 'transfer', flag_name, 'value', '--repo', 'repo'),
  442. output_log_level=module.borgmatic.logger.ANSWER,
  443. output_file=None,
  444. environment=None,
  445. working_directory=None,
  446. borg_local_path='borg',
  447. borg_exit_codes=None,
  448. )
  449. module.transfer_archives(
  450. dry_run=False,
  451. repository_path='repo',
  452. config={},
  453. local_borg_version='2.3.4',
  454. transfer_arguments=flexmock(
  455. archive=None,
  456. progress=None,
  457. match_archives=None,
  458. source_repository=None,
  459. **{argument_name: 'value'},
  460. ),
  461. global_arguments=flexmock(),
  462. )
  463. def test_transfer_archives_with_source_repository_calls_borg_with_other_repo_flags():
  464. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  465. flexmock(module.flags).should_receive('make_flags').and_return(())
  466. flexmock(module.flags).should_receive('make_flags').with_args('other-repo', 'other').and_return(
  467. ('--other-repo', 'other')
  468. )
  469. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  470. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  471. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  472. flexmock(module.environment).should_receive('make_environment')
  473. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  474. flexmock(module).should_receive('execute_command').with_args(
  475. ('borg', 'transfer', '--repo', 'repo', '--other-repo', 'other'),
  476. output_log_level=module.borgmatic.logger.ANSWER,
  477. output_file=None,
  478. environment=None,
  479. working_directory=None,
  480. borg_local_path='borg',
  481. borg_exit_codes=None,
  482. )
  483. module.transfer_archives(
  484. dry_run=False,
  485. repository_path='repo',
  486. config={},
  487. local_borg_version='2.3.4',
  488. transfer_arguments=flexmock(
  489. archive=None, progress=None, match_archives=None, source_repository='other'
  490. ),
  491. global_arguments=flexmock(),
  492. )
  493. def test_transfer_archives_with_date_based_matching_calls_borg_with_date_based_flags():
  494. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  495. flexmock(module.flags).should_receive('make_flags').and_return(())
  496. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  497. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(
  498. ('--newer', '1d', '--newest', '1y', '--older', '1m', '--oldest', '1w')
  499. )
  500. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  501. flexmock(module.environment).should_receive('make_environment')
  502. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  503. flexmock(module).should_receive('execute_command').with_args(
  504. (
  505. 'borg',
  506. 'transfer',
  507. '--newer',
  508. '1d',
  509. '--newest',
  510. '1y',
  511. '--older',
  512. '1m',
  513. '--oldest',
  514. '1w',
  515. '--repo',
  516. 'repo',
  517. ),
  518. output_log_level=module.borgmatic.logger.ANSWER,
  519. output_file=None,
  520. environment=None,
  521. working_directory=None,
  522. borg_local_path='borg',
  523. borg_exit_codes=None,
  524. )
  525. module.transfer_archives(
  526. dry_run=False,
  527. repository_path='repo',
  528. config={},
  529. local_borg_version='2.3.4',
  530. global_arguments=flexmock(),
  531. transfer_arguments=flexmock(
  532. archive=None,
  533. progress=None,
  534. source_repository='other',
  535. newer='1d',
  536. newest='1y',
  537. older='1m',
  538. oldest='1w',
  539. ),
  540. )
  541. def test_transfer_archives_calls_borg_with_working_directory():
  542. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  543. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  544. flexmock(module.flags).should_receive('make_flags').and_return(())
  545. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  546. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  547. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  548. flexmock(module.environment).should_receive('make_environment')
  549. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(
  550. '/working/dir',
  551. )
  552. flexmock(module).should_receive('execute_command').with_args(
  553. ('borg', 'transfer', '--repo', 'repo'),
  554. output_log_level=module.borgmatic.logger.ANSWER,
  555. output_file=None,
  556. environment=None,
  557. working_directory='/working/dir',
  558. borg_local_path='borg',
  559. borg_exit_codes=None,
  560. )
  561. module.transfer_archives(
  562. dry_run=False,
  563. repository_path='repo',
  564. config={'working_directory': '/working/dir'},
  565. local_borg_version='2.3.4',
  566. transfer_arguments=flexmock(
  567. archive=None, progress=None, match_archives=None, source_repository=None
  568. ),
  569. global_arguments=flexmock(),
  570. )