summaryrefslogtreecommitdiff
path: root/src/test/run_test_zones.pl
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/run_test_zones.pl')
-rwxr-xr-xsrc/test/run_test_zones.pl123
1 files changed, 123 insertions, 0 deletions
diff --git a/src/test/run_test_zones.pl b/src/test/run_test_zones.pl
new file mode 100755
index 0000000..12e017a
--- /dev/null
+++ b/src/test/run_test_zones.pl
@@ -0,0 +1,123 @@
+#!/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 {
+ $result = PVE::Network::SDN::Zones::generate_etc_network_config();
+ };
+
+ if (my $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 = $@) {
+ fail($name);
+ } else {
+ is ($controller_rawconfig, $expected, $name);
+ }
+ }
+}
+
+done_testing();
+
+