61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
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")
 | 
						|
  '';
 | 
						|
})
 |