import ./make-test-python.nix ({ pkgs, lib, ...} : { name = "evcc"; meta.maintainers = with lib.maintainers; [ hexa ]; nodes = { machine = { config, ... }: { services.evcc = { enable = true; settings = { network = { schema = "http"; host = "localhost"; port = 7070; }; log = "info"; site = { title = "NixOS Test"; meters = { grid = "grid"; pv = "pv"; }; }; meters = [ { type = "custom"; name = "grid"; power = { source = "script"; cmd = "/bin/sh -c 'echo -4500'"; }; } { type = "custom"; name = "pv"; power = { source = "script"; cmd = "/bin/sh -c 'echo 7500'"; }; } ]; chargers = [ { name = "dummy-charger"; type = "custom"; status = { source = "script"; cmd = "/bin/sh -c 'echo charger status F'"; }; enabled = { source = "script"; cmd = "/bin/sh -c 'echo charger enabled state false'"; }; enable = { source = "script"; cmd = "/bin/sh -c 'echo set charger enabled state true'"; }; maxcurrent = { source = "script"; cmd = "/bin/sh -c 'echo set charger max current 7200'"; }; } ]; loadpoints = [ { title = "Dummy"; charger = "dummy-charger"; } ]; }; }; }; }; testScript = '' start_all() machine.wait_for_unit("evcc.service") machine.wait_for_open_port(7070) with subtest("Check package version propagates into frontend"): machine.fail( "curl --fail http://localhost:7070 | grep '0.0.1-alpha'" ) machine.succeed( "curl --fail http://localhost:7070 | grep '${pkgs.evcc.version}'" ) with subtest("Check journal for errors"): _, output = machine.execute("journalctl -o cat -u evcc.service") assert "FATAL" not in output assert "ERROR" not in output with subtest("Check systemd hardening"): _, output = machine.execute("systemd-analyze security evcc.service | grep -v '✓'") machine.log(output) ''; })