84 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
		
		
			
		
	
	
			84 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
|   | import ./make-test-python.nix ({ lib, pkgs, ... }: let | ||
|  | 
 | ||
|  |   v2rayUser = { | ||
|  |     # A random UUID. | ||
|  |     id = "a6a46834-2150-45f8-8364-0f6f6ab32384"; | ||
|  |     alterId = 4; | ||
|  |   }; | ||
|  | 
 | ||
|  |   # 1080 [http proxy] -> 1081 [vmess] -> direct | ||
|  |   v2rayConfig = { | ||
|  |     inbounds = [ | ||
|  |       { | ||
|  |         tag = "http_in"; | ||
|  |         port = 1080; | ||
|  |         listen = "127.0.0.1"; | ||
|  |         protocol = "http"; | ||
|  |       } | ||
|  |       { | ||
|  |         tag = "vmess_in"; | ||
|  |         port = 1081; | ||
|  |         listen = "127.0.0.1"; | ||
|  |         protocol = "vmess"; | ||
|  |         settings.clients = [v2rayUser]; | ||
|  |       } | ||
|  |     ]; | ||
|  |     outbounds = [ | ||
|  |       { | ||
|  |         tag = "vmess_out"; | ||
|  |         protocol = "vmess"; | ||
|  |         settings.vnext = [{ | ||
|  |           address = "127.0.0.1"; | ||
|  |           port = 1081; | ||
|  |           users = [v2rayUser]; | ||
|  |         }]; | ||
|  |       } | ||
|  |       { | ||
|  |         tag = "direct"; | ||
|  |         protocol = "freedom"; | ||
|  |       } | ||
|  |     ]; | ||
|  |     routing.rules = [ | ||
|  |       { | ||
|  |         type = "field"; | ||
|  |         inboundTag = "http_in"; | ||
|  |         outboundTag = "vmess_out"; | ||
|  |       } | ||
|  |       { | ||
|  |         type = "field"; | ||
|  |         inboundTag = "vmess_in"; | ||
|  |         outboundTag = "direct"; | ||
|  |       } | ||
|  |     ]; | ||
|  |   }; | ||
|  | 
 | ||
|  | in { | ||
|  |   name = "v2ray"; | ||
|  |   meta = with lib.maintainers; { | ||
|  |     maintainers = [ servalcatty ]; | ||
|  |   }; | ||
|  |   machine = { pkgs, ... }: { | ||
|  |     environment.systemPackages = [ pkgs.curl ]; | ||
|  |     services.v2ray = { | ||
|  |       enable = true; | ||
|  |       config = v2rayConfig; | ||
|  |     }; | ||
|  |     services.httpd = { | ||
|  |       enable = true; | ||
|  |       adminAddr = "foo@example.org"; | ||
|  |     }; | ||
|  |   }; | ||
|  | 
 | ||
|  |   testScript = ''
 | ||
|  |     start_all() | ||
|  | 
 | ||
|  |     machine.wait_for_unit("httpd.service") | ||
|  |     machine.wait_for_unit("v2ray.service") | ||
|  |     machine.wait_for_open_port(80) | ||
|  |     machine.wait_for_open_port(1080) | ||
|  |     machine.succeed( | ||
|  |         "curl --fail --max-time 10 --proxy http://localhost:1080 http://localhost" | ||
|  |     ) | ||
|  |   '';
 | ||
|  | }) |