test_transfer.py 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590
  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. extra_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. extra_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. extra_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. extra_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. extra_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. extra_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. extra_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. extra_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. extra_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. extra_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_log_json_calls_borg_with_log_json_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').and_return(())
  307. flexmock(module.flags).should_receive('make_flags').with_args('log-json', True).and_return(
  308. ('--log-json',)
  309. )
  310. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  311. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  312. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  313. flexmock(module.environment).should_receive('make_environment')
  314. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  315. flexmock(module).should_receive('execute_command').with_args(
  316. ('borg', 'transfer', '--log-json', '--repo', 'repo'),
  317. output_log_level=module.borgmatic.logger.ANSWER,
  318. output_file=None,
  319. extra_environment=None,
  320. working_directory=None,
  321. borg_local_path='borg',
  322. borg_exit_codes=None,
  323. )
  324. module.transfer_archives(
  325. dry_run=False,
  326. repository_path='repo',
  327. config={},
  328. local_borg_version='2.3.4',
  329. transfer_arguments=flexmock(
  330. archive=None, progress=None, match_archives=None, source_repository=None
  331. ),
  332. global_arguments=flexmock(log_json=True),
  333. )
  334. def test_transfer_archives_with_lock_wait_calls_borg_with_lock_wait_flags():
  335. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  336. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  337. flexmock(module.flags).should_receive('make_flags').and_return(())
  338. flexmock(module.flags).should_receive('make_flags').with_args('lock-wait', 5).and_return(
  339. ('--lock-wait', '5')
  340. )
  341. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  342. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  343. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  344. config = {'lock_wait': 5}
  345. flexmock(module.environment).should_receive('make_environment')
  346. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  347. flexmock(module).should_receive('execute_command').with_args(
  348. ('borg', 'transfer', '--lock-wait', '5', '--repo', 'repo'),
  349. output_log_level=module.borgmatic.logger.ANSWER,
  350. output_file=None,
  351. extra_environment=None,
  352. working_directory=None,
  353. borg_local_path='borg',
  354. borg_exit_codes=None,
  355. )
  356. module.transfer_archives(
  357. dry_run=False,
  358. repository_path='repo',
  359. config=config,
  360. local_borg_version='2.3.4',
  361. transfer_arguments=flexmock(
  362. archive=None, progress=None, match_archives=None, source_repository=None
  363. ),
  364. global_arguments=flexmock(log_json=False),
  365. )
  366. def test_transfer_archives_with_progress_calls_borg_with_progress_flag():
  367. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  368. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  369. flexmock(module.flags).should_receive('make_flags').and_return(())
  370. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  371. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(('--progress',))
  372. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  373. flexmock(module.environment).should_receive('make_environment')
  374. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  375. flexmock(module).should_receive('execute_command').with_args(
  376. ('borg', 'transfer', '--progress', '--repo', 'repo'),
  377. output_log_level=module.borgmatic.logger.ANSWER,
  378. output_file=module.DO_NOT_CAPTURE,
  379. extra_environment=None,
  380. working_directory=None,
  381. borg_local_path='borg',
  382. borg_exit_codes=None,
  383. )
  384. module.transfer_archives(
  385. dry_run=False,
  386. repository_path='repo',
  387. config={},
  388. local_borg_version='2.3.4',
  389. transfer_arguments=flexmock(
  390. archive=None, progress=True, match_archives=None, source_repository=None
  391. ),
  392. global_arguments=flexmock(log_json=False),
  393. )
  394. @pytest.mark.parametrize('argument_name', ('upgrader', 'sort_by', 'first', 'last'))
  395. def test_transfer_archives_passes_through_arguments_to_borg(argument_name):
  396. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  397. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  398. flag_name = f"--{argument_name.replace('_', ' ')}"
  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(
  402. (flag_name, 'value')
  403. )
  404. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  405. flexmock(module.environment).should_receive('make_environment')
  406. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  407. flexmock(module).should_receive('execute_command').with_args(
  408. ('borg', 'transfer', flag_name, 'value', '--repo', 'repo'),
  409. output_log_level=module.borgmatic.logger.ANSWER,
  410. output_file=None,
  411. extra_environment=None,
  412. working_directory=None,
  413. borg_local_path='borg',
  414. borg_exit_codes=None,
  415. )
  416. module.transfer_archives(
  417. dry_run=False,
  418. repository_path='repo',
  419. config={},
  420. local_borg_version='2.3.4',
  421. transfer_arguments=flexmock(
  422. archive=None,
  423. progress=None,
  424. match_archives=None,
  425. source_repository=None,
  426. **{argument_name: 'value'},
  427. ),
  428. global_arguments=flexmock(log_json=False),
  429. )
  430. def test_transfer_archives_with_source_repository_calls_borg_with_other_repo_flags():
  431. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  432. flexmock(module.flags).should_receive('make_flags').and_return(())
  433. flexmock(module.flags).should_receive('make_flags').with_args('other-repo', 'other').and_return(
  434. ('--other-repo', 'other')
  435. )
  436. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  437. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  438. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  439. flexmock(module.environment).should_receive('make_environment')
  440. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  441. flexmock(module).should_receive('execute_command').with_args(
  442. ('borg', 'transfer', '--repo', 'repo', '--other-repo', 'other'),
  443. output_log_level=module.borgmatic.logger.ANSWER,
  444. output_file=None,
  445. extra_environment=None,
  446. working_directory=None,
  447. borg_local_path='borg',
  448. borg_exit_codes=None,
  449. )
  450. module.transfer_archives(
  451. dry_run=False,
  452. repository_path='repo',
  453. config={},
  454. local_borg_version='2.3.4',
  455. transfer_arguments=flexmock(
  456. archive=None, progress=None, match_archives=None, source_repository='other'
  457. ),
  458. global_arguments=flexmock(log_json=False),
  459. )
  460. def test_transfer_archives_with_date_based_matching_calls_borg_with_date_based_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_match_archives_flags').and_return(())
  464. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(
  465. ('--newer', '1d', '--newest', '1y', '--older', '1m', '--oldest', '1w')
  466. )
  467. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  468. flexmock(module.environment).should_receive('make_environment')
  469. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  470. flexmock(module).should_receive('execute_command').with_args(
  471. (
  472. 'borg',
  473. 'transfer',
  474. '--newer',
  475. '1d',
  476. '--newest',
  477. '1y',
  478. '--older',
  479. '1m',
  480. '--oldest',
  481. '1w',
  482. '--repo',
  483. 'repo',
  484. ),
  485. output_log_level=module.borgmatic.logger.ANSWER,
  486. output_file=None,
  487. extra_environment=None,
  488. working_directory=None,
  489. borg_local_path='borg',
  490. borg_exit_codes=None,
  491. )
  492. module.transfer_archives(
  493. dry_run=False,
  494. repository_path='repo',
  495. config={},
  496. local_borg_version='2.3.4',
  497. global_arguments=flexmock(log_json=False),
  498. transfer_arguments=flexmock(
  499. archive=None,
  500. progress=None,
  501. source_repository='other',
  502. newer='1d',
  503. newest='1y',
  504. older='1m',
  505. oldest='1w',
  506. ),
  507. )
  508. def test_transfer_archives_calls_borg_with_working_directory():
  509. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  510. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  511. flexmock(module.flags).should_receive('make_flags').and_return(())
  512. flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
  513. flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
  514. flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
  515. flexmock(module.environment).should_receive('make_environment')
  516. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(
  517. '/working/dir',
  518. )
  519. flexmock(module).should_receive('execute_command').with_args(
  520. ('borg', 'transfer', '--repo', 'repo'),
  521. output_log_level=module.borgmatic.logger.ANSWER,
  522. output_file=None,
  523. extra_environment=None,
  524. working_directory='/working/dir',
  525. borg_local_path='borg',
  526. borg_exit_codes=None,
  527. )
  528. module.transfer_archives(
  529. dry_run=False,
  530. repository_path='repo',
  531. config={'working_directory': '/working/dir'},
  532. local_borg_version='2.3.4',
  533. transfer_arguments=flexmock(
  534. archive=None, progress=None, match_archives=None, source_repository=None
  535. ),
  536. global_arguments=flexmock(log_json=False),
  537. )