nixpkgs-custom/nixos/tests/networking-proxy.nix

112 lines
4.2 KiB
Nix

# Test whether `networking.proxy' work as expected.
# TODO: use a real proxy node and put this test into networking.nix
# TODO: test whether nix tools work as expected behind a proxy
let default-config = {
imports = [ ./common/user-account.nix ];
services.xserver.enable = false;
virtualisation.memorySize = 128;
};
in import ./make-test.nix ({ pkgs, ...} : {
name = "networking-proxy";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ ];
};
nodes = {
# no proxy
machine =
{ config, pkgs, ... }:
default-config;
# proxy default
machine2 =
{ config, pkgs, ... }:
default-config // {
networking.proxy.default = "http://user:pass@host:port";
};
# specific proxy options
machine3 =
{ config, pkgs, ... }:
default-config //
{
networking.proxy = {
# useless because overriden by the next options
default = "http://user:pass@host:port";
# advanced proxy setup
httpProxy = "123-http://user:pass@http-host:port";
httpsProxy = "456-http://user:pass@https-host:port";
rsyncProxy = "789-http://user:pass@rsync-host:port";
ftpProxy = "101112-http://user:pass@ftp-host:port";
noProxy = "131415-127.0.0.1,localhost,.localdomain";
};
};
# mix default + proxy options
machine4 =
{ config, pkgs, ... }:
default-config // {
networking.proxy = {
# open for all *_proxy env var
default = "000-http://user:pass@default-host:port";
# except for those 2
rsyncProxy = "123-http://user:pass@http-host:port";
noProxy = "131415-127.0.0.1,localhost,.localdomain";
};
};
};
testScript =
''
startAll;
# no proxy at all
print $machine->execute("env | grep -i proxy");
print $machine->execute("su - alice -c 'env | grep -i proxy'");
$machine->mustFail("env | grep -i proxy");
$machine->mustFail("su - alice -c 'env | grep -i proxy'");
# Use a default proxy option
print $machine2->execute("env | grep -i proxy");
print $machine2->execute("su - alice -c 'env | grep -i proxy'");
$machine2->mustSucceed("env | grep -i proxy");
$machine2->mustSucceed("su - alice -c 'env | grep -i proxy'");
# explicitly set each proxy option
print $machine3->execute("env | grep -i proxy");
print $machine3->execute("su - alice -c 'env | grep -i proxy'");
$machine3->mustSucceed("env | grep -i http_proxy | grep 123");
$machine3->mustSucceed("env | grep -i https_proxy | grep 456");
$machine3->mustSucceed("env | grep -i rsync_proxy | grep 789");
$machine3->mustSucceed("env | grep -i ftp_proxy | grep 101112");
$machine3->mustSucceed("env | grep -i no_proxy | grep 131415");
$machine3->mustSucceed("su - alice -c 'env | grep -i http_proxy | grep 123'");
$machine3->mustSucceed("su - alice -c 'env | grep -i https_proxy | grep 456'");
$machine3->mustSucceed("su - alice -c 'env | grep -i rsync_proxy | grep 789'");
$machine3->mustSucceed("su - alice -c 'env | grep -i ftp_proxy | grep 101112'");
$machine3->mustSucceed("su - alice -c 'env | grep -i no_proxy | grep 131415'");
# set default proxy option + some other specifics
print $machine4->execute("env | grep -i proxy");
print $machine4->execute("su - alice -c 'env | grep -i proxy'");
$machine4->mustSucceed("env | grep -i http_proxy | grep 000");
$machine4->mustSucceed("env | grep -i https_proxy | grep 000");
$machine4->mustSucceed("env | grep -i rsync_proxy | grep 123");
$machine4->mustSucceed("env | grep -i ftp_proxy | grep 000");
$machine4->mustSucceed("env | grep -i no_proxy | grep 131415");
$machine4->mustSucceed("su - alice -c 'env | grep -i http_proxy | grep 000'");
$machine4->mustSucceed("su - alice -c 'env | grep -i https_proxy | grep 000'");
$machine4->mustSucceed("su - alice -c 'env | grep -i rsync_proxy | grep 123'");
$machine4->mustSucceed("su - alice -c 'env | grep -i ftp_proxy | grep 000'");
$machine4->mustSucceed("su - alice -c 'env | grep -i no_proxy | grep 131415'");
'';
})