#!/usr/bin/perl
use IPTables::IPv4;
BEGIN { $| = 1; print "1..45\n"; }
$testiter = 1;
my $table = IPTables::IPv4::init('filter');
unless ($table) {
print "not ok 1\n";
exit(1);
}
print "ok ", $testiter++, "\n";
$table->create_chain("foo") || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
$table->create_chain("foo") && print "not ";
print "ok ", $testiter++, "\n";
$table->delete_chain("foo") || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
$table->delete_chain("foo") && print "not ";
print "ok ", $testiter++, "\n";
my @builtins = (qw/INPUT FORWARD OUTPUT DROP ACCEPT RETURN QUEUE/);
foreach my $builtin (@builtins) {
$table->delete_chain($builtin) && print "not ";
print "ok ", $testiter++, "\n";
}
foreach my $builtin (@builtins) {
$table->create_chain($builtin) && print "not ";
print "ok ", $testiter++, "\n";
}
$table->create_chain("foo") || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
$table->append_entry("foo", {}) || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
$table->delete_chain("foo") && print "not ";
print "ok ", $testiter++, "\n";
$table->delete_entry("foo", {}) || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
$table->append_entry("foo", {}) || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
$table->delete_num_entry("foo", 0) || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
$table->delete_chain("foo") || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
$table->create_chain("foo") || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
$table->create_chain("foo2") || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
$table->append_entry("foo", {jump => "foo2"}) || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
$table->delete_chain("foo2") && print "not ";
print "ok ", $testiter++, "\n";
$table->append_entry("foo2", {}) || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
$table->delete_chain("foo2") && print "not ";
print "ok ", $testiter++, "\n";
$table->delete_num_entry("foo", 0) || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
$table->delete_chain("foo2") && print "not ";
print "ok ", $testiter++, "\n";
$table->delete_num_entry("foo2", 0) || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
$table->delete_chain("foo2") || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
$table->create_chain("foo2") || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
my $rv = 1;
foreach my $chain ($table->list_chains()) {
unless ($table->builtin($chain)) {
($rv = 0) unless $table->delete_chain($chain);
}
}
print(($rv ? "" : "# $!\nnot "), "ok ", $testiter++, "\n");
$table->create_chain("foo") || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
$table->create_chain("foo2") || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
$rv = 1;
foreach my $chain ($table->list_chains()) {
($rv = 0) unless $table->flush_entries($chain);
}
print(($rv ? "" : "# $!\nnot "), "ok ", $testiter++, "\n");
$rv = 1;
foreach my $chain ($table->list_chains()) {
unless ($table->builtin($chain)) {
($rv = 0) unless $table->delete_chain($chain);
}
}
print(($rv ? "" : "# $!\nnot "), "ok ", $testiter++, "\n");
$table->append_entry("FORWARD", {jump => "QUEUE"}) || print "# $!\nnot ";
print "ok ", $testiter++, "\n";
my @rules = $table->list_rules("FORWARD");
if (scalar(@rules) != 1) {
print "# $!\nnot ";
}
print "ok ", $testiter++, "\n";
my @keylist = keys(%{$rules[0]});
if(scalar(@keylist) != 3 || $rules[0]->{'jump'} ne "QUEUE") {
print "# $!\nnot ";
}
print "ok ", $testiter++, "\n";
foreach my $chain ($table->list_chains()) {
$table->flush_entries($chain);
}
foreach my $chain ($table->list_chains()) {
unless ($table->builtin($chain)) {
$table->delete_chain($chain);
}
}
exit(0);
# vim: ts=4