1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
#!/usr/bin/perl
use strict;
use warnings;
use lib qw(..);
use File::Slurp;
use Test::More;
use Test::MockModule;
use PVE::Network::SDN;
use PVE::Network::SDN::Zones;
use PVE::Network::SDN::Controllers;
use PVE::INotify;
sub read_sdn_config {
my ($file) = @_;
# Read structure back in again
open my $in, '<', $file or die $!;
my $sdn_config;
{
local $/; # slurp mode
$sdn_config = eval <$in>;
}
close $in;
return $sdn_config;
}
my @tests = grep { -d } glob './zones/*/*';
foreach my $test (@tests) {
my $sdn_config = read_sdn_config("./$test/sdn_config");
open(my $fh1, '<', "./$test/interfaces") or die "can't read interfaces file - $!";
my $interfaces_config = PVE::INotify::__read_etc_network_interfaces($fh1, undef, undef);
close $fh1;
my $pve_common_inotify;
$pve_common_inotify = Test::MockModule->new('PVE::INotify');
$pve_common_inotify->mock(
nodename => sub {
return 'localhost';
},
read_file => sub {
return $interfaces_config;
},
);
my $pve_sdn_subnets;
$pve_sdn_subnets = Test::MockModule->new('PVE::Network::SDN::Subnets');
$pve_sdn_subnets->mock(
config => sub {
return $sdn_config->{subnets};
},
);
my $pve_sdn_zones_plugin;
$pve_sdn_zones_plugin = Test::MockModule->new('PVE::Network::SDN::Zones::Plugin');
$pve_sdn_zones_plugin->mock(
get_local_route_ip => sub {
my $outiface = "vmbr0";
my $outip = $interfaces_config->{ifaces}->{$outiface}->{address};
return ($outip, $outiface);
},
is_vlanaware => sub {
return $interfaces_config->{ifaces}->{vmbr0}->{'bridge_vlan_aware'};
},
is_ovs => sub {
return 1 if $interfaces_config->{ifaces}->{vmbr0}->{'type'} eq 'OVSBridge';
},
get_bridge_ifaces => sub {
return ('eth0');
},
find_bridge => sub {
return;
},
);
my $sdn_module = Test::MockModule->new("PVE::Network::SDN");
$sdn_module->mock(
running_config => sub {
return $sdn_config;
},
);
my $name = $test;
my $expected = read_file("./$test/expected_sdn_interfaces");
my $result = eval { PVE::Network::SDN::Zones::generate_etc_network_config() };
if (my $err = $@) {
diag("got unexpected error - $err");
fail($name);
} else {
is($result, $expected, $name);
}
if ($sdn_config->{controllers}) {
my $expected = read_file("./$test/expected_controller_config");
my $controller_rawconfig = "";
eval {
my $config = PVE::Network::SDN::Controllers::generate_controller_config();
$controller_rawconfig =
PVE::Network::SDN::Controllers::generate_controller_rawconfig($config);
};
if (my $err = $@) {
diag("got unexpected error - $err");
fail($name);
} else {
is($controller_rawconfig, $expected, $name);
}
}
}
done_testing();
|