aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/tests/grub.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/tests/grub.nix')
-rw-r--r--nixpkgs/nixos/tests/grub.nix60
1 files changed, 60 insertions, 0 deletions
diff --git a/nixpkgs/nixos/tests/grub.nix b/nixpkgs/nixos/tests/grub.nix
new file mode 100644
index 00000000000..84bfc90955b
--- /dev/null
+++ b/nixpkgs/nixos/tests/grub.nix
@@ -0,0 +1,60 @@
+import ./make-test-python.nix ({ lib, ... }: {
+ name = "grub";
+
+ meta = with lib.maintainers; {
+ maintainers = [ rnhmjoj ];
+ };
+
+ machine = { ... }: {
+ virtualisation.useBootLoader = true;
+
+ boot.loader.timeout = null;
+ boot.loader.grub = {
+ enable = true;
+ users.alice.password = "supersecret";
+
+ # OCR is not accurate enough
+ extraConfig = "serial; terminal_output serial";
+ };
+ };
+
+ testScript = ''
+ def grub_login_as(user, password):
+ """
+ Enters user and password to log into GRUB
+ """
+ machine.wait_for_console_text("Enter username:")
+ machine.send_chars(user + "\n")
+ machine.wait_for_console_text("Enter password:")
+ machine.send_chars(password + "\n")
+
+
+ def grub_select_all_configurations():
+ """
+ Selects "All configurations" from the GRUB menu
+ to trigger a login request.
+ """
+ machine.send_monitor_command("sendkey down")
+ machine.send_monitor_command("sendkey ret")
+
+
+ machine.start()
+
+ # wait for grub screen
+ machine.wait_for_console_text("GNU GRUB")
+
+ grub_select_all_configurations()
+ with subtest("Invalid credentials are rejected"):
+ grub_login_as("wronguser", "wrongsecret")
+ machine.wait_for_console_text("error: access denied.")
+
+ grub_select_all_configurations()
+ with subtest("Valid credentials are accepted"):
+ grub_login_as("alice", "supersecret")
+ machine.send_chars("\n") # press enter to boot
+ machine.wait_for_console_text("Linux version")
+
+ with subtest("Machine boots correctly"):
+ machine.wait_for_unit("multi-user.target")
+ '';
+})