python312Packages.dissect-extfs: 3.11 -> 3.12
[NixPkgs.git] / nixos / tests / saunafs.nix
blob49d9861757166a61938b9efc00bd5e596f5ef151
1 import ./make-test-python.nix (
2   { pkgs, lib, ... }:
4   let
5     master =
6       { pkgs, ... }:
7       {
8         # data base is stored in memory
9         # server may crash with default memory size
10         virtualisation.memorySize = 1024;
12         services.saunafs.master = {
13           enable = true;
14           openFirewall = true;
15           exports = [
16             "* / rw,alldirs,maproot=0:0"
17           ];
18         };
19       };
21     chunkserver =
22       { pkgs, ... }:
23       {
24         virtualisation.emptyDiskImages = [ 4096 ];
25         boot.initrd.postDeviceCommands = ''
26           ${pkgs.e2fsprogs}/bin/mkfs.ext4 -L data /dev/vdb
27         '';
29         fileSystems = pkgs.lib.mkVMOverride {
30           "/data" = {
31             device = "/dev/disk/by-label/data";
32             fsType = "ext4";
33           };
34         };
36         services.saunafs = {
37           masterHost = "master";
38           chunkserver = {
39             openFirewall = true;
40             enable = true;
41             hdds = [ "/data" ];
43             # The test image is too small and gets set to "full"
44             settings.HDD_LEAVE_SPACE_DEFAULT = "100M";
45           };
46         };
47       };
49     metalogger =
50       { pkgs, ... }:
51       {
52         services.saunafs = {
53           masterHost = "master";
54           metalogger.enable = true;
55         };
56       };
58     client =
59       { pkgs, lib, ... }:
60       {
61         services.saunafs.client.enable = true;
62         # systemd.tmpfiles.rules = [ "d /sfs 755 root root -" ];
63         systemd.network.enable = true;
65         # Use networkd to have properly functioning
66         # network-online.target
67         networking = {
68           useDHCP = false;
69           useNetworkd = true;
70         };
72         systemd.mounts = [
73           {
74             requires = [ "network-online.target" ];
75             after = [ "network-online.target" ];
76             wantedBy = [ "remote-fs.target" ];
77             type = "saunafs";
78             what = "master:/";
79             where = "/sfs";
80           }
81         ];
82       };
84   in
85   {
86     name = "saunafs";
88     meta.maintainers = [ lib.maintainers.markuskowa ];
90     nodes = {
91       inherit master metalogger;
92       chunkserver1 = chunkserver;
93       chunkserver2 = chunkserver;
94       client1 = client;
95       client2 = client;
96     };
98     testScript = ''
99       # prepare master server
100       master.start()
101       master.wait_for_unit("multi-user.target")
102       master.succeed("sfsmaster-init")
103       master.succeed("systemctl restart sfs-master")
104       master.wait_for_unit("sfs-master.service")
106       metalogger.wait_for_unit("sfs-metalogger.service")
108       # Setup chunkservers
109       for chunkserver in [chunkserver1, chunkserver2]:
110           chunkserver.wait_for_unit("multi-user.target")
111           chunkserver.succeed("chown saunafs:saunafs /data")
112           chunkserver.succeed("systemctl restart sfs-chunkserver")
113           chunkserver.wait_for_unit("sfs-chunkserver.service")
115       for client in [client1, client2]:
116           client.wait_for_unit("multi-user.target")
118       client1.succeed("echo test > /sfs/file")
119       client2.succeed("grep test /sfs/file")
120     '';
121   }