nixos/tests/v2ray: init

This commit is contained in:
Serval 2020-06-12 16:12:51 +08:00
parent 9a5a8949aa
commit 4ac99e76bc
No known key found for this signature in database
GPG Key ID: 4A2AAAA382F8294C
3 changed files with 89 additions and 1 deletions

View File

@ -362,6 +362,7 @@ in
unit-php = handleTest ./web-servers/unit-php.nix {};
upnp = handleTest ./upnp.nix {};
uwsgi = handleTest ./uwsgi.nix {};
v2ray = handleTest ./v2ray.nix {};
vault = handleTest ./vault.nix {};
victoriametrics = handleTest ./victoriametrics.nix {};
virtualbox = handleTestOn ["x86_64-linux"] ./virtualbox.nix {};

83
nixos/tests/v2ray.nix Normal file
View File

@ -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"
)
'';
})

View File

@ -1,4 +1,4 @@
{ lib, linkFarm, buildGoModule, runCommand, makeWrapper
{ lib, linkFarm, buildGoModule, runCommand, makeWrapper, nixosTests
# Version specific args
, version, src, assets, vendorSha256
@ -44,6 +44,10 @@ in runCommand "v2ray-${version}" {
maintainers = with lib.maintainers; [ servalcatty ];
};
passthru.tests = {
simple-vmess-proxy-test = nixosTests.v2ray;
};
} ''
for file in ${core}/bin/*; do
makeWrapper "$file" "$out/bin/$(basename "$file")" \