python312Packages.dissect-extfs: 3.11 -> 3.12
[NixPkgs.git] / nixos / tests / apfs.nix
blob3e79fa11dc049525e8ca02f4a3e9eafe2e513b96
1 { lib, ... }: {
2   name = "apfs";
3   meta.maintainers = with lib.maintainers; [ Luflosi ];
5   nodes.machine = {
6     virtualisation.emptyDiskImages = [ 1024 ];
8     boot.supportedFilesystems = [ "apfs" ];
9   };
11   testScript = ''
12     machine.wait_for_unit("basic.target")
13     machine.succeed("mkdir /tmp/mnt")
15     with subtest("mkapfs refuses to work with a label that is too long"):
16       machine.fail( "mkapfs -L '000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F' /dev/vdb")
18     with subtest("mkapfs works with the maximum label length"):
19       machine.succeed("mkapfs -L '000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7' /dev/vdb")
21     with subtest("apfs-label works"):
22       machine.succeed("mkapfs -L 'myLabel' /dev/vdb")
23       machine.succeed("apfs-label /dev/vdb | grep -q myLabel")
25     with subtest("Enable case sensitivity and normalization sensitivity"):
26       machine.succeed(
27           "mkapfs -s -z /dev/vdb",
28           "mount -o cknodes,readwrite /dev/vdb /tmp/mnt",
29           "echo 'Hello World 1' > /tmp/mnt/test.txt",
30           "[ ! -f /tmp/mnt/TeSt.TxT ] || false", # Test case sensitivity
31           "echo 'Hello World 1' | diff - /tmp/mnt/test.txt",
32           "echo 'Hello World 2' > /tmp/mnt/\u0061\u0301.txt",
33           "echo 'Hello World 2' | diff - /tmp/mnt/\u0061\u0301.txt",
34           "[ ! -f /tmp/mnt/\u00e1.txt ] || false", # Test Unicode normalization sensitivity
35           "umount /tmp/mnt",
36           "apfsck /dev/vdb",
37       )
38     with subtest("Disable case sensitivity and normalization sensitivity"):
39       machine.succeed(
40           "mkapfs /dev/vdb",
41           "mount -o cknodes,readwrite /dev/vdb /tmp/mnt",
42           "echo 'bla bla bla' > /tmp/mnt/Test.txt",
43           "echo -n 'Hello World' > /tmp/mnt/test.txt",
44           "echo ' 1' >> /tmp/mnt/TEST.TXT",
45           "umount /tmp/mnt",
46           "apfsck /dev/vdb",
47           "mount -o cknodes,readwrite /dev/vdb /tmp/mnt",
48           "echo 'Hello World 1' | diff - /tmp/mnt/TeSt.TxT", # Test case insensitivity
49           "echo 'Hello World 2' > /tmp/mnt/\u0061\u0301.txt",
50           "echo 'Hello World 2' | diff - /tmp/mnt/\u0061\u0301.txt",
51           "echo 'Hello World 2' | diff - /tmp/mnt/\u00e1.txt", # Test Unicode normalization
52           "umount /tmp/mnt",
53           "apfsck /dev/vdb",
54       )
55     with subtest("Snapshots"):
56       machine.succeed(
57           "mkapfs /dev/vdb",
58           "mount -o cknodes,readwrite /dev/vdb /tmp/mnt",
59           "echo 'Hello World' > /tmp/mnt/test.txt",
60           "apfs-snap /tmp/mnt snap-1",
61           "rm /tmp/mnt/test.txt",
62           "umount /tmp/mnt",
63           "mount -o cknodes,readwrite,snap=snap-1 /dev/vdb /tmp/mnt",
64           "echo 'Hello World' | diff - /tmp/mnt/test.txt",
65           "umount /tmp/mnt",
66           "apfsck /dev/vdb",
67       )
68   '';