1{ pkgs, lib, ... }:
2{
3 name = "systemd-userdbd";
4 nodes.machine =
5 { config, pkgs, ... }:
6 {
7 services.userdbd.enable = true;
8
9 users.users.test-user-nss = {
10 isNormalUser = true;
11 };
12
13 environment.etc."userdb/test-user-dropin.user".text = builtins.toJSON {
14 userName = "test-user-dropin";
15 };
16
17 environment.systemPackages = with pkgs; [ libvarlink ];
18 };
19 testScript = ''
20 import json
21 from shlex import quote
22
23 def getUserRecord(name):
24 Interface = "unix:/run/systemd/userdb/io.systemd.Multiplexer/io.systemd.UserDatabase"
25 payload = json.dumps({
26 "service": "io.systemd.Multiplexer",
27 "userName": name
28 })
29 return json.loads(machine.succeed(f"varlink call {Interface}.GetUserRecord {quote(payload)}"))
30
31 machine.wait_for_unit("systemd-userdbd.socket")
32 getUserRecord("test-user-nss")
33 getUserRecord("test-user-dropin")
34 '';
35}