1{ pkgs, lib, ... }:
2let
3 user = "alice";
4in
5{
6 name = "benchexec";
7
8 nodes.benchexec = {
9 imports = [ ./common/user-account.nix ];
10
11 programs.benchexec = {
12 enable = true;
13 users = [ user ];
14 };
15 };
16
17 testScript =
18 { ... }:
19 let
20 runexec = lib.getExe' pkgs.benchexec "runexec";
21 echo = builtins.toString pkgs.benchexec;
22 test = lib.getExe (
23 pkgs.writeShellApplication rec {
24 name = "test";
25 meta.mainProgram = name;
26 text = "echo '${echo}'";
27 }
28 );
29 wd = "/tmp";
30 stdout = "${wd}/runexec.out";
31 stderr = "${wd}/runexec.err";
32 in
33 ''
34 start_all()
35 machine.wait_for_unit("multi-user.target")
36 benchexec.succeed(''''\
37 systemd-run \
38 --property='StandardOutput=file:${stdout}' \
39 --property='StandardError=file:${stderr}' \
40 --unit=runexec --wait --user --machine='${user}@' \
41 --working-directory ${wd} \
42 '${runexec}' \
43 --debug \
44 --read-only-dir / \
45 --hidden-dir /home \
46 '${test}' \
47 '''')
48 benchexec.succeed("grep -s '${echo}' ${wd}/output.log")
49 benchexec.succeed("test \"$(grep -Ec '((start|wall|cpu)time|memory)=' ${stdout})\" = 4")
50 benchexec.succeed("! grep -E '(WARNING|ERROR)' ${stderr}")
51 '';
52
53 interactive.nodes.benchexec.services.kmscon = {
54 enable = true;
55 fonts = [
56 {
57 name = "Fira Code";
58 package = pkgs.fira-code;
59 }
60 ];
61 };
62}