diff --git a/Net-Connection-Match/lib/Net/Connection/Match.pm b/Net-Connection-Match/lib/Net/Connection/Match.pm index f0d5300..b25dc2b 100644 --- a/Net-Connection-Match/lib/Net/Connection/Match.pm +++ b/Net-Connection-Match/lib/Net/Connection/Match.pm @@ -27,6 +27,33 @@ our $VERSION = '0.0.0'; =head2 new +This initializes a new check object. + +It takes one value and thht is a hash ref with the key checks. +This is a array of hashes. + +=head3 checks hash keys + +=head4 type + +This is the name of the check relative to 'Net::Connection::Match::'. + +So 'Net::Connection::Match::PTR' would become 'PTR'. + +=head4 args + +This is a hash or args to pash to the check. These are passed to the new +method of the check module. + +=head4 invert + +This is either boolean on if the check should be inverted or not. + + my $mce; + eval{ + $ncm=Net::Connection::Match->new( $args ); + }; + =cut sub new{ @@ -41,14 +68,14 @@ sub new{ if ( ! defined( $args{checks} ) ){ die ('No check key specified in the argument hash'); } - if ( ref( $args{checks} ) eq 'ARRAY' ){ + if ( ref( @{ $args{checks} } ) eq 'ARRAY' ){ die ('The checks key is not a array'); } # Will never match anything. if ( ! defined $args{checks}[0] ){ die ('Nothing in the checks array'); } - if ( ref( $args{checks}[0] ) eq 'HASH' ){ + if ( ref( %{ $args{checks}[0] } ) eq 'HASH' ){ die ('The first item in the checks array is not a hash'); } @@ -56,6 +83,7 @@ sub new{ perror=>undef, error=>undef, errorString=>"", + testing=>0, errorExtra=>{ flags=>{ 1=>'failedCheckInit', @@ -122,11 +150,7 @@ sub new{ eval( $eval_string ); if (!defined( $check )){ - $self->{error}=1; - $self->{errorString}='Failed to init the check for '.$check_int.' as it returned undef... '.$@; - $self->warn; - $self->{perror}=1; - return $self; + die 'Failed to init the check for '.$check_int.' as it returned undef... '.$@; } $new_check{check}=$check; @@ -136,16 +160,20 @@ sub new{ $check_int++; } + if ( $args{testing} ){ + $self->{testing}=1; + } + return $self; } -=head2 matches +=head2 match Checks if a single Net::Connection object matches the stack. =cut -sub matches{ +sub match{ my $self=$_[0]; my $conn=$_[1]; @@ -159,7 +187,9 @@ sub matches{ ){ $self->{error}=2; $self->{errorString}='Either the connection is undefined or is not a Net::Connection object'; - $self->warn; + if ( ! $self->{testing} ){ + $self->warn; + } return undef; } @@ -198,6 +228,19 @@ sub matches{ return 0; } +=head1 ERROR HANDLING / FLAGS + +Error handling is provided by L. + +=head2 1 / failedCheckInit + +Calling new for one or more of the checks failed. + +=head2 2 / notNCobj + +Not a Net::Connection object. Either is is not defined +or what is being passed is not a Net::Connection object. + =head1 AUTHOR Zane C. Bowers-Hadley, C<< >> diff --git a/Net-Connection-Match/t/Match.t b/Net-Connection-Match/t/Match.t new file mode 100644 index 0000000..338e9b4 --- /dev/null +++ b/Net-Connection-Match/t/Match.t @@ -0,0 +1,73 @@ +#!perl -T +use 5.006; +use strict; +use warnings; +use Test::More; +use Net::Connection; + +BEGIN { + use_ok( 'Net::Connection::Match' ) || print "Bail out!\n"; +} + +my $connection_args={ + foreign_host=>'10.0.0.1', + foreign_port=>'22', + local_host=>'10.0.0.2', + local_port=>'12322', + proto=>'tcp4', + state=>'LISTEN', + }; + +my %args=( + testing=>1, + checks=>[ + { + type=>'Ports', + invert=>0, + args=>{ + ports=>[ + '22', + ], + lports=>[ + '53', + ], + fports=>[ + '12345', + ], + } + } + ] + ); +my $checker; + +# makes sure we error with empty args +my $worked=0; +eval{ + $checker=Net::Connection::Match->new(); + $worked=1; +}; +ok( $worked eq '0', 'empty init check') or diag('Calling new with empty args worked'); + +# makes sure we can init with good args +$worked=0; +eval{ + $checker=Net::Connection::Match->new( \%args ); + $worked=1; +}; +ok( $worked eq '1', 'init check') or diag('Calling Net::Connection::Match::Ports->new resulted in... '.$@); + +# make sure it will not accept a improper ref type +my $returned; +eval{ + $returned=$checker->match($checker); +}; +ok( $checker->error eq '2', 'match improper ref check') or diag('match accepted a ref other than Net::Connection'); + + +# make sure it will not accept null input +eval{ + $returned=$checker->match(); +}; +ok( $checker->error eq '2', 'match null input check') or diag('match accepted a ref other than Net::Connection'); + +done_testing(5);