Files
nixpkgs/nixos/tests/solanum.nix
NAHO a2ed7e8d88 nixos: remove optional builtins prefixes from prelude functions
Remove optional builtins prefixes from prelude functions by running:

    builtins=(
      abort
      baseNameOf
      break
      derivation
      derivationStrict
      dirOf
      false
      fetchGit
      fetchMercurial
      fetchTarball
      fetchTree
      fromTOML
      import
      isNull
      map
      null
      placeholder
      removeAttrs
      scopedImport
      throw
      toString
      true
    )

    fd \
      --exclude doc/manual/release-notes \
      --type file \
      . \
      nixos \
      --exec-batch sed --in-place --regexp-extended "
        s/\<builtins\.($(
          printf '%s\n' "${builtins[@]}" |
            paste --delimiter '|' --serial -
        ))\>/\1/g
      "

    nix fmt
2026-01-15 16:07:55 +01:00

106 lines
2.9 KiB
Nix

let
clients = [
"ircclient1"
"ircclient2"
];
server = "solanum";
ircPort = 6667;
channel = "nixos-cat";
iiDir = "/tmp/irc";
in
{ pkgs, lib, ... }:
{
name = "solanum";
nodes = {
"${server}" = {
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 (
map (
client:
lib.nameValuePair client {
imports = [
./common/user-account.nix
];
systemd.services.ii = {
requires = [ "network.target" ];
wantedBy = [ "default.target" ];
serviceConfig = {
Type = "simple";
ExecPreStartPre = "mkdir -p ${iiDir}";
ExecStart = ''
${lib.getBin pkgs.ii}/bin/ii -n ${client} -s ${server} -i ${iiDir}
'';
User = "alice";
};
};
}
) clients
);
testScript =
let
msg = client: "Hello, my name is ${client}";
clientScript =
client:
[
''
${client}.wait_for_unit("network.target")
${client}.systemctl("start ii")
${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
''
${client}.wait_until_succeeds("grep 'PING' ${iiDir}/${server}/out")
''
# join ${channel}
''
${client}.succeed("echo '/j #${channel}' > ${iiDir}/${server}/in")
${client}.wait_for_file("${iiDir}/${server}/#${channel}/in")
''
# send a greeting
''
${client}.succeed(
"echo '${msg client}' > ${iiDir}/${server}/#${channel}/in"
)
''
# check that all greetings arrived on all clients
]
++ map (other: ''
${client}.succeed(
"grep '${msg other}$' ${iiDir}/${server}/#${channel}/out"
)
'') clients;
# foldl', but requires a non-empty list instead of a start value
reduce = f: list: builtins.foldl' f (builtins.head list) (builtins.tail list);
in
''
start_all()
${server}.systemctl("status solanum")
${server}.wait_for_open_port(${toString ircPort})
# run clientScript for all clients so that every list
# entry is executed by every client before advancing
# to the next one.
''
+ lib.concatStrings (reduce (lib.zipListsWith (cs: c: cs + c)) (map clientScript clients));
}