| 
									
										
										
										
											2014-11-19 20:13:54 +01:00
										 |  |  | # Test whether `networking.proxy' work as expected. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # TODO: use a real proxy node and put this test into networking.nix | 
					
						
							|  |  |  | # TODO: test whether nix tools work as expected behind a proxy | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let default-config = { | 
					
						
							|  |  |  |         imports = [ ./common/user-account.nix ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         services.xserver.enable = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         virtualisation.memorySize = 128; | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2015-07-12 12:09:40 +02:00
										 |  |  | in import ./make-test.nix ({ pkgs, ...} : { | 
					
						
							| 
									
										
										
										
											2014-11-19 20:13:54 +01:00
										 |  |  |   name = "networking-proxy"; | 
					
						
							| 
									
										
										
										
											2015-07-12 12:09:40 +02:00
										 |  |  |   meta = with pkgs.stdenv.lib.maintainers; { | 
					
						
							|  |  |  |     maintainers = [  ]; | 
					
						
							|  |  |  |   }; | 
					
						
							| 
									
										
										
										
											2014-11-19 20:13:54 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   nodes = { | 
					
						
							|  |  |  |     # no proxy | 
					
						
							|  |  |  |     machine = | 
					
						
							|  |  |  |       { config, pkgs, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       default-config; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # proxy default | 
					
						
							|  |  |  |     machine2 = | 
					
						
							|  |  |  |       { config, pkgs, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       default-config // { | 
					
						
							|  |  |  |         networking.proxy.default = "http://user:pass@host:port"; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # specific proxy options | 
					
						
							|  |  |  |     machine3 = | 
					
						
							|  |  |  |       { config, pkgs, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       default-config // | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         networking.proxy = { | 
					
						
							|  |  |  |           # useless because overriden by the next options | 
					
						
							|  |  |  |           default = "http://user:pass@host:port"; | 
					
						
							|  |  |  |           # advanced proxy setup | 
					
						
							|  |  |  |           httpProxy = "123-http://user:pass@http-host:port"; | 
					
						
							|  |  |  |           httpsProxy = "456-http://user:pass@https-host:port"; | 
					
						
							|  |  |  |           rsyncProxy = "789-http://user:pass@rsync-host:port"; | 
					
						
							|  |  |  |           ftpProxy = "101112-http://user:pass@ftp-host:port"; | 
					
						
							|  |  |  |           noProxy = "131415-127.0.0.1,localhost,.localdomain"; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # mix default + proxy options | 
					
						
							|  |  |  |     machine4 = | 
					
						
							|  |  |  |       { config, pkgs, ... }: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       default-config // { | 
					
						
							|  |  |  |         networking.proxy = { | 
					
						
							|  |  |  |           # open for all *_proxy env var | 
					
						
							|  |  |  |           default = "000-http://user:pass@default-host:port"; | 
					
						
							|  |  |  |           # except for those 2 | 
					
						
							|  |  |  |           rsyncProxy = "123-http://user:pass@http-host:port"; | 
					
						
							|  |  |  |           noProxy = "131415-127.0.0.1,localhost,.localdomain"; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   testScript = | 
					
						
							|  |  |  |     ''
 | 
					
						
							|  |  |  |       startAll; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # no proxy at all | 
					
						
							|  |  |  |       print $machine->execute("env | grep -i proxy"); | 
					
						
							|  |  |  |       print $machine->execute("su - alice -c 'env | grep -i proxy'"); | 
					
						
							|  |  |  |       $machine->mustFail("env | grep -i proxy"); | 
					
						
							|  |  |  |       $machine->mustFail("su - alice -c 'env | grep -i proxy'"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # Use a default proxy option | 
					
						
							|  |  |  |       print $machine2->execute("env | grep -i proxy"); | 
					
						
							|  |  |  |       print $machine2->execute("su - alice -c 'env | grep -i proxy'"); | 
					
						
							|  |  |  |       $machine2->mustSucceed("env | grep -i proxy"); | 
					
						
							|  |  |  |       $machine2->mustSucceed("su - alice -c 'env | grep -i proxy'"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # explicitly set each proxy option | 
					
						
							|  |  |  |       print $machine3->execute("env | grep -i proxy"); | 
					
						
							|  |  |  |       print $machine3->execute("su - alice -c 'env | grep -i proxy'"); | 
					
						
							|  |  |  |       $machine3->mustSucceed("env | grep -i http_proxy | grep 123"); | 
					
						
							|  |  |  |       $machine3->mustSucceed("env | grep -i https_proxy | grep 456"); | 
					
						
							|  |  |  |       $machine3->mustSucceed("env | grep -i rsync_proxy | grep 789"); | 
					
						
							|  |  |  |       $machine3->mustSucceed("env | grep -i ftp_proxy | grep 101112"); | 
					
						
							|  |  |  |       $machine3->mustSucceed("env | grep -i no_proxy | grep 131415"); | 
					
						
							|  |  |  |       $machine3->mustSucceed("su - alice -c 'env | grep -i http_proxy | grep 123'"); | 
					
						
							|  |  |  |       $machine3->mustSucceed("su - alice -c 'env | grep -i https_proxy | grep 456'"); | 
					
						
							|  |  |  |       $machine3->mustSucceed("su - alice -c 'env | grep -i rsync_proxy | grep 789'"); | 
					
						
							|  |  |  |       $machine3->mustSucceed("su - alice -c 'env | grep -i ftp_proxy | grep 101112'"); | 
					
						
							|  |  |  |       $machine3->mustSucceed("su - alice -c 'env | grep -i no_proxy | grep 131415'"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # set default proxy option + some other specifics | 
					
						
							|  |  |  |       print $machine4->execute("env | grep -i proxy"); | 
					
						
							|  |  |  |       print $machine4->execute("su - alice -c 'env | grep -i proxy'"); | 
					
						
							|  |  |  |       $machine4->mustSucceed("env | grep -i http_proxy | grep 000"); | 
					
						
							|  |  |  |       $machine4->mustSucceed("env | grep -i https_proxy | grep 000"); | 
					
						
							|  |  |  |       $machine4->mustSucceed("env | grep -i rsync_proxy | grep 123"); | 
					
						
							|  |  |  |       $machine4->mustSucceed("env | grep -i ftp_proxy | grep 000"); | 
					
						
							|  |  |  |       $machine4->mustSucceed("env | grep -i no_proxy | grep 131415"); | 
					
						
							|  |  |  |       $machine4->mustSucceed("su - alice -c 'env | grep -i http_proxy | grep 000'"); | 
					
						
							|  |  |  |       $machine4->mustSucceed("su - alice -c 'env | grep -i https_proxy | grep 000'"); | 
					
						
							|  |  |  |       $machine4->mustSucceed("su - alice -c 'env | grep -i rsync_proxy | grep 123'"); | 
					
						
							|  |  |  |       $machine4->mustSucceed("su - alice -c 'env | grep -i ftp_proxy | grep 000'"); | 
					
						
							|  |  |  |       $machine4->mustSucceed("su - alice -c 'env | grep -i no_proxy | grep 131415'"); | 
					
						
							|  |  |  |     '';
 | 
					
						
							| 
									
										
										
										
											2015-07-12 12:09:40 +02:00
										 |  |  | }) |