| 
									
										
										
										
											2015-07-12 12:09:40 +02:00
										 |  |  | import ./make-test.nix ({ pkgs, ...} : | 
					
						
							| 
									
										
										
										
											2009-09-02 23:16:33 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-09 22:21:22 +00:00
										 |  |  | let | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Build Quake with coverage instrumentation. | 
					
						
							|  |  |  |   overrides = pkgs: | 
					
						
							|  |  |  |     rec { | 
					
						
							|  |  |  |       quake3game = pkgs.quake3game.override (args: { | 
					
						
							|  |  |  |         stdenv = pkgs.stdenvAdapters.addCoverageInstrumentation args.stdenv; | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-15 18:25:16 +01:00
										 |  |  |   # Only allow the demo data to be used (only if it's unfreeRedistributable). | 
					
						
							|  |  |  |   unfreePredicate = pkg: with pkgs.lib; let | 
					
						
							|  |  |  |     allowDrvPredicates = [ "quake3-demo" "quake3-pointrelease" ]; | 
					
						
							|  |  |  |     allowLicenses = [ pkgs.lib.licenses.unfreeRedistributable ]; | 
					
						
							|  |  |  |   in any (flip hasPrefix pkg.name) allowDrvPredicates && | 
					
						
							|  |  |  |      elem (pkg.meta.license or null) allowLicenses; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-09 22:21:22 +00:00
										 |  |  | in | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-02 23:16:33 +00:00
										 |  |  | rec { | 
					
						
							| 
									
										
										
										
											2014-06-28 16:04:49 +02:00
										 |  |  |   name = "quake3"; | 
					
						
							| 
									
										
										
										
											2015-07-12 12:09:40 +02:00
										 |  |  |   meta = with pkgs.stdenv.lib.maintainers; { | 
					
						
							| 
									
										
										
										
											2019-02-22 16:14:13 +01:00
										 |  |  |     maintainers = [ domenkozar eelco ]; | 
					
						
							| 
									
										
										
										
											2015-07-12 12:09:40 +02:00
										 |  |  |   }; | 
					
						
							| 
									
										
										
										
											2009-09-02 23:16:33 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-14 13:34:04 +01:00
										 |  |  |   # TODO: lcov doesn't work atm | 
					
						
							|  |  |  |   #makeCoverageReport = true; | 
					
						
							| 
									
										
										
										
											2014-03-03 13:39:30 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  |   client = | 
					
						
							| 
									
										
										
										
											2018-07-20 20:56:59 +00:00
										 |  |  |     { pkgs, ... }: | 
					
						
							| 
									
										
										
										
											2009-09-03 00:04:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-04 13:05:09 +02:00
										 |  |  |     { imports = [ ./common/x11.nix ]; | 
					
						
							| 
									
										
										
										
											2014-03-03 13:39:30 +01:00
										 |  |  |       hardware.opengl.driSupport = true; | 
					
						
							| 
									
										
										
										
											2010-10-12 22:04:10 +00:00
										 |  |  |       environment.systemPackages = [ pkgs.quake3demo ]; | 
					
						
							| 
									
										
										
										
											2011-01-09 22:21:22 +00:00
										 |  |  |       nixpkgs.config.packageOverrides = overrides; | 
					
						
							| 
									
										
										
										
											2016-01-15 18:25:16 +01:00
										 |  |  |       nixpkgs.config.allowUnfreePredicate = unfreePredicate; | 
					
						
							| 
									
										
										
										
											2009-09-03 00:04:43 +00:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-02 23:16:33 +00:00
										 |  |  |   nodes = | 
					
						
							| 
									
										
										
										
											2009-09-03 00:04:43 +00:00
										 |  |  |     { server = | 
					
						
							| 
									
										
										
										
											2018-07-20 20:56:59 +00:00
										 |  |  |         { pkgs, ... }: | 
					
						
							| 
									
										
										
										
											2009-09-02 23:16:33 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-06 06:50:18 +00:00
										 |  |  |         { systemd.services."quake3-server" = | 
					
						
							|  |  |  |             { wantedBy = [ "multi-user.target" ]; | 
					
						
							|  |  |  |               script = | 
					
						
							| 
									
										
										
										
											2016-01-16 01:01:28 +01:00
										 |  |  |                 "${pkgs.quake3demo}/bin/quake3-server +set g_gametype 0 " + | 
					
						
							|  |  |  |                 "+map q3dm7 +addbot grunt +addbot daemia 2> /tmp/log"; | 
					
						
							| 
									
										
										
										
											2009-09-03 00:04:43 +00:00
										 |  |  |             }; | 
					
						
							| 
									
										
										
										
											2011-01-09 22:21:22 +00:00
										 |  |  |           nixpkgs.config.packageOverrides = overrides; | 
					
						
							| 
									
										
										
										
											2016-01-15 18:25:16 +01:00
										 |  |  |           nixpkgs.config.allowUnfreePredicate = unfreePredicate; | 
					
						
							| 
									
										
										
										
											2014-04-11 17:15:56 +02:00
										 |  |  |           networking.firewall.allowedUDPPorts = [ 27960 ]; | 
					
						
							| 
									
										
										
										
											2009-09-02 23:16:33 +00:00
										 |  |  |         }; | 
					
						
							| 
									
										
										
										
											2009-09-03 00:04:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       client1 = client; | 
					
						
							|  |  |  |       client2 = client; | 
					
						
							| 
									
										
										
										
											2009-09-02 23:16:33 +00:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-05 11:18:43 +00:00
										 |  |  |   testScript = | 
					
						
							| 
									
										
										
										
											2009-09-02 23:16:33 +00:00
										 |  |  |     ''
 | 
					
						
							|  |  |  |       startAll; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-24 18:22:53 +02:00
										 |  |  |       $server->waitForUnit("quake3-server"); | 
					
						
							| 
									
										
										
										
											2010-01-05 23:59:29 +00:00
										 |  |  |       $client1->waitForX; | 
					
						
							|  |  |  |       $client2->waitForX; | 
					
						
							| 
									
										
										
										
											2009-09-02 23:16:33 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-16 01:01:28 +01:00
										 |  |  |       $client1->execute("quake3 +set r_fullscreen 0 +set name Foo +connect server &"); | 
					
						
							|  |  |  |       $client2->execute("quake3 +set r_fullscreen 0 +set name Bar +connect server &"); | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-04 13:59:31 +00:00
										 |  |  |       $server->waitUntilSucceeds("grep -q 'Foo.*entered the game' /tmp/log"); | 
					
						
							|  |  |  |       $server->waitUntilSucceeds("grep -q 'Bar.*entered the game' /tmp/log"); | 
					
						
							| 
									
										
										
										
											2009-09-03 00:04:43 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-10 14:41:16 +00:00
										 |  |  |       $server->sleep(10); # wait for a while to get a nice screenshot | 
					
						
							| 
									
										
										
										
											2011-01-09 18:17:17 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       $client1->block(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-10 14:41:16 +00:00
										 |  |  |       $server->sleep(20); | 
					
						
							| 
									
										
										
										
											2010-01-05 11:35:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       $client1->screenshot("screen1"); | 
					
						
							|  |  |  |       $client2->screenshot("screen2"); | 
					
						
							| 
									
										
										
										
											2011-01-09 18:17:17 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       $client1->unblock(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-10 14:41:16 +00:00
										 |  |  |       $server->sleep(10); | 
					
						
							| 
									
										
										
										
											2011-01-09 18:17:17 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       $client1->screenshot("screen3"); | 
					
						
							|  |  |  |       $client2->screenshot("screen4"); | 
					
						
							| 
									
										
										
										
											2011-01-09 22:33:21 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       $client1->shutdown(); | 
					
						
							|  |  |  |       $client2->shutdown(); | 
					
						
							| 
									
										
										
										
											2012-10-24 18:11:21 +02:00
										 |  |  |       $server->stopJob("quake3-server"); | 
					
						
							| 
									
										
										
										
											2009-09-02 23:16:33 +00:00
										 |  |  |     '';
 | 
					
						
							| 
									
										
										
										
											2011-09-14 18:20:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-14 14:02:44 +02:00
										 |  |  | }) |