diff options
author | Alyssa Ross <hi@alyssa.is> | 2019-01-07 02:18:36 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2019-01-07 02:18:47 +0000 |
commit | 36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2 (patch) | |
tree | b3faaf573407b32aa645237a4d16b82778a39a92 /nixpkgs/nixos/tests/ipv6.nix | |
parent | 4e31070265257dc67d120c27e0f75c2344fdfa9a (diff) | |
parent | abf060725d7614bd3b9f96764262dfbc2f9c2199 (diff) | |
download | nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.gz nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.bz2 nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.lz nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.xz nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.tar.zst nixlib-36f56d99fa0a0765c9f1de4a5f17a9b05830c3f2.zip |
Add 'nixpkgs/' from commit 'abf060725d7614bd3b9f96764262dfbc2f9c2199'
git-subtree-dir: nixpkgs git-subtree-mainline: 4e31070265257dc67d120c27e0f75c2344fdfa9a git-subtree-split: abf060725d7614bd3b9f96764262dfbc2f9c2199
Diffstat (limited to 'nixpkgs/nixos/tests/ipv6.nix')
-rw-r--r-- | nixpkgs/nixos/tests/ipv6.nix | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/nixpkgs/nixos/tests/ipv6.nix b/nixpkgs/nixos/tests/ipv6.nix new file mode 100644 index 000000000000..97f348a9beeb --- /dev/null +++ b/nixpkgs/nixos/tests/ipv6.nix @@ -0,0 +1,79 @@ +# Test of IPv6 functionality in NixOS, including whether router +# solicication/advertisement using radvd works. + +import ./make-test.nix ({ pkgs, ...} : { + name = "ipv6"; + meta = with pkgs.stdenv.lib.maintainers; { + maintainers = [ eelco chaoflow ]; + }; + + nodes = + { client = { ... }: { }; + + server = + { ... }: + { services.httpd.enable = true; + services.httpd.adminAddr = "foo@example.org"; + networking.firewall.allowedTCPPorts = [ 80 ]; + }; + + router = + { ... }: + { services.radvd.enable = true; + services.radvd.config = + '' + interface eth1 { + AdvSendAdvert on; + # ULA prefix (RFC 4193). + prefix fd60:cc69:b537:1::/64 { }; + }; + ''; + }; + }; + + testScript = + '' + # Start the router first so that it respond to router solicitations. + $router->waitForUnit("radvd"); + + startAll; + + $client->waitForUnit("network.target"); + $server->waitForUnit("network.target"); + $server->waitForUnit("httpd.service"); + + # Wait until the given interface has a non-tentative address of + # the desired scope (i.e. has completed Duplicate Address + # Detection). + sub waitForAddress { + my ($machine, $iface, $scope) = @_; + $machine->waitUntilSucceeds("[ `ip -o -6 addr show dev $iface scope $scope | grep -v tentative | wc -l` -ge 1 ]"); + my $ip = (split /[ \/]+/, $machine->succeed("ip -o -6 addr show dev $iface scope $scope"))[3]; + $machine->log("$scope address on $iface is $ip"); + return $ip; + } + + subtest "loopback address", sub { + $client->succeed("ping -c 1 ::1 >&2"); + $client->fail("ping -c 1 ::2 >&2"); + }; + + subtest "local link addressing", sub { + my $clientIp = waitForAddress $client, "eth1", "link"; + my $serverIp = waitForAddress $server, "eth1", "link"; + $client->succeed("ping -c 1 $clientIp%eth1 >&2"); + $client->succeed("ping -c 1 $serverIp%eth1 >&2"); + }; + + subtest "global addressing", sub { + my $clientIp = waitForAddress $client, "eth1", "global"; + my $serverIp = waitForAddress $server, "eth1", "global"; + $client->succeed("ping -c 1 $clientIp >&2"); + $client->succeed("ping -c 1 $serverIp >&2"); + $client->succeed("curl --fail -g http://[$serverIp]"); + $client->fail("curl --fail -g http://[$clientIp]"); + }; + + # TODO: test reachability of a machine on another network. + ''; +}) |