| 
									
										
										
										
											2020-04-01 14:40:51 +02:00
										 |  |  | import ./make-test-python.nix ({ pkgs, lib, ...} : { | 
					
						
							| 
									
										
										
										
											2019-08-06 18:24:21 -04:00
										 |  |  |   name = "gnome3"; | 
					
						
							| 
									
										
										
										
											2020-04-01 14:40:51 +02:00
										 |  |  |   meta = with lib; { | 
					
						
							|  |  |  |     maintainers = teams.gnome.members; | 
					
						
							| 
									
										
										
										
											2015-09-15 14:25:19 +02:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   machine = | 
					
						
							| 
									
										
										
										
											2018-07-20 20:56:59 +00:00
										 |  |  |     { ... }: | 
					
						
							| 
									
										
										
										
											2015-09-15 14:25:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     { imports = [ ./common/user-account.nix ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       services.xserver.enable = true; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-12 06:43:50 -04:00
										 |  |  |       services.xserver.displayManager = { | 
					
						
							|  |  |  |         gdm.enable = true; | 
					
						
							| 
									
										
										
										
											2020-07-14 04:34:13 +02:00
										 |  |  |         gdm.debug = true; | 
					
						
							| 
									
										
										
										
											2015-09-15 14:25:19 +02:00
										 |  |  |         autoLogin = { | 
					
						
							|  |  |  |           enable = true; | 
					
						
							|  |  |  |           user = "alice"; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2019-08-06 18:24:21 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-15 14:25:19 +02:00
										 |  |  |       services.xserver.desktopManager.gnome3.enable = true; | 
					
						
							| 
									
										
										
										
											2020-07-14 04:34:13 +02:00
										 |  |  |       services.xserver.desktopManager.gnome3.debug = true; | 
					
						
							| 
									
										
										
										
											2015-09-15 14:25:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-23 19:09:59 +02:00
										 |  |  |       environment.systemPackages = [ | 
					
						
							|  |  |  |         (pkgs.makeAutostartItem { | 
					
						
							|  |  |  |           name = "org.gnome.Terminal"; | 
					
						
							|  |  |  |           package = pkgs.gnome3.gnome-terminal; | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |       ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-28 16:58:45 +02:00
										 |  |  |       virtualisation.memorySize = 1024; | 
					
						
							| 
									
										
										
										
											2015-09-15 14:25:19 +02:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-06 21:50:23 -05:00
										 |  |  |   testScript = { nodes, ... }: let | 
					
						
							| 
									
										
										
										
											2018-12-09 16:35:51 +01:00
										 |  |  |     # Keep line widths somewhat managable | 
					
						
							| 
									
										
										
										
											2019-11-06 21:50:23 -05:00
										 |  |  |     user = nodes.machine.config.users.users.alice; | 
					
						
							|  |  |  |     uid = toString user.uid; | 
					
						
							|  |  |  |     bus = "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/${uid}/bus"; | 
					
						
							| 
									
										
										
										
											2018-12-09 16:35:51 +01:00
										 |  |  |     gdbus = "${bus} gdbus"; | 
					
						
							| 
									
										
										
										
											2019-11-06 21:50:23 -05:00
										 |  |  |     su = command: "su - ${user.name} -c '${command}'"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-09 16:35:51 +01:00
										 |  |  |     # Call javascript in gnome shell, returns a tuple (success, output), where | 
					
						
							|  |  |  |     # `success` is true if the dbus call was successful and output is what the | 
					
						
							|  |  |  |     # javascript evaluates to. | 
					
						
							|  |  |  |     eval = "call --session -d org.gnome.Shell -o /org/gnome/Shell -m org.gnome.Shell.Eval"; | 
					
						
							| 
									
										
										
										
											2018-04-21 12:09:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-06 21:50:23 -05:00
										 |  |  |     # False when startup is done | 
					
						
							|  |  |  |     startingUp = su "${gdbus} ${eval} Main.layoutManager._startingUp"; | 
					
						
							| 
									
										
										
										
											2015-09-15 14:25:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-06 21:50:23 -05:00
										 |  |  |     # Start gnome-terminal | 
					
						
							|  |  |  |     gnomeTerminalCommand = su "${bus} gnome-terminal"; | 
					
						
							| 
									
										
										
										
											2018-12-09 16:35:51 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-06 21:50:23 -05:00
										 |  |  |     # Hopefully gnome-terminal's wm class | 
					
						
							|  |  |  |     wmClass = su "${gdbus} ${eval} global.display.focus_window.wm_class"; | 
					
						
							|  |  |  |   in ''
 | 
					
						
							|  |  |  |       with subtest("Login to GNOME with GDM"): | 
					
						
							|  |  |  |           # wait for gdm to start | 
					
						
							|  |  |  |           machine.wait_for_unit("display-manager.service") | 
					
						
							| 
									
										
										
										
											2020-01-30 06:14:22 -05:00
										 |  |  |           # wait for the wayland server | 
					
						
							|  |  |  |           machine.wait_for_file("/run/user/${uid}/wayland-0") | 
					
						
							| 
									
										
										
										
											2019-11-06 21:50:23 -05:00
										 |  |  |           # wait for alice to be logged in | 
					
						
							|  |  |  |           machine.wait_for_unit("default.target", "${user.name}") | 
					
						
							|  |  |  |           # check that logging in has given the user ownership of devices | 
					
						
							|  |  |  |           assert "alice" in machine.succeed("getfacl -p /dev/snd/timer") | 
					
						
							| 
									
										
										
										
											2018-12-09 16:35:51 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-06 21:50:23 -05:00
										 |  |  |       with subtest("Wait for GNOME Shell"): | 
					
						
							|  |  |  |           # correct output should be (true, 'false') | 
					
						
							|  |  |  |           machine.wait_until_succeeds( | 
					
						
							|  |  |  |               "${startingUp} | grep -q 'true,..false'" | 
					
						
							|  |  |  |           ) | 
					
						
							| 
									
										
										
										
											2018-04-21 12:09:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-06 21:50:23 -05:00
										 |  |  |       with subtest("Open Gnome Terminal"): | 
					
						
							|  |  |  |           # correct output should be (true, '"gnome-terminal-server"') | 
					
						
							|  |  |  |           machine.wait_until_succeeds( | 
					
						
							|  |  |  |               "${wmClass} | grep -q 'gnome-terminal-server'" | 
					
						
							|  |  |  |           ) | 
					
						
							|  |  |  |           machine.sleep(20) | 
					
						
							|  |  |  |           machine.screenshot("screen") | 
					
						
							| 
									
										
										
										
											2015-09-15 14:25:19 +02:00
										 |  |  |     '';
 | 
					
						
							|  |  |  | }) |