python312Packages.dissect-extfs: 3.11 -> 3.12
[NixPkgs.git] / nixos / tests / btrbk-section-order.nix
blob6082de947f66fa0bf785991475084f1bebeb97cc
1 # This tests validates the order of generated sections that may contain
2 # other sections.
3 # When a `volume` section has both `subvolume` and `target` children,
4 # `target` must go before `subvolume`. Otherwise, `target` will become
5 # a child of the last `subvolume` instead of `volume`, due to the
6 # order-sensitive config format.
8 # Issue: https://github.com/NixOS/nixpkgs/issues/195660
9 import ./make-test-python.nix ({ lib, pkgs, ... }: {
10   name = "btrbk-section-order";
11   meta.maintainers = with lib.maintainers; [ oxalica ];
13   nodes.machine = { ... }: {
14     services.btrbk.instances.local = {
15       onCalendar = null;
16       settings = {
17         timestamp_format = "long";
18         target."ssh://global-target/".ssh_user = "root";
19         volume."/btrfs" = {
20           snapshot_dir = "/volume-snapshots";
21           target."ssh://volume-target/".ssh_user = "root";
22           subvolume."@subvolume" = {
23             snapshot_dir = "/subvolume-snapshots";
24             target."ssh://subvolume-target/".ssh_user = "root";
25           };
26         };
27       };
28     };
29   };
31   testScript = ''
32     import difflib
33     machine.wait_for_unit("basic.target")
34     got = machine.succeed("cat /etc/btrbk/local.conf").strip()
35     expect = """
36     backend btrfs-progs-sudo
37     stream_compress no
38     timestamp_format long
39     target ssh://global-target/
40      ssh_user root
41     volume /btrfs
42      snapshot_dir /volume-snapshots
43      target ssh://volume-target/
44       ssh_user root
45      subvolume @subvolume
46       snapshot_dir /subvolume-snapshots
47       target ssh://subvolume-target/
48        ssh_user root
49     """.strip()
50     print(got)
51     if got != expect:
52       diff = difflib.unified_diff(expect.splitlines(keepends=True), got.splitlines(keepends=True), fromfile="expected", tofile="got")
53       print("".join(diff))
54     assert got == expect
55   '';