45 lines
1.4 KiB
Nix
45 lines
1.4 KiB
Nix
|
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"}'
|
||
|
'';
|
||
|
})
|