test_btrfs.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. from flexmock import flexmock
  2. from borgmatic.borg.pattern import Pattern, Pattern_style, Pattern_type
  3. from borgmatic.hooks.data_source import btrfs as module
  4. def test_dump_data_sources_snapshots_each_subvolume_and_updates_patterns():
  5. patterns = [
  6. Pattern('/foo'),
  7. Pattern('/mnt/subvol1'),
  8. Pattern('/mnt/subvol1/.cache', Pattern_type.EXCLUDE),
  9. Pattern('/mnt/subvol2'),
  10. ]
  11. config = {'btrfs': {}}
  12. flexmock(module).should_receive('get_subvolumes').and_return(
  13. (
  14. module.Subvolume(
  15. '/mnt/subvol1',
  16. contained_patterns=(
  17. Pattern('/mnt/subvol1'),
  18. Pattern('/mnt/subvol1/.cache', Pattern_type.EXCLUDE),
  19. ),
  20. ),
  21. module.Subvolume('/mnt/subvol2', contained_patterns=(Pattern('/mnt/subvol2'),)),
  22. ),
  23. )
  24. flexmock(module).should_receive('snapshot_subvolume').with_args(
  25. 'btrfs',
  26. '/mnt/subvol1',
  27. '/mnt/subvol1/.borgmatic-snapshot/mnt/subvol1',
  28. ).once()
  29. flexmock(module).should_receive('snapshot_subvolume').with_args(
  30. 'btrfs',
  31. '/mnt/subvol2',
  32. '/mnt/subvol2/.borgmatic-snapshot/mnt/subvol2',
  33. ).once()
  34. assert (
  35. module.dump_data_sources(
  36. hook_config=config['btrfs'],
  37. config=config,
  38. config_paths=('test.yaml',),
  39. borgmatic_runtime_directory='/run/borgmatic',
  40. patterns=patterns,
  41. dry_run=False,
  42. )
  43. == []
  44. )
  45. assert patterns == [
  46. Pattern(
  47. '/mnt/subvol2/.borgmatic-snapshot/mnt/subvol2/.borgmatic-snapshot',
  48. Pattern_type.NO_RECURSE,
  49. Pattern_style.FNMATCH,
  50. ),
  51. Pattern(
  52. '/mnt/subvol1/.borgmatic-snapshot/mnt/subvol1/.borgmatic-snapshot',
  53. Pattern_type.NO_RECURSE,
  54. Pattern_style.FNMATCH,
  55. ),
  56. Pattern('/foo'),
  57. Pattern('/mnt/subvol1/.borgmatic-snapshot/./mnt/subvol1'),
  58. Pattern('/mnt/subvol1/.borgmatic-snapshot/./mnt/subvol1/.cache', Pattern_type.EXCLUDE),
  59. Pattern('/mnt/subvol2/.borgmatic-snapshot/./mnt/subvol2'),
  60. ]
  61. assert config == {
  62. 'btrfs': {},
  63. }