5
0
mirror of git://git.proxmox.com/git/pve-firewall.git synced 2025-03-06 00:58:15 +03:00

fwtester: add ability to run tests on several zones

This commit is contained in:
Dietmar Maurer 2014-05-15 10:22:20 +02:00
parent 4bc6b5ac94
commit 1352eaa1ec

View File

@ -422,11 +422,11 @@ sub extract_vm_info {
sub simulate_firewall { sub simulate_firewall {
my ($ruleset, $ipset_ruleset, $vmdata, $test) = @_; my ($ruleset, $ipset_ruleset, $vmdata, $test) = @_;
my $from = delete $test->{from} || die "missing 'from' field"; my $from = $test->{from} || die "missing 'from' field";
my $to = delete $test->{to} || die "missing 'to' field"; my $to = $test->{to} || die "missing 'to' field";
my $action = delete $test->{action} || die "missing 'action'"; my $action = $test->{action} || die "missing 'action'";
my $testid = delete $test->{id}; my $testid = $test->{id};
die "from/to needs to be different" if $from eq $to; die "from/to needs to be different" if $from eq $to;
@ -439,6 +439,10 @@ sub simulate_firewall {
}; };
while (my ($k,$v) = each %$test) { while (my ($k,$v) = each %$test) {
next if $k eq 'from';
next if $k eq 'to';
next if $k eq 'action';
next if $k eq 'id';
die "unknown attribute '$k'\n" if !exists($pkg->{$k}); die "unknown attribute '$k'\n" if !exists($pkg->{$k});
$pkg->{$k} = $v; $pkg->{$k} = $v;
} }
@ -469,7 +473,7 @@ sub simulate_firewall {
my $vmid = $1; my $vmid = $1;
$from_info = extract_ct_info($vmdata, $vmid); $from_info = extract_ct_info($vmdata, $vmid);
if ($from_info->{ip_address}) { if ($from_info->{ip_address}) {
$pkg->{source} = $from_info->{ip_address}; $pkg->{source} = $from_info->{ip_address} if !defined($pkg->{source});
$start_state = 'venet-out'; $start_state = 'venet-out';
} else { } else {
die "implement me"; die "implement me";
@ -553,7 +557,28 @@ sub run_tests {
$trace = ''; $trace = '';
print Dumper($ruleset) if $debug; print Dumper($ruleset) if $debug;
$testcount++; $testcount++;
eval { simulate_firewall($ruleset, $ipset_ruleset, $vmdata, $test); }; eval {
my @test_zones = qw(host outside nfvm vm100 ct200);
if (!defined($test->{from}) && !defined($test->{to})) {
die "missing zone speification (from, to)\n";
} elsif (!defined($test->{to})) {
foreach my $zone (@test_zones) {
next if $zone eq $test->{from};
$test->{to} = $zone;
add_trace("Set Zone: to => '$zone'\n");
simulate_firewall($ruleset, $ipset_ruleset, $vmdata, $test);
}
} elsif (!defined($test->{from})) {
foreach my $zone (@test_zones) {
next if $zone eq $test->{to};
$test->{from} = $zone;
add_trace("Set Zone: from => '$zone'\n");
simulate_firewall($ruleset, $ipset_ruleset, $vmdata, $test);
}
} else {
simulate_firewall($ruleset, $ipset_ruleset, $vmdata, $test);
}
};
if (my $err = $@) { if (my $err = $@) {
print Dumper($ruleset) if !$debug; print Dumper($ruleset) if !$debug;