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")
 | |
|   '';
 | |
| })
 | 
