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