| 
									
										
										
										
											2018-07-20 20:56:59 +00:00
										 |  |  | import ./make-test.nix ({ ... } : | 
					
						
							| 
									
										
										
										
											2017-12-28 17:51:42 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  |   connAuthFile="beegfs/auth-def.key"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-20 20:56:59 +00:00
										 |  |  |   client = { pkgs, ... } : { | 
					
						
							| 
									
										
										
										
											2017-12-28 17:51:42 -08:00
										 |  |  |     networking.firewall.enable = false; | 
					
						
							|  |  |  |     services.beegfsEnable = true; | 
					
						
							|  |  |  |     services.beegfs.default = { | 
					
						
							|  |  |  |       mgmtdHost = "mgmt"; | 
					
						
							|  |  |  |       connAuthFile = "/etc/${connAuthFile}"; | 
					
						
							|  |  |  |       client = { | 
					
						
							|  |  |  |         mount = false; | 
					
						
							|  |  |  |         enable = true; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     fileSystems = pkgs.lib.mkVMOverride # FIXME: this should be creatd by the module | 
					
						
							|  |  |  |       [ { mountPoint = "/beegfs"; | 
					
						
							|  |  |  |           device = "default"; | 
					
						
							|  |  |  |           fsType = "beegfs"; | 
					
						
							|  |  |  |           options = [ "cfgFile=/etc/beegfs/client-default.conf" "_netdev" ]; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     environment.etc."${connAuthFile}" = { | 
					
						
							|  |  |  |       enable = true; | 
					
						
							|  |  |  |       text = "ThisIsALousySecret"; | 
					
						
							|  |  |  |       mode = "0600"; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-20 20:56:59 +00:00
										 |  |  |   server = service : { pkgs, ... } : { | 
					
						
							| 
									
										
										
										
											2017-12-28 17:51:42 -08:00
										 |  |  |     networking.firewall.enable = false; | 
					
						
							|  |  |  |     boot.initrd.postDeviceCommands = ''
 | 
					
						
							|  |  |  |       ${pkgs.e2fsprogs}/bin/mkfs.ext4 -L data /dev/vdb | 
					
						
							|  |  |  |     '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     virtualisation.emptyDiskImages = [ 4096 ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     fileSystems = pkgs.lib.mkVMOverride | 
					
						
							|  |  |  |       [ { mountPoint = "/data"; | 
					
						
							|  |  |  |           device = "/dev/disk/by-label/data"; | 
					
						
							|  |  |  |           fsType = "ext4"; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     environment.systemPackages = with pkgs; [ beegfs ]; | 
					
						
							|  |  |  |     environment.etc."${connAuthFile}" = { | 
					
						
							|  |  |  |       enable = true; | 
					
						
							|  |  |  |       text = "ThisIsALousySecret"; | 
					
						
							|  |  |  |       mode = "0600"; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     services.beegfsEnable = true; | 
					
						
							|  |  |  |     services.beegfs.default = { | 
					
						
							|  |  |  |       mgmtdHost = "mgmt"; | 
					
						
							|  |  |  |       connAuthFile = "/etc/${connAuthFile}"; | 
					
						
							|  |  |  |       "${service}" = { | 
					
						
							|  |  |  |         enable = true; | 
					
						
							|  |  |  |         storeDir = "/data"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | in | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   name = "beegfs"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   nodes = { | 
					
						
							|  |  |  |     meta = server "meta"; | 
					
						
							|  |  |  |     mgmt = server "mgmtd"; | 
					
						
							|  |  |  |     storage1 = server "storage"; | 
					
						
							|  |  |  |     storage2 = server "storage"; | 
					
						
							|  |  |  |     client1 = client; | 
					
						
							|  |  |  |     client2 = client; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   testScript = ''
 | 
					
						
							|  |  |  |     # Initalize the data directories | 
					
						
							|  |  |  |     $mgmt->waitForUnit("default.target"); | 
					
						
							|  |  |  |     $mgmt->succeed("beegfs-setup-mgmtd -C -f -p /data"); | 
					
						
							|  |  |  |     $mgmt->succeed("systemctl start beegfs-mgmtd-default"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $meta->waitForUnit("default.target"); | 
					
						
							|  |  |  |     $meta->succeed("beegfs-setup-meta -C -f -s 1 -p /data"); | 
					
						
							|  |  |  |     $meta->succeed("systemctl start beegfs-meta-default"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $storage1->waitForUnit("default.target"); | 
					
						
							|  |  |  |     $storage1->succeed("beegfs-setup-storage -C -f -s 1 -i 1 -p /data"); | 
					
						
							|  |  |  |     $storage1->succeed("systemctl start beegfs-storage-default"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $storage2->waitForUnit("default.target"); | 
					
						
							|  |  |  |     $storage2->succeed("beegfs-setup-storage -C -f -s 2 -i 2 -p /data"); | 
					
						
							|  |  |  |     $storage2->succeed("systemctl start beegfs-storage-default"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Basic test | 
					
						
							|  |  |  |     $client1->waitForUnit("beegfs.mount"); | 
					
						
							|  |  |  |     $client1->succeed("beegfs-check-servers-default"); | 
					
						
							|  |  |  |     $client1->succeed("echo test > /beegfs/test"); | 
					
						
							|  |  |  |     $client2->waitForUnit("beegfs.mount"); | 
					
						
							|  |  |  |     $client2->succeed("test -e /beegfs/test"); | 
					
						
							|  |  |  |     $client2->succeed("cat /beegfs/test | grep test"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # test raid0/stripping | 
					
						
							|  |  |  |     $client1->succeed("dd if=/dev/urandom bs=1M count=10 of=/beegfs/striped"); | 
					
						
							|  |  |  |     $client2->succeed("cat /beegfs/striped > /dev/null"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # check if fs is still healthy | 
					
						
							|  |  |  |     $client1->succeed("beegfs-fsck-default --checkfs"); | 
					
						
							|  |  |  |   '';
 | 
					
						
							|  |  |  | }) |