test_rlist.py 23 KB

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