test_btrfs.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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 = [Pattern('/foo'), Pattern('/mnt/subvol1'), Pattern('/mnt/subvol2')]
  6. config = {'btrfs': {}}
  7. flexmock(module).should_receive('get_subvolumes').and_return(
  8. (
  9. module.Subvolume('/mnt/subvol1', contained_patterns=(Pattern('/mnt/subvol1'),)),
  10. module.Subvolume('/mnt/subvol2', contained_patterns=(Pattern('/mnt/subvol2'),)),
  11. ),
  12. )
  13. flexmock(module.os).should_receive('getpid').and_return(1234)
  14. flexmock(module).should_receive('snapshot_subvolume').with_args(
  15. 'btrfs',
  16. '/mnt/subvol1',
  17. '/mnt/subvol1/.borgmatic-snapshot-1234/mnt/subvol1',
  18. ).once()
  19. flexmock(module).should_receive('snapshot_subvolume').with_args(
  20. 'btrfs',
  21. '/mnt/subvol2',
  22. '/mnt/subvol2/.borgmatic-snapshot-1234/mnt/subvol2',
  23. ).once()
  24. assert (
  25. module.dump_data_sources(
  26. hook_config=config['btrfs'],
  27. config=config,
  28. config_paths=('test.yaml',),
  29. borgmatic_runtime_directory='/run/borgmatic',
  30. patterns=patterns,
  31. dry_run=False,
  32. )
  33. == []
  34. )
  35. assert patterns == [
  36. Pattern(
  37. '/mnt/subvol2/.borgmatic-snapshot-1234/mnt/subvol2/.borgmatic-snapshot-1234',
  38. Pattern_type.NO_RECURSE,
  39. Pattern_style.FNMATCH,
  40. ),
  41. Pattern(
  42. '/mnt/subvol1/.borgmatic-snapshot-1234/mnt/subvol1/.borgmatic-snapshot-1234',
  43. Pattern_type.NO_RECURSE,
  44. Pattern_style.FNMATCH,
  45. ),
  46. Pattern('/foo'),
  47. Pattern('/mnt/subvol1/.borgmatic-snapshot-1234/./mnt/subvol1'),
  48. Pattern('/mnt/subvol1/.borgmatic-snapshot-1234/./mnt/subvol1', Pattern_type.INCLUDE),
  49. Pattern('/mnt/subvol2/.borgmatic-snapshot-1234/./mnt/subvol2'),
  50. Pattern('/mnt/subvol2/.borgmatic-snapshot-1234/./mnt/subvol2', Pattern_type.INCLUDE),
  51. ]
  52. assert config == {
  53. 'btrfs': {},
  54. }