import ./make-test-python.nix ( { lib, pkgs, ... }: let config_refresh = "10"; nullvalue = "NULL"; utc = false; in { name = "osquery"; meta.maintainers = with lib.maintainers; [ znewman01 lewo ]; nodes.machine = { config, pkgs, ... }: { services.osquery = { enable = true; settings.options = { inherit nullvalue utc; }; flags = { inherit config_refresh; nullvalue = "IGNORED"; }; }; }; testScript = { nodes, ... }: let cfg = nodes.machine.services.osquery; in '' machine.start() machine.wait_for_unit("osqueryd.service") # Stop the osqueryd service so that we can use osqueryi to check information stored in the database. machine.wait_until_succeeds("systemctl stop osqueryd.service") # osqueryd was able to query information about the host. machine.succeed("echo 'SELECT address FROM etc_hosts LIMIT 1;' | osqueryi | tee /dev/console | grep -q '127.0.0.1'") # osquery binaries respect configuration from the Nix config option. machine.succeed("echo 'SELECT value FROM osquery_flags WHERE name = \"utc\";' | osqueryi | tee /dev/console | grep -q ${lib.boolToString utc}") # osquery binaries respect configuration from the Nix flags option. machine.succeed("echo 'SELECT value FROM osquery_flags WHERE name = \"config_refresh\";' | osqueryi | tee /dev/console | grep -q ${config_refresh}") # Demonstrate that osquery binaries prefer configuration plugin options over CLI flags. # https://osquery.readthedocs.io/en/latest/deployment/configuration/#options. machine.succeed("echo 'SELECT value FROM osquery_flags WHERE name = \"nullvalue\";' | osqueryi | tee /dev/console | grep -q ${nullvalue}") # Module creates directories for default database_path and pidfile flag values. machine.succeed("test -d $(dirname ${cfg.flags.database_path})") machine.succeed("test -d $(dirname ${cfg.flags.pidfile})") ''; } )