2
0

test_rlist.py 23 KB

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