2
0

test_repo_info.py 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487
  1. import logging
  2. from flexmock import flexmock
  3. from borgmatic.borg import repo_info as module
  4. from ..test_verbosity import insert_logging_mock
  5. def test_display_repository_info_calls_borg_with_flags():
  6. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  7. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  8. flexmock(module.feature).should_receive('available').and_return(True)
  9. flexmock(module.flags).should_receive('make_repository_flags').and_return(
  10. (
  11. '--repo',
  12. 'repo',
  13. )
  14. )
  15. flexmock(module.environment).should_receive('make_environment')
  16. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  17. flexmock(module).should_receive('execute_command_and_capture_output').with_args(
  18. ('borg', 'repo-info', '--json', '--repo', 'repo'),
  19. extra_environment=None,
  20. working_directory=None,
  21. borg_local_path='borg',
  22. borg_exit_codes=None,
  23. ).and_return('[]')
  24. flexmock(module.flags).should_receive('warn_for_aggressive_archive_flags')
  25. flexmock(module).should_receive('execute_command').with_args(
  26. ('borg', 'repo-info', '--repo', 'repo'),
  27. output_log_level=module.borgmatic.logger.ANSWER,
  28. extra_environment=None,
  29. working_directory=None,
  30. borg_local_path='borg',
  31. borg_exit_codes=None,
  32. )
  33. module.display_repository_info(
  34. repository_path='repo',
  35. config={},
  36. local_borg_version='2.3.4',
  37. repo_info_arguments=flexmock(json=False),
  38. global_arguments=flexmock(log_json=False),
  39. )
  40. def test_display_repository_info_without_borg_features_calls_borg_with_info_sub_command():
  41. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  42. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  43. flexmock(module.feature).should_receive('available').and_return(False)
  44. flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
  45. flexmock(module.environment).should_receive('make_environment')
  46. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  47. flexmock(module).should_receive('execute_command_and_capture_output').with_args(
  48. ('borg', 'repo-info', '--json', 'repo'),
  49. extra_environment=None,
  50. working_directory=None,
  51. borg_local_path='borg',
  52. borg_exit_codes=None,
  53. ).and_return('[]')
  54. flexmock(module.flags).should_receive('warn_for_aggressive_archive_flags')
  55. flexmock(module).should_receive('execute_command').with_args(
  56. ('borg', 'info', 'repo'),
  57. output_log_level=module.borgmatic.logger.ANSWER,
  58. extra_environment=None,
  59. working_directory=None,
  60. borg_local_path='borg',
  61. borg_exit_codes=None,
  62. )
  63. module.display_repository_info(
  64. repository_path='repo',
  65. config={},
  66. local_borg_version='2.3.4',
  67. repo_info_arguments=flexmock(json=False),
  68. global_arguments=flexmock(log_json=False),
  69. )
  70. def test_display_repository_info_with_log_info_calls_borg_with_info_flag():
  71. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  72. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  73. flexmock(module.feature).should_receive('available').and_return(True)
  74. flexmock(module.flags).should_receive('make_repository_flags').and_return(
  75. (
  76. '--repo',
  77. 'repo',
  78. )
  79. )
  80. flexmock(module.environment).should_receive('make_environment')
  81. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  82. flexmock(module).should_receive('execute_command_and_capture_output').with_args(
  83. ('borg', 'repo-info', '--info', '--json', '--repo', 'repo'),
  84. extra_environment=None,
  85. working_directory=None,
  86. borg_local_path='borg',
  87. borg_exit_codes=None,
  88. ).and_return('[]')
  89. flexmock(module.flags).should_receive('warn_for_aggressive_archive_flags')
  90. flexmock(module).should_receive('execute_command').with_args(
  91. ('borg', 'repo-info', '--info', '--repo', 'repo'),
  92. output_log_level=module.borgmatic.logger.ANSWER,
  93. extra_environment=None,
  94. working_directory=None,
  95. borg_local_path='borg',
  96. borg_exit_codes=None,
  97. )
  98. insert_logging_mock(logging.INFO)
  99. module.display_repository_info(
  100. repository_path='repo',
  101. config={},
  102. local_borg_version='2.3.4',
  103. repo_info_arguments=flexmock(json=False),
  104. global_arguments=flexmock(log_json=False),
  105. )
  106. def test_display_repository_info_with_log_info_and_json_suppresses_most_borg_output():
  107. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  108. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  109. flexmock(module.feature).should_receive('available').and_return(True)
  110. flexmock(module.flags).should_receive('make_repository_flags').and_return(
  111. (
  112. '--repo',
  113. 'repo',
  114. )
  115. )
  116. flexmock(module.environment).should_receive('make_environment')
  117. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  118. flexmock(module).should_receive('execute_command_and_capture_output').with_args(
  119. ('borg', 'repo-info', '--json', '--repo', 'repo'),
  120. extra_environment=None,
  121. working_directory=None,
  122. borg_local_path='borg',
  123. borg_exit_codes=None,
  124. ).and_return('[]')
  125. flexmock(module.flags).should_receive('warn_for_aggressive_archive_flags').never()
  126. insert_logging_mock(logging.INFO)
  127. json_output = module.display_repository_info(
  128. repository_path='repo',
  129. config={},
  130. local_borg_version='2.3.4',
  131. repo_info_arguments=flexmock(json=True),
  132. global_arguments=flexmock(log_json=False),
  133. )
  134. assert json_output == '[]'
  135. def test_display_repository_info_with_log_debug_calls_borg_with_debug_flag():
  136. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  137. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  138. flexmock(module.feature).should_receive('available').and_return(True)
  139. flexmock(module.flags).should_receive('make_repository_flags').and_return(
  140. (
  141. '--repo',
  142. 'repo',
  143. )
  144. )
  145. flexmock(module.environment).should_receive('make_environment')
  146. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  147. flexmock(module).should_receive('execute_command_and_capture_output').with_args(
  148. ('borg', 'repo-info', '--debug', '--show-rc', '--json', '--repo', 'repo'),
  149. extra_environment=None,
  150. working_directory=None,
  151. borg_local_path='borg',
  152. borg_exit_codes=None,
  153. ).and_return('[]')
  154. flexmock(module.flags).should_receive('warn_for_aggressive_archive_flags')
  155. flexmock(module).should_receive('execute_command').with_args(
  156. ('borg', 'repo-info', '--debug', '--show-rc', '--repo', 'repo'),
  157. output_log_level=module.borgmatic.logger.ANSWER,
  158. extra_environment=None,
  159. working_directory=None,
  160. borg_local_path='borg',
  161. borg_exit_codes=None,
  162. )
  163. insert_logging_mock(logging.DEBUG)
  164. module.display_repository_info(
  165. repository_path='repo',
  166. config={},
  167. local_borg_version='2.3.4',
  168. repo_info_arguments=flexmock(json=False),
  169. global_arguments=flexmock(log_json=False),
  170. )
  171. def test_display_repository_info_with_log_debug_and_json_suppresses_most_borg_output():
  172. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  173. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  174. flexmock(module.feature).should_receive('available').and_return(True)
  175. flexmock(module.flags).should_receive('make_repository_flags').and_return(
  176. (
  177. '--repo',
  178. 'repo',
  179. )
  180. )
  181. flexmock(module.environment).should_receive('make_environment')
  182. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  183. flexmock(module).should_receive('execute_command_and_capture_output').with_args(
  184. ('borg', 'repo-info', '--json', '--repo', 'repo'),
  185. extra_environment=None,
  186. working_directory=None,
  187. borg_local_path='borg',
  188. borg_exit_codes=None,
  189. ).and_return('[]')
  190. flexmock(module.flags).should_receive('warn_for_aggressive_archive_flags').never()
  191. insert_logging_mock(logging.DEBUG)
  192. json_output = module.display_repository_info(
  193. repository_path='repo',
  194. config={},
  195. local_borg_version='2.3.4',
  196. repo_info_arguments=flexmock(json=True),
  197. global_arguments=flexmock(log_json=False),
  198. )
  199. assert json_output == '[]'
  200. def test_display_repository_info_with_json_calls_borg_with_json_flag():
  201. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  202. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  203. flexmock(module.feature).should_receive('available').and_return(True)
  204. flexmock(module.flags).should_receive('make_repository_flags').and_return(
  205. (
  206. '--repo',
  207. 'repo',
  208. )
  209. )
  210. flexmock(module.environment).should_receive('make_environment')
  211. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  212. flexmock(module).should_receive('execute_command_and_capture_output').with_args(
  213. ('borg', 'repo-info', '--json', '--repo', 'repo'),
  214. extra_environment=None,
  215. working_directory=None,
  216. borg_local_path='borg',
  217. borg_exit_codes=None,
  218. ).and_return('[]')
  219. flexmock(module.flags).should_receive('warn_for_aggressive_archive_flags').never()
  220. json_output = module.display_repository_info(
  221. repository_path='repo',
  222. config={},
  223. local_borg_version='2.3.4',
  224. repo_info_arguments=flexmock(json=True),
  225. global_arguments=flexmock(log_json=False),
  226. )
  227. assert json_output == '[]'
  228. def test_display_repository_info_with_local_path_calls_borg_via_local_path():
  229. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  230. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  231. flexmock(module.feature).should_receive('available').and_return(True)
  232. flexmock(module.flags).should_receive('make_repository_flags').and_return(
  233. (
  234. '--repo',
  235. 'repo',
  236. )
  237. )
  238. flexmock(module.environment).should_receive('make_environment')
  239. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  240. flexmock(module).should_receive('execute_command_and_capture_output').with_args(
  241. ('borg1', 'repo-info', '--json', '--repo', 'repo'),
  242. extra_environment=None,
  243. working_directory=None,
  244. borg_local_path='borg',
  245. borg_exit_codes=None,
  246. ).and_return('[]')
  247. flexmock(module.flags).should_receive('warn_for_aggressive_archive_flags')
  248. flexmock(module).should_receive('execute_command').with_args(
  249. ('borg1', 'repo-info', '--repo', 'repo'),
  250. output_log_level=module.borgmatic.logger.ANSWER,
  251. extra_environment=None,
  252. working_directory=None,
  253. borg_local_path='borg1',
  254. borg_exit_codes=None,
  255. )
  256. module.display_repository_info(
  257. repository_path='repo',
  258. config={},
  259. local_borg_version='2.3.4',
  260. repo_info_arguments=flexmock(json=False),
  261. global_arguments=flexmock(log_json=False),
  262. local_path='borg1',
  263. )
  264. def test_display_repository_info_with_exit_codes_calls_borg_using_them():
  265. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  266. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  267. flexmock(module.feature).should_receive('available').and_return(True)
  268. flexmock(module.flags).should_receive('make_repository_flags').and_return(
  269. (
  270. '--repo',
  271. 'repo',
  272. )
  273. )
  274. flexmock(module.environment).should_receive('make_environment')
  275. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  276. borg_exit_codes = flexmock()
  277. flexmock(module).should_receive('execute_command_and_capture_output').with_args(
  278. ('borg', 'repo-info', '--json', '--repo', 'repo'),
  279. extra_environment=None,
  280. working_directory=None,
  281. borg_local_path='borg',
  282. borg_exit_codes=borg_exit_codes,
  283. ).and_return('[]')
  284. flexmock(module.flags).should_receive('warn_for_aggressive_archive_flags')
  285. flexmock(module).should_receive('execute_command').with_args(
  286. ('borg', 'repo-info', '--repo', 'repo'),
  287. output_log_level=module.borgmatic.logger.ANSWER,
  288. extra_environment=None,
  289. working_directory=None,
  290. borg_local_path='borg',
  291. borg_exit_codes=borg_exit_codes,
  292. )
  293. module.display_repository_info(
  294. repository_path='repo',
  295. config={'borg_exit_codes': borg_exit_codes},
  296. local_borg_version='2.3.4',
  297. repo_info_arguments=flexmock(json=False),
  298. global_arguments=flexmock(log_json=False),
  299. )
  300. def test_display_repository_info_with_remote_path_calls_borg_with_remote_path_flags():
  301. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  302. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  303. flexmock(module.feature).should_receive('available').and_return(True)
  304. flexmock(module.flags).should_receive('make_repository_flags').and_return(
  305. (
  306. '--repo',
  307. 'repo',
  308. )
  309. )
  310. flexmock(module.environment).should_receive('make_environment')
  311. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  312. flexmock(module).should_receive('execute_command_and_capture_output').with_args(
  313. ('borg', 'repo-info', '--remote-path', 'borg1', '--json', '--repo', 'repo'),
  314. extra_environment=None,
  315. working_directory=None,
  316. borg_local_path='borg',
  317. borg_exit_codes=None,
  318. ).and_return('[]')
  319. flexmock(module.flags).should_receive('warn_for_aggressive_archive_flags')
  320. flexmock(module).should_receive('execute_command').with_args(
  321. ('borg', 'repo-info', '--remote-path', 'borg1', '--repo', 'repo'),
  322. output_log_level=module.borgmatic.logger.ANSWER,
  323. extra_environment=None,
  324. working_directory=None,
  325. borg_local_path='borg',
  326. borg_exit_codes=None,
  327. )
  328. module.display_repository_info(
  329. repository_path='repo',
  330. config={},
  331. local_borg_version='2.3.4',
  332. repo_info_arguments=flexmock(json=False),
  333. global_arguments=flexmock(log_json=False),
  334. remote_path='borg1',
  335. )
  336. def test_display_repository_info_with_log_json_calls_borg_with_log_json_flags():
  337. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  338. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  339. flexmock(module.feature).should_receive('available').and_return(True)
  340. flexmock(module.flags).should_receive('make_repository_flags').and_return(
  341. (
  342. '--repo',
  343. 'repo',
  344. )
  345. )
  346. flexmock(module.environment).should_receive('make_environment')
  347. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  348. flexmock(module).should_receive('execute_command_and_capture_output').with_args(
  349. ('borg', 'repo-info', '--log-json', '--json', '--repo', 'repo'),
  350. extra_environment=None,
  351. working_directory=None,
  352. borg_local_path='borg',
  353. borg_exit_codes=None,
  354. ).and_return('[]')
  355. flexmock(module.flags).should_receive('warn_for_aggressive_archive_flags')
  356. flexmock(module).should_receive('execute_command').with_args(
  357. ('borg', 'repo-info', '--log-json', '--repo', 'repo'),
  358. output_log_level=module.borgmatic.logger.ANSWER,
  359. extra_environment=None,
  360. working_directory=None,
  361. borg_local_path='borg',
  362. borg_exit_codes=None,
  363. )
  364. module.display_repository_info(
  365. repository_path='repo',
  366. config={},
  367. local_borg_version='2.3.4',
  368. repo_info_arguments=flexmock(json=False),
  369. global_arguments=flexmock(log_json=True),
  370. )
  371. def test_display_repository_info_with_lock_wait_calls_borg_with_lock_wait_flags():
  372. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  373. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  374. config = {'lock_wait': 5}
  375. flexmock(module.feature).should_receive('available').and_return(True)
  376. flexmock(module.flags).should_receive('make_repository_flags').and_return(
  377. (
  378. '--repo',
  379. 'repo',
  380. )
  381. )
  382. flexmock(module.environment).should_receive('make_environment')
  383. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
  384. flexmock(module).should_receive('execute_command_and_capture_output').with_args(
  385. ('borg', 'repo-info', '--lock-wait', '5', '--json', '--repo', 'repo'),
  386. extra_environment=None,
  387. working_directory=None,
  388. borg_local_path='borg',
  389. borg_exit_codes=None,
  390. ).and_return('[]')
  391. flexmock(module.flags).should_receive('warn_for_aggressive_archive_flags')
  392. flexmock(module).should_receive('execute_command').with_args(
  393. ('borg', 'repo-info', '--lock-wait', '5', '--repo', 'repo'),
  394. output_log_level=module.borgmatic.logger.ANSWER,
  395. extra_environment=None,
  396. working_directory=None,
  397. borg_local_path='borg',
  398. borg_exit_codes=None,
  399. )
  400. module.display_repository_info(
  401. repository_path='repo',
  402. config=config,
  403. local_borg_version='2.3.4',
  404. repo_info_arguments=flexmock(json=False),
  405. global_arguments=flexmock(log_json=False),
  406. )
  407. def test_display_repository_info_calls_borg_with_working_directory():
  408. flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
  409. flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
  410. flexmock(module.feature).should_receive('available').and_return(True)
  411. flexmock(module.flags).should_receive('make_repository_flags').and_return(
  412. (
  413. '--repo',
  414. 'repo',
  415. )
  416. )
  417. flexmock(module.environment).should_receive('make_environment')
  418. flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(
  419. '/working/dir',
  420. )
  421. flexmock(module).should_receive('execute_command_and_capture_output').with_args(
  422. ('borg', 'repo-info', '--json', '--repo', 'repo'),
  423. extra_environment=None,
  424. working_directory='/working/dir',
  425. borg_local_path='borg',
  426. borg_exit_codes=None,
  427. ).and_return('[]')
  428. flexmock(module.flags).should_receive('warn_for_aggressive_archive_flags')
  429. flexmock(module).should_receive('execute_command').with_args(
  430. ('borg', 'repo-info', '--repo', 'repo'),
  431. output_log_level=module.borgmatic.logger.ANSWER,
  432. extra_environment=None,
  433. working_directory='/working/dir',
  434. borg_local_path='borg',
  435. borg_exit_codes=None,
  436. )
  437. module.display_repository_info(
  438. repository_path='repo',
  439. config={},
  440. local_borg_version='2.3.4',
  441. repo_info_arguments=flexmock(json=False),
  442. global_arguments=flexmock(log_json=False),
  443. )