test_btrfs.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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.os).should_receive('getpid').and_return(1234)
  25. flexmock(module).should_receive('snapshot_subvolume').with_args(
  26. 'btrfs',
  27. '/mnt/subvol1',
  28. '/mnt/subvol1/.borgmatic-snapshot-1234/mnt/subvol1',
  29. ).once()
  30. flexmock(module).should_receive('snapshot_subvolume').with_args(
  31. 'btrfs',
  32. '/mnt/subvol2',
  33. '/mnt/subvol2/.borgmatic-snapshot-1234/mnt/subvol2',
  34. ).once()
  35. assert (
  36. module.dump_data_sources(
  37. hook_config=config['btrfs'],
  38. config=config,
  39. config_paths=('test.yaml',),
  40. borgmatic_runtime_directory='/run/borgmatic',
  41. patterns=patterns,
  42. dry_run=False,
  43. )
  44. == []
  45. )
  46. assert patterns == [
  47. Pattern(
  48. '/mnt/subvol2/.borgmatic-snapshot-1234/mnt/subvol2/.borgmatic-snapshot-1234',
  49. Pattern_type.NO_RECURSE,
  50. Pattern_style.FNMATCH,
  51. ),
  52. Pattern(
  53. '/mnt/subvol1/.borgmatic-snapshot-1234/mnt/subvol1/.borgmatic-snapshot-1234',
  54. Pattern_type.NO_RECURSE,
  55. Pattern_style.FNMATCH,
  56. ),
  57. Pattern('/foo'),
  58. Pattern('/mnt/subvol1/.borgmatic-snapshot-1234/./mnt/subvol1'),
  59. Pattern('/mnt/subvol1/.borgmatic-snapshot-1234/./mnt/subvol1/.cache', Pattern_type.EXCLUDE),
  60. Pattern('/mnt/subvol1/.borgmatic-snapshot-1234/./mnt/subvol1', Pattern_type.INCLUDE),
  61. Pattern('/mnt/subvol2/.borgmatic-snapshot-1234/./mnt/subvol2'),
  62. Pattern('/mnt/subvol2/.borgmatic-snapshot-1234/./mnt/subvol2', Pattern_type.INCLUDE),
  63. ]
  64. assert config == {
  65. 'btrfs': {},
  66. }