tests: test newly added interfaces individually
authorWolfgang Bumiller <w.bumiller@proxmox.com>
Tue, 10 Jul 2018 10:27:29 +0000 (12:27 +0200)
committerWolfgang Bumiller <w.bumiller@proxmox.com>
Tue, 10 Jul 2018 10:34:10 +0000 (12:34 +0200)
And add eth2/3 to /proc/net/dev, that way we don't need to
create them "virtually" (which we shouldn't, for physical
interfaces).

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
test/etc_network_interfaces/t.create_network.pl

index 8f4974a..b363f16 100644 (file)
@@ -1,10 +1,16 @@
 save('proc_net_dev', <<'/proc/net/dev');
 eth0:
 eth1:
+eth2:
+eth3:
 /proc/net/dev
 
 r(load('brbase'));
 
+#
+# Variables used for the various interfaces:
+#
+
 my $ip = '192.168.0.2';
 my $nm = '255.255.255.0';
 my $gw = '192.168.0.1';
@@ -13,6 +19,26 @@ my $physdev = 'eth0';
 my $remoteip1 = '192.168.0.3';
 my $remoteip2 = '192.168.0.4';
 
+#
+# Hunk for the default bridge of the 'brbase' configuration
+#
+
+my $vmbr0_part = <<"PART";
+auto vmbr0
+iface vmbr0 inet static
+       address  10.0.0.2
+       netmask  255.255.255.0
+       gateway  10.0.0.1
+       bridge-ports eth0
+       bridge-stp off
+       bridge-fd 0
+PART
+chomp $vmbr0_part;
+
+#
+# Configure eth1 statically, store its expected interfaces hunk in $eth1_part
+# and test!
+#
 
 $config->{ifaces}->{eth1} = {
     type => 'eth',
@@ -24,41 +50,142 @@ $config->{ifaces}->{eth1} = {
     autostart => 1
 };
 
-$config->{ifaces}->{eth2} = {
-    type => 'eth',
+my $eth1_part = <<"PART";
+auto eth1
+iface eth1 inet static
+       address  $ip
+       netmask  $nm
+       gateway  $gw
+PART
+chomp $eth1_part;
+
+expect load('loopback') . <<"CHECK";
+source-directory interfaces.d
+
+iface eth0 inet manual
+
+$eth1_part
+
+iface eth2 inet manual
+
+iface eth3 inet manual
+
+$vmbr0_part
+
+CHECK
+
+#
+# Add a bond for eth2 & 3 and check the new output
+#
+
+$config->{ifaces}->{bond0} = {
+    type => 'bond',
+    mtu => 1400,
+    slaves => 'eth2 eth3',
+    bond_mode => '802.3ad',
+    bond_xmit_hash_policy => 'layer3+4',
+    bond_miimon => 100,
     method => 'manual',
     families => ['inet'],
     autostart => 1
 };
+my $bond0_part = <<"PART";
+auto bond0
+iface bond0 inet manual
+       bond-slaves eth2 eth3
+       bond-miimon 100
+       bond-mode 802.3ad
+       bond-xmit-hash-policy layer3+4
+       mtu 1400
+PART
+chomp $bond0_part;
 
-$config->{ifaces}->{eth3} = {
-    type => 'eth',
+expect load('loopback') . <<"CHECK";
+source-directory interfaces.d
+
+iface eth0 inet manual
+
+$eth1_part
+
+iface eth2 inet manual
+
+iface eth3 inet manual
+
+$bond0_part
+
+$vmbr0_part
+
+CHECK
+
+#
+# Add vxlan1 and 2
+#
+
+$config->{ifaces}->{vxlan1} = {
+    type => 'vxlan',
     method => 'manual',
     families => ['inet'],
+    'vxlan-id' => 1,
+    'vxlan-svcnodeip' => $svcnodeip,
+    'vxlan-physdev' => $physdev,
     autostart => 1
 };
 
-$config->{ifaces}->{bond0} = {
-    type => 'bond',
-    mtu => 1400,
-    slaves => 'eth2 eth3',
-    bond_mode => '802.3ad',
-    bond_xmit_hash_policy => 'layer3+4',
-    bond_miimon => 100,
+$config->{ifaces}->{vxlan2} = {
+    type => 'vxlan',
     method => 'manual',
     families => ['inet'],
+    'vxlan-id' => 2,
+    'vxlan-local-tunnelip' => $ip,
     autostart => 1
 };
 
+my $vxlan12_part = <<"PART";
+auto vxlan1
+iface vxlan1 inet manual
+       vxlan-id 1
+       vxlan-svcnodeip $svcnodeip
+       vxlan-physdev $physdev
+
+auto vxlan2
+iface vxlan2 inet manual
+       vxlan-id 2
+       vxlan-local-tunnelip $ip
+PART
+chomp $vxlan12_part;
+
+expect load('loopback') . <<"CHECK";
+source-directory interfaces.d
+
+iface eth0 inet manual
+
+$eth1_part
+
+iface eth2 inet manual
+
+iface eth3 inet manual
+
+$bond0_part
+
+$vmbr0_part
+
+$vxlan12_part
+
+CHECK
+
+#
+# Add vxlan3 and 3 bridges using vxlan1..3
+#
+
 $config->{ifaces}->{vmbr1} = {
     mtu => 1400,
     type => 'bridge',
     method => 'manual',
     families => ['inet'],
-    bridge_stp => off,
+    bridge_stp => 'off',
     bridge_fd => 0,
-    bridge_ports => vxlan1,
-    bridge_vlan_aware => yes,
+    bridge_ports => 'vxlan1',
+    bridge_vlan_aware => 'yes',
     autostart => 1
 };
 
@@ -66,9 +193,9 @@ $config->{ifaces}->{vmbr2} = {
     type => 'bridge',
     method => 'manual',
     families => ['inet'],
-    bridge_stp => off,
+    bridge_stp => 'off',
     bridge_fd => 0,
-    bridge_ports => vxlan2,
+    bridge_ports => 'vxlan2',
     autostart => 1
 };
 
@@ -76,36 +203,39 @@ $config->{ifaces}->{vmbr3} = {
     type => 'bridge',
     method => 'manual',
     families => ['inet'],
-    bridge_stp => off,
+    bridge_stp => 'off',
     bridge_fd => 0,
-    bridge_ports => vxlan3,
-    bridge_vlan_aware => yes,
+    bridge_ports => 'vxlan3',
+    bridge_vlan_aware => 'yes',
     bridge_vids => '2-10',
     autostart => 1
 };
 
-$config->{ifaces}->{vxlan1} = {
-    type => 'vxlan',
-    method => 'manual',
-    families => ['inet'],
-    'vxlan-id' => 1,
-    'vxlan-svcnodeip' => $svcnodeip,
-    'vxlan-physdev' => $physdev,
-    autostart => 1
-};
+my $vmbr123_part = <<"PART";
+auto vmbr1
+iface vmbr1 inet manual
+       bridge-ports vxlan1
+       bridge-stp off
+       bridge-fd 0
+       bridge-vlan-aware yes
+       bridge-vids 2-4094
+       mtu 1400
 
-$config->{ifaces}->{vxlan2} = {
-    type => 'vxlan',
-    method => 'manual',
-    families => ['inet'],
-    'vxlan-id' => 2,
-    'vxlan-local-tunnelip' => $ip,
-    'bridge-learning' => 'off',
-    'bridge-arp-nd-suppress' => 'on',
-    'bridge-unicast-flood' => 'off',
-    'bridge-multicast-flood' => 'off',
-    autostart => 1
-};
+auto vmbr2
+iface vmbr2 inet manual
+       bridge-ports vxlan2
+       bridge-stp off
+       bridge-fd 0
+
+auto vmbr3
+iface vmbr3 inet manual
+       bridge-ports vxlan3
+       bridge-stp off
+       bridge-fd 0
+       bridge-vlan-aware yes
+       bridge-vids 2-10
+PART
+chomp $vmbr123_part;
 
 $config->{ifaces}->{vxlan3} = {
     type => 'vxlan',
@@ -117,6 +247,51 @@ $config->{ifaces}->{vxlan3} = {
     autostart => 1
 };
 
+my $vx = $config->{ifaces}->{vxlan2};
+$vx->{'bridge-learning'} = 'off';
+$vx->{'bridge-arp-nd-suppress'} = 'on';
+$vx->{'bridge-unicast-flood'} = 'off';
+$vx->{'bridge-multicast-flood'} = 'off';
+my $vxlan123_part = $vxlan12_part ."\n" . <<"PART";
+       bridge-arp-nd-suppress on
+       bridge-learning off
+       bridge-multicast-flood off
+       bridge-unicast-flood off
+
+auto vxlan3
+iface vxlan3 inet manual
+       vxlan-id 3
+       vxlan-remoteip $remoteip1
+       vxlan-remoteip $remoteip2
+       bridge-access 3
+PART
+chomp $vxlan123_part;
+
+expect load('loopback') . <<"CHECK";
+source-directory interfaces.d
+
+iface eth0 inet manual
+
+$eth1_part
+
+iface eth2 inet manual
+
+iface eth3 inet manual
+
+$bond0_part
+
+$vmbr0_part
+
+$vmbr123_part
+
+$vxlan123_part
+
+CHECK
+
+#
+# Now add vlans on all types of interfaces: vmbr1, bond0 and eth1
+#
+
 $config->{ifaces}->{'vmbr1.100'} = {
     type => 'vlan',
     mtu => 1300,
@@ -146,98 +321,46 @@ source-directory interfaces.d
 
 iface eth0 inet manual
 
-auto eth1
-iface eth1 inet static
-       address  $ip
-       netmask  $nm
-       gateway  $gw
+$eth1_part
 
-auto eth2
 iface eth2 inet manual
 
-auto eth3
 iface eth3 inet manual
 
 auto eth1.100
 iface eth1.100 inet manual
        mtu 1400
 
-auto bond0
-iface bond0 inet manual
-       bond-slaves eth2 eth3
-       bond-miimon 100
-       bond-mode 802.3ad
-       bond-xmit-hash-policy layer3+4
-       mtu 1400
+$bond0_part
 
 auto bond0.100
 iface bond0.100 inet manual
        mtu 1300
 
-auto vmbr0
-iface vmbr0 inet static
-       address  10.0.0.2
-       netmask  255.255.255.0
-       gateway  10.0.0.1
-       bridge-ports eth0
-       bridge-stp off
-       bridge-fd 0
-
-auto vmbr1
-iface vmbr1 inet manual
-       bridge-ports vxlan1
-       bridge-stp off
-       bridge-fd 0
-       bridge-vlan-aware yes
-       bridge-vids 2-4094
-       mtu 1400
-
-auto vmbr2
-iface vmbr2 inet manual
-       bridge-ports vxlan2
-       bridge-stp off
-       bridge-fd 0
+$vmbr0_part
 
-auto vmbr3
-iface vmbr3 inet manual
-       bridge-ports vxlan3
-       bridge-stp off
-       bridge-fd 0
-       bridge-vlan-aware yes
-       bridge-vids 2-10
+$vmbr123_part
 
 auto vmbr1.100
 iface vmbr1.100 inet manual
        mtu 1300
 
-auto vxlan1
-iface vxlan1 inet manual
-       vxlan-id 1
-       vxlan-svcnodeip $svcnodeip
-       vxlan-physdev $physdev
-
-auto vxlan2
-iface vxlan2 inet manual
-       vxlan-id 2
-       vxlan-local-tunnelip $ip
-       bridge-arp-nd-suppress on
-       bridge-learning off
-       bridge-multicast-flood off
-       bridge-unicast-flood off
-
-auto vxlan3
-iface vxlan3 inet manual
-       vxlan-id 3
-       vxlan-remoteip $remoteip1
-       vxlan-remoteip $remoteip2
-       bridge-access 3
+$vxlan123_part
 
 CHECK
 
+#
+# Now check the new config for idempotency:
+#
+
 save('if', w());
 r(load('if'));
 expect load('if');
 
+#
+# Check a brbase with an ipv6 address on eth1
+#
+
 r(load('brbase'));
 
 my $ip = 'fc05::2';
@@ -254,7 +377,6 @@ $config->{ifaces}->{eth1} = {
     autostart => 1
 };
 
-
 expect load('loopback') . <<"CHECK";
 source-directory interfaces.d
 
@@ -266,6 +388,10 @@ iface eth1 inet6 static
        netmask  $nm
        gateway  $gw
 
+iface eth2 inet manual
+
+iface eth3 inet manual
+
 auto vmbr0
 iface vmbr0 inet static
        address  10.0.0.2