aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/tests/v2ray.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/tests/v2ray.nix')
-rw-r--r--nixpkgs/nixos/tests/v2ray.nix83
1 files changed, 83 insertions, 0 deletions
diff --git a/nixpkgs/nixos/tests/v2ray.nix b/nixpkgs/nixos/tests/v2ray.nix
new file mode 100644
index 00000000000..f1b2570cc86
--- /dev/null
+++ b/nixpkgs/nixos/tests/v2ray.nix
@@ -0,0 +1,83 @@
+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"
+ )
+ '';
+})