{
  pkgs,
  lib,
  shb,
}:
let
  inherit (lib) getAttrFromPath setAttrByPath;
  inherit (lib) mkIf;
in
{
  name,
  configRoot,
  settingsCfg, # str -> attrset
  modules ? [ ],
  owner ? "root",
  group ? "root",
  mode ? "0400",
  restartUnits ? [ "myunit.service" ],
}:
shb.test.runNixOSTest {
  name = "secret_${name}_${owner}_${group}_${mode}";

  nodes.machine =
    { config, ... }:
    {
      imports = [ shb.test.baseImports ] ++ modules;
      config = lib.mkMerge [
        (setAttrByPath configRoot {
          A = {
            request = {
              inherit
                owner
                group
                mode
                restartUnits
                ;
            };
            settings = settingsCfg "secretA";
          };
        })
        (mkIf (owner != "root") {
          users.users.${owner}.isNormalUser = true;
        })
        (mkIf (group != "root") {
          users.groups.${group} = { };
        })
      ];
    };

  testScript =
    { nodes, ... }:
    let
      result = (getAttrFromPath configRoot nodes.machine)."A".result;
    in
    ''
      owner = machine.succeed("stat -c '%U' ${result.path}").strip()
      print(f"Got owner {owner}")
      if owner != "${owner}":
          raise Exception(f"Owner should be '${owner}' but got '{owner}'")

      group = machine.succeed("stat -c '%G' ${result.path}").strip()
      print(f"Got group {group}")
      if group != "${group}":
          raise Exception(f"Group should be '${group}' but got '{group}'")

      mode = str(int(machine.succeed("stat -c '%a' ${result.path}").strip()))
      print(f"Got mode {mode}")
      wantedMode = str(int("${mode}"))
      if mode != wantedMode:
          raise Exception(f"Mode should be '{wantedMode}' but got '{mode}'")

      content = machine.succeed("cat ${result.path}").strip()
      print(f"Got content {content}")
      if content != "secretA":
          raise Exception(f"Content should be 'secretA' but got '{content}'")
    '';
}
