#!/usr/bin/perl -wT # $Id: 40-ACL.t,v 1.2 2003/05/27 23:41:57 unimlo Exp $ use strict; use Test::More tests => 34; # Use use_ok('Net::ACL'); use_ok('Net::ACL::Rule'); use_ok('Net::ACL::Match::IP'); use_ok('Net::ACL::Set::Scalar'); use Net::ACL::Rule qw( :action ); # Construction my $erule = new Net::ACL::Rule(); ok(ref $erule eq 'Net::ACL::Rule','Simple Rule construction'); my $elist = new Net::ACL(); ok(ref $elist eq 'Net::ACL','Simple ACL construction'); my $rule1 = new Net::ACL::Rule( Action => ACL_DENY, Match => { IP => [0,'10.10.0.0/16'] } ); ok(ref $rule1 eq 'Net::ACL::Rule','Rule construction 1'); my $rule2 = new Net::ACL::Rule( Action => ACL_PERMIT, Match => { IP => [0,'10.0.0.0/8'] } ); ok(ref $rule2 eq 'Net::ACL::Rule','Rule construction 2'); my $rule3 = new Net::ACL::Rule( Action => ACL_PERMIT, Match => { IP => [0,'127.0.0.1'] } ); ok(ref $rule3 eq 'Net::ACL::Rule','Rule construction 3'); my $rule1b = new Net::ACL::Rule( Action => ACL_CONTINUE, Match => { IP => [0,'127.0.0.0/8'] }, Set => { Scalar => [0,'127.0.0.1'] } ); ok(ref $rule1b eq 'Net::ACL::Rule','Rule construction 4'); my $filter = new Net::ACL( Name => 42, Type => 'ip-access-list', Rule => { 10 => $rule1, 20 => $rule2, 30 => $rule3 } ); ok(ref $filter eq 'Net::ACL','ACL construction 1'); my $modifyer = new Net::ACL( Name => 42, Type => 'ip-modifyer', Rule => { 10 => $rule1, 15 => $rule1b, 20 => $rule2, 30 => $rule3 } ); ok(ref $modifyer eq 'Net::ACL','ACL construction 2'); # Clone my $clone1 = $filter->clone; ok(ref $clone1 eq 'Net::ACL','Cloning'); my $clone2 = clone Net::ACL($clone1); ok(ref $clone2 eq 'Net::ACL','Clone construction'); my $clone3 = renew Net::ACL( Name => 42, Type => 'ip-access-list' ); ok(ref $clone3 eq 'Net::ACL','Renew reconstruction 1'); my $clone4 = renew Net::ACL("$clone1"); ok(ref $clone4 eq 'Net::ACL','Renew reconstruction 2'); # Name and Type ok(! defined $clone1->name,'Name of clone'); ok($clone3->type eq 'ip-access-list','Type of clone'); $clone3->name('foobar'); ok($clone3->name eq 'foobar', 'Name modification'); $clone3->type('baz'); ok($clone3->type eq 'baz', 'Type modification 1'); $clone3->type(undef); ok(! defined $clone3->type, 'Type modification 2'); # Clone cont. my $clone = renew Net::ACL( Name => 'foobar' ); ok(ref $clone eq 'Net::ACL','Renew reconstruction 3'); # Match ok($elist->match('10.0.0.0') eq ACL_PERMIT,'ACL match 1 (implicit permit)'); ok($clone->match('10.10.10.10') eq ACL_DENY, 'ACL match 2 (explicit deny)'); ok($clone->match('10.20.30.40') eq ACL_PERMIT,'ACL match 3 (explicit permit)'); ok($clone->match('1.2.3.4') eq ACL_DENY, 'ACL match 4 (implicit deny)'); ok($clone->match('127.0.0.1') eq ACL_PERMIT,'ACL match 5 (implicit host permit)'); # Query ok(($modifyer->query('10.20.30.40'))[0] eq ACL_PERMIT, 'ACL query 1 (permit)'); ok(($modifyer->query('10.20.30.40'))[1] eq '10.20.30.40', 'ACL query 2 (unmodified)'); ok(($modifyer->query('127.0.0.1' ))[0] eq ACL_PERMIT, 'ACL query 3 (permit)'); ok(($modifyer->query('127.0.0.10' ))[0] eq ACL_PERMIT, 'ACL query 4 (permit modified)'); ok(($modifyer->query('127.0.0.10' ))[1] eq '127.0.0.1', 'ACL query 5 (permit modified)'); ok(($modifyer->query('128.0.0.0' ))[0] eq ACL_DENY, 'ACL query 6 (deny)'); ok(! defined(($modifyer->query('128.0.0.0'))[1]), 'ACL query 7 (deny undefined)'); __END__