nixos/mihomo: add tests

This commit is contained in:
Guanran Wang 2024-02-10 22:43:17 +08:00
parent a5d09a41b0
commit 84bbdc744e
No known key found for this signature in database
3 changed files with 51 additions and 0 deletions

View file

@ -528,6 +528,7 @@ in {
memcached = handleTest ./memcached.nix {};
merecat = handleTest ./merecat.nix {};
metabase = handleTest ./metabase.nix {};
mihomo = handleTest ./mihomo.nix {};
mindustry = handleTest ./mindustry.nix {};
minecraft = handleTest ./minecraft.nix {};
minecraft-server = handleTest ./minecraft-server.nix {};

44
nixos/tests/mihomo.nix Normal file
View file

@ -0,0 +1,44 @@
import ./make-test-python.nix ({ pkgs, ... }: {
name = "mihomo";
meta.maintainers = with pkgs.lib.maintainers; [ Guanran928 ];
nodes.machine = {
environment.systemPackages = [ pkgs.curl ];
services.nginx = {
enable = true;
statusPage = true;
};
services.mihomo = {
enable = true;
configFile = pkgs.writeTextFile {
name = "config.yaml";
text = ''
mixed-port: 7890
external-controller: 127.0.0.1:9090
authentication:
- "user:supersecret"
'';
};
};
};
testScript = ''
# Wait until it starts
machine.wait_for_unit("nginx.service")
machine.wait_for_unit("mihomo.service")
machine.wait_for_open_port(80)
machine.wait_for_open_port(7890)
machine.wait_for_open_port(9090)
# Proxy
machine.succeed("curl --fail --max-time 10 --proxy http://user:supersecret@localhost:7890 http://localhost")
machine.succeed("curl --fail --max-time 10 --proxy socks5://user:supersecret@localhost:7890 http://localhost")
machine.fail("curl --fail --max-time 10 --proxy http://user:supervillain@localhost:7890 http://localhost")
machine.fail("curl --fail --max-time 10 --proxy socks5://user:supervillain@localhost:7890 http://localhost")
# Web UI
machine.succeed("curl --fail http://localhost:9090") == '{"hello":"clash"}'
'';
})

View file

@ -1,6 +1,7 @@
{ lib
, fetchFromGitHub
, buildGoModule
, nixosTests
}:
buildGoModule rec {
@ -31,6 +32,11 @@ buildGoModule rec {
# network required
doCheck = false;
passthru.tests = {
mihomo = nixosTests.mihomo;
};
meta = with lib; {
description = "A rule-based tunnel in Go";
homepage = "https://github.com/MetaCubeX/mihomo";