diff --git a/nixos/tests/prometheus/ui.nix b/nixos/tests/prometheus/ui.nix index fb5ddcd58f55..3ef784f3ad8b 100644 --- a/nixos/tests/prometheus/ui.nix +++ b/nixos/tests/prometheus/ui.nix @@ -7,6 +7,8 @@ browser = { config, pkgs, ... }: { + virtualisation.memorySize = 1024 * 2; + environment.systemPackages = let prometheusSeleniumScript = @@ -18,20 +20,87 @@ from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.firefox.options import Options + from selenium.webdriver.support.relative_locator import locate_with from selenium.webdriver.support.ui import WebDriverWait options = Options() options.add_argument("--headless") - service = webdriver.FirefoxService(executable_path="${lib.getExe pkgs.geckodriver}") # noqa: E501 + 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://prometheus:9090/") + driver.get("http://prometheus:9090/") wait = WebDriverWait(driver, 60) - assert len(driver.find_elements(By.CLASS_NAME, "mantine-AppShell-header")) > 0 # noqa: E501 - assert len(driver.find_elements(By.CLASS_NAME, "mantine-AppShell-main")) > 0 # noqa: E501 + # There should have been a redirect + url = driver.current_url + assert url == "http://prometheus:9090/query" + + assert len(driver.find_elements( + By.CLASS_NAME, "mantine-AppShell-header")) > 0 + assert len(driver.find_elements( + By.CLASS_NAME, "mantine-AppShell-main")) > 0 + + # Do a Prometheus query + query_box = driver.find_element( + By.XPATH, "//div[@role='textbox']") + query_box.click() + query_box.send_keys("up") + + # Run query with execute button + driver.find_element( + By.XPATH, "//span[contains(text(),'Execute')]").click() + + # Find query result table + table_tr_elements = driver.find_elements( + By.CLASS_NAME, "mantine-Table-tr") + assert len(table_tr_elements) == 1 + + # Navigate to target health page + driver.find_element( + By.XPATH, "//span[text()='Status']").click() + + driver.find_element( + By.LINK_TEXT, "Target health").click() + + url = driver.current_url + assert url == "http://prometheus:9090/targets" + + # Click on the prometheus job dropdown button + prometheus_job_dropdown = driver.find_element( + By.CLASS_NAME, "mantine-Accordion-chevron").click() + + targets_healthy = len(driver.find_elements( + By.CSS_SELECTOR, "div[class^='_healthOk']")) + assert targets_healthy == 1 + + targets_errored = len(driver.find_elements( + By.CSS_SELECTOR, "div[class^='_healthErr']")) + assert targets_errored == 0 + + # Go back to homepage + driver.find_element( + By.XPATH, "//span[text()='Query']").click() + + # Navigate to build info section and verify correct version + # number shown + driver.find_element( + By.XPATH, "//span[text()='Status']").click() + + driver.find_element( + By.LINK_TEXT, "Runtime & build information").click() + + url = driver.current_url + assert url == "http://prometheus:9090/status" + + # Find table + version_th_element = driver.find_element( + By.XPATH, "//th[text()='version']") + version_td_element = driver.find_element( + locate_with(By.TAG_NAME, "td").near(version_th_element)) + assert version_td_element.text == "${pkgs.prometheus.version}" driver.close() ''; @@ -59,8 +128,7 @@ static_configs = [ { targets = [ - "prometheus1:${toString config.services.prometheus.port}" - "prometheus2:${toString config.services.prometheus.port}" + "prometheus:${toString config.services.prometheus.port}" ]; } ];