summary refs log tree commit diff
path: root/nixos/tests
diff options
context:
space:
mode:
authorArnold Krille <arnold@arnoldarts.de>2016-09-30 14:52:46 +0200
committerArnold Krille <arnold@arnoldarts.de>2016-10-08 22:28:49 +0200
commitcc91f274e0098a6642e88bf26c2c1a3eefdb806e (patch)
tree1aec6d0f336b7e0313206e3af7141eeb9328dac5 /nixos/tests
parentf0492bd53c3e78afc429f3b2f3792f13d6352cdb (diff)
downloadnixpkgs-cc91f274e0098a6642e88bf26c2c1a3eefdb806e.tar
nixpkgs-cc91f274e0098a6642e88bf26c2c1a3eefdb806e.tar.gz
nixpkgs-cc91f274e0098a6642e88bf26c2c1a3eefdb806e.tar.bz2
nixpkgs-cc91f274e0098a6642e88bf26c2c1a3eefdb806e.tar.lz
nixpkgs-cc91f274e0098a6642e88bf26c2c1a3eefdb806e.tar.xz
nixpkgs-cc91f274e0098a6642e88bf26c2c1a3eefdb806e.tar.zst
nixpkgs-cc91f274e0098a6642e88bf26c2c1a3eefdb806e.zip
containers: Improve device dependency tracking
Now the tracking works with aggregated devices on aggregated devices.

So container with physical device where the device is put in a bond
which is the basis for a bridge is now handled correctly.
Diffstat (limited to 'nixos/tests')
-rw-r--r--nixos/tests/containers-physical_interfaces.nix99
1 files changed, 83 insertions, 16 deletions
diff --git a/nixos/tests/containers-physical_interfaces.nix b/nixos/tests/containers-physical_interfaces.nix
index 4a53f8c824f..a3b0b29951b 100644
--- a/nixos/tests/containers-physical_interfaces.nix
+++ b/nixos/tests/containers-physical_interfaces.nix
@@ -23,11 +23,11 @@ import ./make-test.nix ({ pkgs, ...} : {
           };
         };
       };
-    client = { config, pkgs, ... }: {
-      virtualisation.memorySize = 256;
+    bridged = { config, pkgs, ... }: {
+      virtualisation.memorySize = 128;
       virtualisation.vlans = [ 1 ];
 
-      containers.client = {
+      containers.bridged = {
         privateNetwork = true;
         interfaces = [ "eth1" ];
 
@@ -40,27 +40,94 @@ import ./make-test.nix ({ pkgs, ...} : {
         };
       };
     };
+
+    bonded = { config, pkgs, ... }: {
+      virtualisation.memorySize = 128;
+      virtualisation.vlans = [ 1 ];
+
+      containers.bonded = {
+        privateNetwork = true;
+        interfaces = [ "eth1" ];
+
+        config = {
+          networking.bonds.bond0 = {
+            interfaces = [ "eth1" ];
+            mode = "active-backup";
+          };
+          networking.interfaces.bond0 = {
+            ip4 = [ { address = "10.10.0.3"; prefixLength = 24; } ];
+          };
+          networking.firewall.enable = false;
+        };
+      };
+    };
+
+    bridgedbond = { config, pkgs, ... }: {
+      virtualisation.memorySize = 128;
+      virtualisation.vlans = [ 1 ];
+
+      containers.bridgedbond = {
+        privateNetwork = true;
+        interfaces = [ "eth1" ];
+
+        config = {
+          networking.bonds.bond0 = {
+            interfaces = [ "eth1" ];
+            mode = "active-backup";
+          };
+          networking.bridges.br0.interfaces = [ "bond0" ];
+          networking.interfaces.br0 = {
+            ip4 = [ { address = "10.10.0.4"; prefixLength = 24; } ];
+          };
+          networking.firewall.enable = false;
+        };
+      };
+    };
   };
 
   testScript = ''
     startAll;
 
-    $server->waitForUnit("default.target");
-    $server->execute("ip link >&2");
+    subtest "prepare server", sub {
+      $server->waitForUnit("default.target");
+      $server->succeed("ip link show dev eth1 >&2");
+    };
+
+    subtest "simple physical interface", sub {
+      $server->succeed("nixos-container start server");
+      $server->waitForUnit("container\@server");
+      $server->succeed("systemctl -M server list-dependencies network-addresses-eth1.service >&2");
 
-    $server->succeed("ip link show dev eth1 >&2");
+      # The other tests will ping this container on its ip. Here we just check
+      # that the device is present in the container.
+      $server->succeed("nixos-container run server -- ip a show dev eth1 >&2");
+    };
 
-    $server->succeed("nixos-container start server");
-    $server->waitForUnit("container\@server");
-    $server->succeed("systemctl -M server list-dependencies network-addresses-eth1.service >&2");
+    subtest "physical device in bridge in container", sub {
+      $bridged->waitForUnit("default.target");
+      $bridged->succeed("nixos-container start bridged");
+      $bridged->waitForUnit("container\@bridged");
+      $bridged->succeed("systemctl -M bridged list-dependencies network-addresses-br0.service >&2");
+      $bridged->succeed("systemctl -M bridged status -n 30 -l network-addresses-br0.service");
+      $bridged->succeed("nixos-container run bridged -- ping -w 10 -c 1 -n 10.10.0.1");
+    };
 
-    $server->succeed("nixos-container run server -- ip a show dev eth1 >&2");
+    subtest "physical device in bond in container", sub {
+      $bonded->waitForUnit("default.target");
+      $bonded->succeed("nixos-container start bonded");
+      $bonded->waitForUnit("container\@bonded");
+      $bonded->succeed("systemctl -M bonded list-dependencies network-addresses-bond0 >&2");
+      $bonded->succeed("systemctl -M bonded status -n 30 -l network-addresses-bond0 >&2");
+      $bonded->succeed("nixos-container run bonded -- ping -w 10 -c 1 -n 10.10.0.1");
+    };
 
-    $client->waitForUnit("default.target");
-    $client->succeed("nixos-container start client");
-    $client->waitForUnit("container\@client");
-    $client->succeed("systemctl -M client list-dependencies network-addresses-br0.service >&2");
-    $client->succeed("systemctl -M client status -n 30 -l network-addresses-br0.service");
-    $client->succeed("nixos-container run client -- ping -w 10 -c 1 -n 10.10.0.1");
+    subtest "physical device in bond in bridge in container", sub {
+      $bridgedbond->waitForUnit("default.target");
+      $bridgedbond->succeed("nixos-container start bridgedbond");
+      $bridgedbond->waitForUnit("container\@bridgedbond");
+      $bridgedbond->succeed("systemctl -M bridgedbond list-dependencies network-addresses-br0.service >&2");
+      $bridgedbond->succeed("systemctl -M bridgedbond status -n 30 -l network-addresses-br0.service");
+      $bridgedbond->succeed("nixos-container run bridgedbond -- ping -w 10 -c 1 -n 10.10.0.1");
+    };
   '';
 })