71 lines
2.3 KiB
Nix
71 lines
2.3 KiB
Nix
import ./make-test-python.nix ({ lib, ... }:
|
|
|
|
{
|
|
name = "scrutiny";
|
|
meta.maintainers = with lib.maintainers; [ jnsgruk ];
|
|
|
|
nodes = {
|
|
machine = { self, pkgs, lib, ... }: {
|
|
services = {
|
|
scrutiny.enable = true;
|
|
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 ];
|
|
};
|
|
};
|
|
# This is the test code that will check if our service is running correctly:
|
|
testScript = ''
|
|
start_all()
|
|
|
|
# Wait for InfluxDB to be available
|
|
machine.wait_for_unit("influxdb2")
|
|
machine.wait_for_open_port(8086)
|
|
|
|
# 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")
|
|
'';
|
|
})
|