From 50c8f7d8f5f04c717ef4e72d873bf994c03efda0 Mon Sep 17 00:00:00 2001 From: Vika Date: Sat, 22 Jul 2023 13:17:56 +0300 Subject: Move NixOS tests to a separate folder to prevent clutter --- nixos-tests/distributed-test.nix | 90 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 nixos-tests/distributed-test.nix (limited to 'nixos-tests/distributed-test.nix') diff --git a/nixos-tests/distributed-test.nix b/nixos-tests/distributed-test.nix new file mode 100644 index 0000000..11c2dba --- /dev/null +++ b/nixos-tests/distributed-test.nix @@ -0,0 +1,90 @@ +# This doesn't seem to work for some reason. I wonder why. +# The VMs themselves don't want to launch properly. +kittybox: +{ lib, system, ... }: let + kittyboxModule = { config, pkgs, lib, ... }: { + imports = [ kittybox.nixosModules.default commonModule ]; + + services.kittybox = { + enable = true; + backendUri = "file:///srv/kittybox/data"; + blobstoreUri = "file:///srv/kittybox/media"; + }; + + environment.systemPackages = with pkgs; [ xh ]; + + virtualisation.fileSystems."/srv" = { + fsType = "nfs"; + options = [ "vers=4" ]; + device = "primrose:/"; + }; + + systemd.services.kittybox = { + bindsTo = [ "srv.mount" ]; + after = [ "srv.mount" ]; + serviceConfig = { + DynamicUser = lib.mkForce false; + User = "kittybox"; + Group = "kittybox"; + }; + }; + }; + commonModule = { + users.users.kittybox = { + isSystemUser = true; + uid = 990; + group = "kittybox"; + }; + users.groups.kittybox.gid = 990; + networking.firewall.enable = false; + }; +in { + name = "kittybox-distributed"; + + nodes = { + primrose = { config, pkgs, lib, ... }: { + imports = [ commonModule ]; + services.nfs.server.enable = true; + services.nfs.server.createMountPoints = true; + services.nfs.server.exports = '' + /srv 192.168.1.0/255.255.255.0(rw,no_root_squash,no_subtree_check,fsid=0) + ''; + systemd.tmpfiles.rules = [ + "d /srv/kittybox 1750 kittybox root -" + "d /srv/kittybox/data 1750 kittybox root -" + "d /srv/kittybox/media 1750 kittybox root -" + ]; + }; + longiflorum = { config, pkgs, lib, ... }: { + imports = [ kittyboxModule ]; + }; + amaranthus = { config, pkgs, lib, ... }: { + imports = [ kittyboxModule ]; + }; + hydrangea = { config, pkgs, lib, ... }: { + imports = [ kittyboxModule ]; + }; + }; + + testScript = '' + primary = primrose; + servants = [longiflorum, amaranthus, hydrangea]; + + primary.wait_for_unit("nfs-server") + primary.succeed("systemctl start network-online.target") + primary.wait_for_unit("network-online.target") + + start_all() + + for machine in servants: + machine.wait_for_open_port(8080) + + # Onboarding + servants[0].copy_from_host("${./onboarding.json}", "/root/onboarding.json") + servants[0].succeed("xh --follow http://localhost:8080/.kittybox/onboarding -j @/root/onboarding.json") + + # Check that all machines got this address onboarded + for machine in servants: + machine.succeed("xh http://localhost:8080/ | grep 'vestige of the past long gone'") + ''; +} -- cgit 1.4.1