about summary refs log tree commit diff
path: root/nixos/tests
diff options
context:
space:
mode:
authorJan Tojnar <jtojnar@gmail.com>2021-06-16 19:58:58 +0200
committerJan Tojnar <jtojnar@gmail.com>2021-06-16 19:59:05 +0200
commite3dfa794412778ab993054a8e0a55a7a5490c022 (patch)
treeafcfb540333a669269b36adcfcf6def5e7e688ec /nixos/tests
parent30915f8d471cba27ec9364135cdcb27f83b52f5d (diff)
parentb08ae54dd9daf4cceb03d49d681bfbd7ad013bb8 (diff)
downloadnixlib-e3dfa794412778ab993054a8e0a55a7a5490c022.tar
nixlib-e3dfa794412778ab993054a8e0a55a7a5490c022.tar.gz
nixlib-e3dfa794412778ab993054a8e0a55a7a5490c022.tar.bz2
nixlib-e3dfa794412778ab993054a8e0a55a7a5490c022.tar.lz
nixlib-e3dfa794412778ab993054a8e0a55a7a5490c022.tar.xz
nixlib-e3dfa794412778ab993054a8e0a55a7a5490c022.tar.zst
nixlib-e3dfa794412778ab993054a8e0a55a7a5490c022.zip
Merge branch 'staging-next' into staging
Regenerated pkgs/servers/x11/xorg/default.nix to resolve the conflict.
Diffstat (limited to 'nixos/tests')
-rw-r--r--nixos/tests/all-tests.nix1
-rw-r--r--nixos/tests/overlayfs.nix57
-rw-r--r--nixos/tests/solanum.nix8
-rw-r--r--nixos/tests/ucarp.nix66
4 files changed, 102 insertions, 30 deletions
diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix
index 17e12eee9d9d..abc4d9b9b8f8 100644
--- a/nixos/tests/all-tests.nix
+++ b/nixos/tests/all-tests.nix
@@ -434,6 +434,7 @@ in
   trilium-server = handleTestOn ["x86_64-linux"] ./trilium-server.nix {};
   tuptime = handleTest ./tuptime.nix {};
   turbovnc-headless-server = handleTest ./turbovnc-headless-server.nix {};
+  ucarp = handleTest ./ucarp.nix {};
   ucg = handleTest ./ucg.nix {};
   udisks2 = handleTest ./udisks2.nix {};
   unbound = handleTest ./unbound.nix {};
diff --git a/nixos/tests/overlayfs.nix b/nixos/tests/overlayfs.nix
index 142e7d378b2f..1768f1fea1ed 100644
--- a/nixos/tests/overlayfs.nix
+++ b/nixos/tests/overlayfs.nix
@@ -15,36 +15,33 @@ import ./make-test-python.nix ({ pkgs, ... }: {
 
     # Test ext4 + overlayfs
     machine.succeed(
-        """
-          mkfs.ext4 -F -L overlay-ext4 /dev/vdb
-          mount -t ext4 /dev/vdb /tmp/mnt
-          mkdir -p /tmp/mnt/upper /tmp/mnt/lower /tmp/mnt/work /tmp/mnt/merged
-          # Setup some existing files
-          echo 'Replace' > /tmp/mnt/lower/replace.txt
-          echo 'Append' > /tmp/mnt/lower/append.txt
-          echo 'Overwrite' > /tmp/mnt/lower/overwrite.txt
-          mount -t overlay overlay -o lowerdir=/tmp/mnt/lower,upperdir=/tmp/mnt/upper,workdir=/tmp/mnt/work /tmp/mnt/merged
-          # Test new
-          echo 'New' > /tmp/mnt/merged/new.txt
-          [[ "\$(cat /tmp/mnt/merged/new.txt)" == "New" ]]
-          # Test replace
-          [[ "\$(cat /tmp/mnt/merged/replace.txt)" == "Replace" ]]
-          echo 'Replaced' > /tmp/mnt/merged/replace-tmp.txt
-          mv /tmp/mnt/merged/replace-tmp.txt /tmp/mnt/merged/replace.txt
-          [[ "\$(cat /tmp/mnt/merged/replace.txt)" == "Replaced" ]]
-          # Overwrite
-          [[ "\$(cat /tmp/mnt/merged/overwrite.txt)" == "Overwrite" ]]
-          echo 'Overwritten' > /tmp/mnt/merged/overwrite.txt
-          [[ "\$(cat /tmp/mnt/merged/overwrite.txt)" == "Overwritten" ]]
-          # Test append
-          [[ "\$(cat /tmp/mnt/merged/append.txt)" == "Append" ]]
-          echo 'ed' >> /tmp/mnt/merged/append.txt
-          #"cat /tmp/mnt/merged/append.txt && exit 1
-          [[ "\$(cat /tmp/mnt/merged/append.txt)" == "Append\ned" ]]
-          umount /tmp/mnt/merged
-          umount /tmp/mnt
-          udevadm settle
-      """
+      'mkfs.ext4 -F -L overlay-ext4 /dev/vdb',
+      'mount -t ext4 /dev/vdb /tmp/mnt',
+      'mkdir -p /tmp/mnt/upper /tmp/mnt/lower /tmp/mnt/work /tmp/mnt/merged',
+      # Setup some existing files
+      'echo Replace > /tmp/mnt/lower/replace.txt',
+      'echo Append > /tmp/mnt/lower/append.txt',
+      'echo Overwrite > /tmp/mnt/lower/overwrite.txt',
+      'mount -t overlay overlay -o lowerdir=/tmp/mnt/lower,upperdir=/tmp/mnt/upper,workdir=/tmp/mnt/work /tmp/mnt/merged',
+      # Test new
+      'echo New > /tmp/mnt/merged/new.txt',
+      '[[ "$(cat /tmp/mnt/merged/new.txt)" == New ]]',
+      # Test replace
+      '[[ "$(cat /tmp/mnt/merged/replace.txt)" == Replace ]]',
+      'echo Replaced > /tmp/mnt/merged/replace-tmp.txt',
+      'mv /tmp/mnt/merged/replace-tmp.txt /tmp/mnt/merged/replace.txt',
+      '[[ "$(cat /tmp/mnt/merged/replace.txt)" == Replaced ]]',
+      # Overwrite
+      '[[ "$(cat /tmp/mnt/merged/overwrite.txt)" == Overwrite ]]',
+      'echo Overwritten > /tmp/mnt/merged/overwrite.txt',
+      '[[ "$(cat /tmp/mnt/merged/overwrite.txt)" == Overwritten ]]',
+      # Test append
+      '[[ "$(cat /tmp/mnt/merged/append.txt)" == Append ]]',
+      'echo ed >> /tmp/mnt/merged/append.txt',
+      '[[ "$(cat /tmp/mnt/merged/append.txt)" == "Append\ned" ]]',
+      'umount /tmp/mnt/merged',
+      'umount /tmp/mnt',
+      'udevadm settle',
     )
   '';
 })
diff --git a/nixos/tests/solanum.nix b/nixos/tests/solanum.nix
index aabfb906aa81..1ecf91bce40b 100644
--- a/nixos/tests/solanum.nix
+++ b/nixos/tests/solanum.nix
@@ -16,6 +16,10 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
       networking.firewall.allowedTCPPorts = [ ircPort ];
       services.solanum = {
         enable = true;
+        motd = ''
+          The default MOTD doesn't contain the word "nixos" in it.
+          This one does.
+        '';
       };
     };
   } // lib.listToAttrs (builtins.map (client: lib.nameValuePair client {
@@ -48,6 +52,10 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
           ${client}.wait_for_unit("ii")
           ${client}.wait_for_file("${iiDir}/${server}/out")
         ''
+        # look for the custom text in the MOTD.
+        ''
+          ${client}.wait_until_succeeds("grep 'nixos' ${iiDir}/${server}/out")
+        ''
         # wait until first PING from server arrives before joining,
         # so we don't try it too early
         ''
diff --git a/nixos/tests/ucarp.nix b/nixos/tests/ucarp.nix
new file mode 100644
index 000000000000..1f60f770d3a8
--- /dev/null
+++ b/nixos/tests/ucarp.nix
@@ -0,0 +1,66 @@
+import ./make-test-python.nix ({ pkgs, lib, ...} :
+
+let
+  addrShared = "192.168.0.1";
+  addrHostA = "192.168.0.10";
+  addrHostB = "192.168.0.11";
+
+  mkUcarpHost = addr: { config, pkgs, lib, ... }: {
+    networking.interfaces.eth1.ipv4.addresses = lib.mkForce [
+      { address = addr; prefixLength = 24; }
+    ];
+
+    networking.ucarp = {
+      enable = true;
+      interface = "eth1";
+      srcIp = addr;
+      vhId = 1;
+      passwordFile = "${pkgs.writeText "ucarp-pass" "secure"}";
+      addr = addrShared;
+      upscript = pkgs.writeScript "upscript" ''
+        #!/bin/sh
+        ${pkgs.iproute2}/bin/ip addr add "$2"/24 dev "$1"
+      '';
+      downscript = pkgs.writeScript "downscript" ''
+        #!/bin/sh
+        ${pkgs.iproute2}/bin/ip addr del "$2"/24 dev "$1"
+      '';
+    };
+  };
+in {
+  name = "ucarp";
+  meta.maintainers = with lib.maintainers; [ oxzi ];
+
+  nodes = {
+    hostA = mkUcarpHost addrHostA;
+    hostB = mkUcarpHost addrHostB;
+  };
+
+  testScript = ''
+    def is_master(host):
+      ipOutput = host.succeed("ip addr show dev eth1")
+      return "inet ${addrShared}/24" in ipOutput
+
+
+    start_all()
+
+    # First, let both hosts start and let a master node be selected
+    for host, peer in [(hostA, "${addrHostB}"), (hostB, "${addrHostA}")]:
+      host.wait_for_unit("ucarp.service")
+      host.succeed(f"ping -c 1 {peer}")
+
+    hostA.sleep(5)
+
+    hostA_master, hostB_master = is_master(hostA), is_master(hostB)
+    assert hostA_master != hostB_master, "only one master node is allowed"
+
+    master_host = hostA if hostA_master else hostB
+    backup_host = hostB if hostA_master else hostA
+
+    # Let's crash the master host and let the backup take over
+    master_host.crash()
+
+    backup_host.sleep(5)
+    assert is_master(backup_host), "backup did not take over"
+  '';
+})