test_rlist.py 23 KB

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