]> git.proxmox.com Git - pve-common.git/blob - test/etc_network_interfaces/t.list-interfaces.pl
test: list ifaces: fix indentation of expected structure
[pve-common.git] / test / etc_network_interfaces / t.list-interfaces.pl
1 # Assuming eth0..3 and eth100
2 # eth0 is part of vmbr0, eth100 is part of the OVS bridge vmbr1
3 # vmbr0 has ipv4 and ipv6, OVS only ipv4
4 #
5 # eth1..3 are completely un-configured as if the cards had just been physically
6 # plugged in.
7 # The expected behavior is to notice their existance and treat them as manually
8 # configured interfaces.
9 # Saving the file after reading would add the corresponding 'manual' lines.
10 save('proc_net_dev', <<'/proc/net/dev');
11 eth0:
12 eth1:
13 eth2:
14 eth3:
15 eth100:
16 /proc/net/dev
17
18 my %wanted = (
19 vmbr0 => {
20 address => '192.168.1.2/24',
21 gateway => '192.168.1.1',
22 address6 => 'fc05::1:1/112',
23 },
24 vmbr1 => {
25 address => '10.0.0.5/24',
26 },
27 );
28
29 save('interfaces', <<"/etc/network/interfaces");
30 auto lo
31 iface lo inet loopback
32
33 source-directory interfaces.d
34
35 iface eth0 inet manual
36
37 allow-vmbr1 eth100
38 iface eth100 inet manual
39 ovs_type OVSPort
40 ovs_bridge vmbr1
41
42 auto vmbr0
43 iface vmbr0 inet static
44 address 192.168.1.2
45 netmask 24
46 gateway $wanted{vmbr0}->{gateway}
47 bridge_ports eth0
48 bridge_stp off
49 bridge_fd 0
50
51 iface vmbr0 inet6 static
52 address fc05::1:1
53 netmask 112
54
55 source-directory before-ovs.d
56
57 allow-ovs vmbr1
58 iface vmbr1 inet static
59 address 10.0.0.5
60 netmask 255.255.255.0
61 ovs_type OVSBridge
62 ovs_ports eth100
63
64 source after-ovs
65
66 /etc/network/interfaces
67
68 r(load('interfaces'));
69 save('2', w());
70
71 my $ifaces = $config->{ifaces};
72
73 # check defined interfaces
74 defined($ifaces->{"eth$_"})
75 or die "missing interface: eth$_\n" foreach (0, 1, 2, 3, 100);
76
77 # check configuration
78 foreach my $ifname (keys %wanted) {
79 my $if = $wanted{$ifname};
80 $ifaces->{$ifname}->{$_} eq $if->{$_}
81 or die "unexpected $_ for interface $ifname: \""
82 . $ifaces->{$ifname}->{$_}
83 . "\", expected: \"$if->{$_}\"\n"
84 foreach (keys %$if);
85 }
86
87 my $ck = sub {
88 my ($i, $v, $e) = @_;
89 $ifaces->{$i}->{$v} eq $e
90 or die "$i variable $v: got \"$ifaces->{$i}->{$v}\", expected: $e\n";
91 };
92 $ck->('vmbr0', type => 'bridge');
93 $ck->('vmbr1', type => 'OVSBridge');
94 $ck->('vmbr1', ovs_type => 'OVSBridge');
95 $ck->('vmbr1', ovs_ports => 'eth100');
96 $ck->("eth$_", type => 'eth') foreach (0, 1, 2, 3);
97 $ck->('eth100', type => 'OVSPort');
98 $ck->('eth100', ovs_type => 'OVSPort');
99 $ck->('eth100', ovs_bridge => 'vmbr1');
100
101 my @f100 = sort @{$ifaces->{vmbr0}->{families}};
102
103 die "invalid families defined for vmbr0"
104 if (scalar(@f100) != 2) || ($f100[0] ne 'inet') || ($f100[1] ne 'inet6');
105
106 # idempotency
107 r(w());
108 expect load('2');
109
110 1;