1import ./make-test-python.nix ({ 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 let
19 runexec = lib.getExe' pkgs.benchexec "runexec";
20 echo = builtins.toString pkgs.benchexec;
21 test = lib.getExe (pkgs.writeShellApplication rec {
22 name = "test";
23 meta.mainProgram = name;
24 text = "echo '${echo}'";
25 });
26 wd = "/tmp";
27 stdout = "${wd}/runexec.out";
28 stderr = "${wd}/runexec.err";
29 in
30 ''
31 start_all()
32 machine.wait_for_unit("multi-user.target")
33 benchexec.succeed(''''\
34 systemd-run \
35 --property='StandardOutput=file:${stdout}' \
36 --property='StandardError=file:${stderr}' \
37 --unit=runexec --wait --user --machine='${user}@' \
38 --working-directory ${wd} \
39 '${runexec}' \
40 --debug \
41 --read-only-dir / \
42 --hidden-dir /home \
43 '${test}' \
44 '''')
45 benchexec.succeed("grep -s '${echo}' ${wd}/output.log")
46 benchexec.succeed("test \"$(grep -Ec '((start|wall|cpu)time|memory)=' ${stdout})\" = 4")
47 benchexec.succeed("! grep -E '(WARNING|ERROR)' ${stderr}")
48 '';
49
50 interactive.nodes.benchexec.services.kmscon = {
51 enable = true;
52 fonts = [{ name = "Fira Code"; package = pkgs.fira-code; }];
53 };
54})