diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 43103c6b91c1..98cdfc602c84 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -1051,7 +1051,7 @@ in { scaphandre = handleTest ./scaphandre.nix {}; schleuder = handleTest ./schleuder.nix {}; scion-freestanding-deployment = handleTest ./scion/freestanding-deployment {}; - scrutiny = handleTest ./scrutiny.nix {}; + scrutiny = runTest ./scrutiny.nix; sddm = handleTest ./sddm.nix {}; sdl3 = handleTest ./sdl3.nix { }; seafile = handleTest ./seafile.nix {}; diff --git a/nixos/tests/scrutiny.nix b/nixos/tests/scrutiny.nix index 93a28c861dcf..17d984f4c1ff 100644 --- a/nixos/tests/scrutiny.nix +++ b/nixos/tests/scrutiny.nix @@ -1,100 +1,98 @@ -import ./make-test-python.nix ( - { lib, ... }: +{ lib, ... }: - { - name = "scrutiny"; - meta.maintainers = with lib.maintainers; [ jnsgruk ]; +{ + name = "scrutiny"; + meta.maintainers = with lib.maintainers; [ jnsgruk ]; - nodes = { - machine = - { - self, - pkgs, - lib, - ... - }: - { - services = { - scrutiny = { - enable = true; - settings = { - notify.urls = [ - { - _secret = pkgs.writeText "notify-script" "script://${pkgs.writeShellScript "touch-test-file" '' - echo "HelloWorld" > /run/scrutiny/hello - ''}"; - } - ]; - }; + nodes = { + machine = + { + self, + pkgs, + lib, + ... + }: + { + services = { + scrutiny = { + enable = true; + settings = { + notify.urls = [ + { + _secret = pkgs.writeText "notify-script" "script://${pkgs.writeShellScript "touch-test-file" '' + echo "HelloWorld" > /run/scrutiny/hello + ''}"; + } + ]; }; - scrutiny.collector.enable = true; }; - - environment.systemPackages = - let - seleniumScript = - pkgs.writers.writePython3Bin "selenium-script" - { - libraries = with pkgs.python3Packages; [ selenium ]; - } - '' - from selenium import webdriver - from selenium.webdriver.common.by import By - from selenium.webdriver.firefox.options import Options - from selenium.webdriver.support.ui import WebDriverWait - from selenium.webdriver.support import expected_conditions as EC - - options = Options() - options.add_argument("--headless") - service = webdriver.FirefoxService(executable_path="${lib.getExe pkgs.geckodriver}") # noqa: E501 - - driver = webdriver.Firefox(options=options, service=service) - driver.implicitly_wait(10) - driver.get("http://localhost:8080/web/dashboard") - - wait = WebDriverWait(driver, 10).until( - EC.text_to_be_present_in_element( - (By.TAG_NAME, "body"), "Drive health at a glance") - ) - - body_text = driver.find_element(By.TAG_NAME, "body").text - assert "Temperature history for each device" in body_text - - driver.close() - ''; - in - with pkgs; - [ - curl - firefox-unwrapped - geckodriver - seleniumScript - ]; + scrutiny.collector.enable = true; }; - }; - # This is the test code that will check if our service is running correctly: - testScript = '' - start_all() - # Wait for Scrutiny to be available - machine.wait_for_unit("scrutiny") - machine.wait_for_open_port(8080) + environment.systemPackages = + let + seleniumScript = + pkgs.writers.writePython3Bin "selenium-script" + { + libraries = with pkgs.python3Packages; [ selenium ]; + } + '' + from selenium import webdriver + from selenium.webdriver.common.by import By + from selenium.webdriver.firefox.options import Options + from selenium.webdriver.support.ui import WebDriverWait + from selenium.webdriver.support import expected_conditions as EC - # Ensure the API responds as we expect - output = machine.succeed("curl localhost:8080/api/health") - assert output == '{"success":true}' + options = Options() + options.add_argument("--headless") + service = webdriver.FirefoxService(executable_path="${lib.getExe pkgs.geckodriver}") # noqa: E501 - # Start the collector service to send some metrics - collect = machine.succeed("systemctl start scrutiny-collector.service") + driver = webdriver.Firefox(options=options, service=service) + driver.implicitly_wait(10) + driver.get("http://localhost:8080/web/dashboard") - # Ensure the application is actually rendered by the Javascript - machine.succeed("PYTHONUNBUFFERED=1 selenium-script") + wait = WebDriverWait(driver, 10).until( + EC.text_to_be_present_in_element( + (By.TAG_NAME, "body"), "Drive health at a glance") + ) - # Test notification and genJqSecretsReplacementSnippet - machine.succeed("curl -X POST http://localhost:8080/api/health/notify") - machine.wait_for_file("/run/scrutiny/hello") - output = machine.succeed("cat /run/scrutiny/hello") - assert "HelloWorld" in output - ''; - } -) + body_text = driver.find_element(By.TAG_NAME, "body").text + assert "Temperature history for each device" in body_text + + driver.close() + ''; + in + with pkgs; + [ + curl + firefox-unwrapped + geckodriver + seleniumScript + ]; + }; + }; + # This is the test code that will check if our service is running correctly: + testScript = '' + start_all() + + # Wait for Scrutiny to be available + machine.wait_for_unit("scrutiny") + machine.wait_for_open_port(8080) + + # Ensure the API responds as we expect + output = machine.succeed("curl localhost:8080/api/health") + assert output == '{"success":true}' + + # Start the collector service to send some metrics + collect = machine.succeed("systemctl start scrutiny-collector.service") + + # Ensure the application is actually rendered by the Javascript + machine.succeed("PYTHONUNBUFFERED=1 selenium-script") + + # Test notification and genJqSecretsReplacementSnippet + machine.succeed("curl -X POST http://localhost:8080/api/health/notify") + machine.wait_for_file("/run/scrutiny/hello") + output = machine.succeed("cat /run/scrutiny/hello") + assert "HelloWorld" in output + ''; +}