1import ./make-test.nix ({ pkgs, ... } :
2
3let
4 connAuthFile="beegfs/auth-def.key";
5
6 client = { config, pkgs, lib, ... } : {
7 networking.firewall.enable = false;
8 services.beegfsEnable = true;
9 services.beegfs.default = {
10 mgmtdHost = "mgmt";
11 connAuthFile = "/etc/${connAuthFile}";
12 client = {
13 mount = false;
14 enable = true;
15 };
16 };
17
18 fileSystems = pkgs.lib.mkVMOverride # FIXME: this should be creatd by the module
19 [ { mountPoint = "/beegfs";
20 device = "default";
21 fsType = "beegfs";
22 options = [ "cfgFile=/etc/beegfs/client-default.conf" "_netdev" ];
23 }
24 ];
25
26 environment.etc."${connAuthFile}" = {
27 enable = true;
28 text = "ThisIsALousySecret";
29 mode = "0600";
30 };
31 };
32
33
34 server = service : { config, pkgs, lib, ... } : {
35 networking.firewall.enable = false;
36 boot.initrd.postDeviceCommands = ''
37 ${pkgs.e2fsprogs}/bin/mkfs.ext4 -L data /dev/vdb
38 '';
39
40 virtualisation.emptyDiskImages = [ 4096 ];
41
42 fileSystems = pkgs.lib.mkVMOverride
43 [ { mountPoint = "/data";
44 device = "/dev/disk/by-label/data";
45 fsType = "ext4";
46 }
47 ];
48
49 environment.systemPackages = with pkgs; [ beegfs ];
50 environment.etc."${connAuthFile}" = {
51 enable = true;
52 text = "ThisIsALousySecret";
53 mode = "0600";
54 };
55
56 services.beegfsEnable = true;
57 services.beegfs.default = {
58 mgmtdHost = "mgmt";
59 connAuthFile = "/etc/${connAuthFile}";
60 "${service}" = {
61 enable = true;
62 storeDir = "/data";
63 };
64 };
65 };
66
67in
68{
69 name = "beegfs";
70
71 nodes = {
72 meta = server "meta";
73 mgmt = server "mgmtd";
74 storage1 = server "storage";
75 storage2 = server "storage";
76 client1 = client;
77 client2 = client;
78 };
79
80 testScript = ''
81 # Initalize the data directories
82 $mgmt->waitForUnit("default.target");
83 $mgmt->succeed("beegfs-setup-mgmtd -C -f -p /data");
84 $mgmt->succeed("systemctl start beegfs-mgmtd-default");
85
86 $meta->waitForUnit("default.target");
87 $meta->succeed("beegfs-setup-meta -C -f -s 1 -p /data");
88 $meta->succeed("systemctl start beegfs-meta-default");
89
90 $storage1->waitForUnit("default.target");
91 $storage1->succeed("beegfs-setup-storage -C -f -s 1 -i 1 -p /data");
92 $storage1->succeed("systemctl start beegfs-storage-default");
93
94 $storage2->waitForUnit("default.target");
95 $storage2->succeed("beegfs-setup-storage -C -f -s 2 -i 2 -p /data");
96 $storage2->succeed("systemctl start beegfs-storage-default");
97
98 #
99
100 # Basic test
101 $client1->waitForUnit("beegfs.mount");
102 $client1->succeed("beegfs-check-servers-default");
103 $client1->succeed("echo test > /beegfs/test");
104 $client2->waitForUnit("beegfs.mount");
105 $client2->succeed("test -e /beegfs/test");
106 $client2->succeed("cat /beegfs/test | grep test");
107
108 # test raid0/stripping
109 $client1->succeed("dd if=/dev/urandom bs=1M count=10 of=/beegfs/striped");
110 $client2->succeed("cat /beegfs/striped > /dev/null");
111
112 # check if fs is still healthy
113 $client1->succeed("beegfs-fsck-default --checkfs");
114 '';
115})