]>
git.proxmox.com Git - pve-network.git/blob - src/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 print "test: $testid\n";
43 my $sdn_config = read_sdn_config
("$path/sdn_config");
47 $pve_sdn_subnets = Test
::MockModule-
>new('PVE::Network::SDN::Subnets');
48 $pve_sdn_subnets->mock(
50 return $sdn_config->{subnets
};
52 verify_dns_zone
=> sub {
55 add_dns_record
=> sub {
66 my $subnets = $sdn_config->{subnets
}->{ids
};
67 my $subnetid = (keys %{$subnets})[0];
68 my $subnet = PVE
::Network
::SDN
::Subnets
::sdn_subnets_config
($sdn_config->{subnets
}, $subnetid, 1);
70 my $subnet_cidr = $subnet->{cidr
};
71 my $iplist = NetAddr
::IP-
>new($subnet_cidr);
72 $iplist++ if Net
::IP
::ip_is_ipv4
($iplist->canon()); #skip network address for ipv4
73 my $ip = $iplist->canon();
75 my $ipnextfree = $iplist->canon();
77 my $ip2 = $iplist->canon();
80 my $hostname = "myhostname";
81 my $mac = "da:65:8f:18:9b:6f";
82 my $description = "mydescription";
86 my $zone = $sdn_config->{zones
}->{ids
}->{"myzone"};
87 my $ipam = $zone->{ipam
};
92 $plugin = PVE
::Network
::SDN
::Ipams
::Plugin-
>lookup($ipam);
93 $sdn_ipam_plugin = Test
::MockModule-
>new($plugin);
94 $sdn_ipam_plugin->mock(
106 $pve_sdn_ipams = Test
::MockModule-
>new('PVE::Network::SDN::Ipams');
107 $pve_sdn_ipams->mock(
109 my $ipam_config = read_sdn_config
("$path/ipam_config");
112 add_cache_mac_ip
=> sub {
115 del_cache_mac_ip
=> sub {
121 my $test = "add_subnet $subnetid";
122 my $name = "$testid $test";
124 my $expected = '{"zones":{"myzone":{"subnets":{"'.$subnet_cidr.'":{"ips":{}}}}}}';
127 PVE
::Network
::SDN
::Subnets
::add_subnet
($zone, $subnetid, $subnet);
134 $result = $js->encode($plugin->read_db());
135 is ($result, $expected, $name);
137 is (undef, undef, $name);
141 $test = "add_ip $ip";
142 $name = "$testid $test";
144 $expected = '{"zones":{"myzone":{"subnets":{"'.$subnet_cidr.'":{"ips":{"'.$ip.'":{"gateway":1}}}}}}}';
147 PVE
::Network
::SDN
::Subnets
::add_ip
($zone, $subnetid, $subnet, $ip, $hostname, $mac, $description, $is_gateway);
153 $result = $js->encode($plugin->read_db());
154 is ($result, $expected, $name);
156 is (undef, undef, $name);
160 ## add_already_exist_ip
161 $test = "add_already_exist_ip $ip";
162 $name = "$testid $test";
165 PVE
::Network
::SDN
::Subnets
::add_ip
($zone, $subnetid, $subnet, $ip, $hostname, $mac, $description);
169 is (undef, undef, $name);
176 $test = "add_second_ip $ip2";
177 $name = "$testid $test";
179 $expected = '{"zones":{"myzone":{"subnets":{"'.$subnet_cidr.'":{"ips":{"'.$ip.'":{"gateway":1},"'.$ip2.'":{}}}}}}}';
182 PVE
::Network
::SDN
::Subnets
::add_ip
($zone, $subnetid, $subnet, $ip2, $hostname, $mac, $description);
188 $result = $js->encode($plugin->read_db());
189 is ($result, $expected, $name);
191 is (undef, undef, $name);
195 $test = "find_next_freeip ($ipnextfree)";
196 $name = "$testid $test";
198 $expected = '{"zones":{"myzone":{"subnets":{"'.$subnet_cidr.'":{"ips":{"'.$ip.'":{"gateway":1},"'.$ipnextfree.'":{},"'.$ip2.'":{}}}}}}}';
201 $ip3 = PVE
::Network
::SDN
::Subnets
::add_next_free_ip
($zone, $subnetid, $subnet, $hostname, $mac, $description);
207 $result = $js->encode($plugin->read_db());
208 is ($result, $expected, $name);
212 $test = "del_ip $ip";
213 $name = "$testid $test";
215 $expected = '{"zones":{"myzone":{"subnets":{"'.$subnet_cidr.'":{"ips":{"'.$ipnextfree.'":{},"'.$ip2.'":{}}}}}}}';
218 PVE
::Network
::SDN
::Subnets
::del_ip
($zone, $subnetid, $subnet, $ip, $hostname);
224 $result = $js->encode($plugin->read_db());
225 is ($result, $expected, $name);
227 is (undef, undef, $name);
231 ## del_subnet_not_empty
232 $test = "del_subnet_not_empty $subnetid";
233 $name = "$testid $test";
238 PVE
::Network
::SDN
::Subnets
::del_subnet
($zone, $subnetid, $subnet);
242 is ($result, $expected, $name);
249 ## add_ip_rollback_failing_dns
250 $test = "add_ip_rollback_failing_dns";
252 $pve_sdn_subnets->mock(
254 return $sdn_config->{subnets
};
256 verify_dns_zone
=> sub {
259 add_dns_record
=> sub {
260 die "error add dns record";
265 $name = "$testid $test";
267 $expected = '{"zones":{"myzone":{"subnets":{"'.$subnet_cidr.'":{"ips":{"'.$ipnextfree.'":{},"'.$ip2.'":{}}}}}}}';
270 PVE
::Network
::SDN
::Subnets
::add_ip
($zone, $subnetid, $subnet, $ip, $hostname, $mac, $description);
275 $result = $js->encode($plugin->read_db());
276 is ($result, $expected, $name);
278 is (undef, undef, $name);
286 $test = "del_empty_subnet";
287 $name = "$testid $test";
289 $expected = '{"zones":{"myzone":{"subnets":{}}}}';
291 PVE
::Network
::SDN
::Subnets
::del_ip
($zone, $subnetid, $subnet, $ip2, $hostname);
292 PVE
::Network
::SDN
::Subnets
::del_ip
($zone, $subnetid, $subnet, $ip3, $hostname);
295 PVE
::Network
::SDN
::Subnets
::del_subnet
($zone, $subnetid, $subnet);
301 $result = $js->encode($plugin->read_db());
302 is ($result, $expected, $name);
304 is (undef, undef, $name);