]>
git.proxmox.com Git - pve-network.git/blob - test/run_test_subnets.pl
12 use PVE
::Network
::SDN
;
13 use PVE
::Network
::SDN
::Zones
;
14 use PVE
::Network
::SDN
::Controllers
;
18 use Data
::Dumper
qw(Dumper);
19 $Data::Dumper
::Sortkeys
= 1;
23 # Read structure back in again
24 open my $in, '<', $file or die $!;
27 local $/; # slurp mode
28 $sdn_config = eval <$in>;
36 my @plugins = read_dir
( './subnets/', prefix
=> 1 ) ;
38 foreach my $path (@plugins) {
40 my (undef, $testid) = split(/\//, $path);
42 my $sdn_config = read_sdn_config
("$path/sdn_config");
46 $pve_sdn_subnets = Test
::MockModule-
>new('PVE::Network::SDN::Subnets');
47 $pve_sdn_subnets->mock(
49 return $sdn_config->{subnets
};
51 verify_dns_zone
=> sub {
54 add_dns_record
=> sub {
65 my $subnets = $sdn_config->{subnets
}->{ids
};
66 my $subnetid = (keys %{$subnets})[0];
67 my $subnet = PVE
::Network
::SDN
::Subnets
::sdn_subnets_config
($sdn_config->{subnets
}, $subnetid, 1);
69 my $subnet_cidr = $subnet->{cidr
};
70 my $iplist = NetAddr
::IP-
>new($subnet_cidr);
72 my $ip = $iplist->canon();
74 my $ipnextfree = $iplist->canon();
76 my $ip2 = $iplist->canon();
79 my $hostname = "myhostname";
80 my $mac = "da:65:8f:18:9b:6f";
81 my $description = "mydescription";
85 my $zone = $sdn_config->{zones
}->{ids
}->{"myzone"};
87 my $plugin = PVE
::Network
::SDN
::Ipams
::Plugin-
>lookup('pve');
88 my $sdn_ipam_plugin = Test
::MockModule-
>new($plugin);
89 $sdn_ipam_plugin->mock(
100 my $test = "add_subnet";
101 my $name = "$testid $test";
103 my $expected = '{"zones":{"myzone":{"subnets":{"'.$subnet_cidr.'":{"ips":{}}}}}}';
106 $plugin->add_subnet(undef, $subnetid, $subnet, 1);
112 $result = $js->encode($plugin->read_db());
113 is ($result, $expected, $name);
118 $name = "$testid $test";
120 $expected = '{"zones":{"myzone":{"subnets":{"'.$subnet_cidr.'":{"ips":{"'.$ip.'":{}}}}}}}';
123 PVE
::Network
::SDN
::Subnets
::add_ip
($zone, $subnetid, $subnet, $ip, $hostname, $mac, $description);
129 $result = $js->encode($plugin->read_db());
130 is ($result, $expected, $name);
133 ## add_already_exist_ip
134 $test = "add_already_exist_ip";
135 $name = "$testid $test";
138 PVE
::Network
::SDN
::Subnets
::add_ip
($zone, $subnetid, $subnet, $ip, $hostname, $mac, $description);
142 is (undef, undef, $name);
148 $test = "add_second_ip";
149 $name = "$testid $test";
151 $expected = '{"zones":{"myzone":{"subnets":{"'.$subnet_cidr.'":{"ips":{"'.$ip.'":{},"'.$ip2.'":{}}}}}}}';
154 PVE
::Network
::SDN
::Subnets
::add_ip
($zone, $subnetid, $subnet, $ip2, $hostname, $mac, $description);
160 $result = $js->encode($plugin->read_db());
161 is ($result, $expected, $name);
166 $test = "add_next_freeip";
167 $name = "$testid $test";
169 $expected = '{"zones":{"myzone":{"subnets":{"'.$subnet_cidr.'":{"ips":{"'.$ip.'":{},"'.$ipnextfree.'":{},"'.$ip2.'":{}}}}}}}';
172 $ip3 = PVE
::Network
::SDN
::Subnets
::next_free_ip
($zone, $subnetid, $subnet, $hostname, $mac, $description);
178 $result = $js->encode($plugin->read_db());
179 is ($result, $expected, $name);
184 $name = "$testid $test";
186 $expected = '{"zones":{"myzone":{"subnets":{"'.$subnet_cidr.'":{"ips":{"'.$ipnextfree.'":{},"'.$ip2.'":{}}}}}}}';
189 PVE
::Network
::SDN
::Subnets
::del_ip
($zone, $subnetid, $subnet, $ip, $hostname);
195 $result = $js->encode($plugin->read_db());
196 is ($result, $expected, $name);
199 ## del_subnet_not_empty
200 $test = "del_subnet_not_empty";
201 $name = "$testid $test";
206 PVE
::Network
::SDN
::Subnets
::del_subnet
($zone, $subnetid, $subnet);
210 is ($result, $expected, $name);
217 ## add_ip_rollback_failing_dns
218 $test = "add_ip_rollback_failing_dns";
220 $pve_sdn_subnets->mock(
222 return $sdn_config->{subnets
};
224 verify_dns_zone
=> sub {
227 add_dns_record
=> sub {
228 die "error add dns record";
233 $name = "$testid $test";
235 $expected = '{"zones":{"myzone":{"subnets":{"'.$subnet_cidr.'":{"ips":{"'.$ipnextfree.'":{},"'.$ip2.'":{}}}}}}}';
238 PVE
::Network
::SDN
::Subnets
::add_ip
($zone, $subnetid, $subnet, $ip, $hostname, $mac, $description);
242 $result = $js->encode($plugin->read_db());
243 is ($result, $expected, $name);
250 $test = "del_empty_subnet";
251 $name = "$testid $test";
253 $expected = '{"zones":{"myzone":{"subnets":{}}}}';
255 PVE
::Network
::SDN
::Subnets
::del_ip
($zone, $subnetid, $subnet, $ip2, $hostname);
256 PVE
::Network
::SDN
::Subnets
::del_ip
($zone, $subnetid, $subnet, $ip3, $hostname);
259 PVE
::Network
::SDN
::Subnets
::del_subnet
($zone, $subnetid, $subnet);
265 $result = $js->encode($plugin->read_db());
266 is ($result, $expected, $name);