mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-02 15:41:48 +00:00
nixos/cockpit: add nixos test
Signed-off-by: lucasew <lucas59356@gmail.com>
This commit is contained in:
parent
f772d2e69b
commit
1ef7b45ffb
@ -134,6 +134,7 @@ in {
|
||||
cloud-init-hostname = handleTest ./cloud-init-hostname.nix {};
|
||||
cloudlog = handleTest ./cloudlog.nix {};
|
||||
cntr = handleTestOn ["aarch64-linux" "x86_64-linux"] ./cntr.nix {};
|
||||
cockpit = handleTest ./cockpit.nix {};
|
||||
cockroachdb = handleTestOn ["x86_64-linux"] ./cockroachdb.nix {};
|
||||
collectd = handleTest ./collectd.nix {};
|
||||
connman = handleTest ./connman.nix {};
|
||||
|
135
nixos/tests/cockpit.nix
Normal file
135
nixos/tests/cockpit.nix
Normal file
@ -0,0 +1,135 @@
|
||||
import ./make-test-python.nix (
|
||||
{ pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
user = "alice"; # from ./common/user-account.nix
|
||||
password = "foobar"; # from ./common/user-account.nix
|
||||
in {
|
||||
name = "cockpit";
|
||||
meta = {
|
||||
maintainers = with lib.maintainers; [ lucasew ];
|
||||
};
|
||||
nodes = {
|
||||
server = { config, ... }: {
|
||||
imports = [ ./common/user-account.nix ];
|
||||
security.polkit.enable = true;
|
||||
users.users.${user} = {
|
||||
extraGroups = [ "wheel" ];
|
||||
};
|
||||
services.cockpit = {
|
||||
enable = true;
|
||||
openFirewall = true;
|
||||
settings = {
|
||||
WebService = {
|
||||
Origins = "https://server:9090";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
client = { config, ... }: {
|
||||
imports = [ ./common/user-account.nix ];
|
||||
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
|
||||
from time import sleep
|
||||
|
||||
|
||||
def log(msg):
|
||||
from sys import stderr
|
||||
print(f"[*] {msg}", file=stderr)
|
||||
|
||||
|
||||
log("Initializing")
|
||||
|
||||
options = Options()
|
||||
options.add_argument("--headless")
|
||||
|
||||
driver = webdriver.Firefox(options=options)
|
||||
|
||||
driver.implicitly_wait(10)
|
||||
|
||||
log("Opening homepage")
|
||||
driver.get("https://server:9090")
|
||||
|
||||
wait = WebDriverWait(driver, 60)
|
||||
|
||||
|
||||
def wait_elem(by, query):
|
||||
wait.until(EC.presence_of_element_located((by, query)))
|
||||
|
||||
|
||||
def wait_title_contains(title):
|
||||
wait.until(EC.title_contains(title))
|
||||
|
||||
|
||||
def find_element(by, query):
|
||||
return driver.find_element(by, query)
|
||||
|
||||
|
||||
def set_value(elem, value):
|
||||
script = 'arguments[0].value = arguments[1]'
|
||||
return driver.execute_script(script, elem, value)
|
||||
|
||||
|
||||
log("Waiting for the homepage to load")
|
||||
|
||||
# cockpit sets initial title as hostname
|
||||
wait_title_contains("server")
|
||||
wait_elem(By.CSS_SELECTOR, 'input#login-user-input')
|
||||
|
||||
log("Homepage loaded!")
|
||||
|
||||
log("Filling out username")
|
||||
login_input = find_element(By.CSS_SELECTOR, 'input#login-user-input')
|
||||
set_value(login_input, "${user}")
|
||||
|
||||
log("Filling out password")
|
||||
password_input = find_element(By.CSS_SELECTOR, 'input#login-password-input')
|
||||
set_value(password_input, "${password}")
|
||||
|
||||
log("Submiting credentials for login")
|
||||
driver.find_element(By.CSS_SELECTOR, 'button#login-button').click()
|
||||
|
||||
# driver.implicitly_wait(1)
|
||||
# driver.get("https://server:9090/system")
|
||||
|
||||
log("Waiting dashboard to load")
|
||||
wait_title_contains("${user}@server")
|
||||
|
||||
log("Waiting for the frontend to initalize")
|
||||
sleep(1)
|
||||
|
||||
log("Looking for that banner that tells about limited access")
|
||||
container_iframe = find_element(By.CSS_SELECTOR, 'iframe.container-frame')
|
||||
driver.switch_to.frame(container_iframe)
|
||||
|
||||
assert "Web console is running in limited access mode" in driver.page_source
|
||||
|
||||
driver.close()
|
||||
'';
|
||||
in with pkgs; [ firefox-unwrapped geckodriver seleniumScript ];
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
server.wait_for_open_port(9090)
|
||||
server.wait_for_unit("network.target")
|
||||
server.wait_for_unit("multi-user.target")
|
||||
server.systemctl("start", "polkit")
|
||||
|
||||
client.wait_for_unit("multi-user.target")
|
||||
|
||||
client.succeed("curl -k https://server:9090 -o /dev/stderr")
|
||||
print(client.succeed("whoami"))
|
||||
client.succeed('PYTHONUNBUFFERED=1 selenium-script')
|
||||
'';
|
||||
}
|
||||
)
|
Loading…
Reference in New Issue
Block a user