[Rt-commit] r6086 - in rtir/branches/2.1-EXPERIMENTAL: . t
ruz at bestpractical.com
ruz at bestpractical.com
Thu Sep 28 12:37:21 EDT 2006
Author: ruz
Date: Thu Sep 28 12:37:19 2006
New Revision: 6086
Modified:
rtir/branches/2.1-EXPERIMENTAL/ (props changed)
rtir/branches/2.1-EXPERIMENTAL/lib/RT/IR.pm
rtir/branches/2.1-EXPERIMENTAL/t/013-custom-field-ip.t
Log:
r1640 at cubic-pc: cubic | 2006-09-28 20:47:09 +0400
IP searching
* fix range searches with negative operator
* add more tests
Modified: rtir/branches/2.1-EXPERIMENTAL/lib/RT/IR.pm
==============================================================================
--- rtir/branches/2.1-EXPERIMENTAL/lib/RT/IR.pm (original)
+++ rtir/branches/2.1-EXPERIMENTAL/lib/RT/IR.pm Thu Sep 28 12:37:19 2006
@@ -115,7 +115,7 @@
};
# "= 'sIP-eIP'" => "( >=sIP AND <=eIP)"
-# "!= 'sIP-eIP'" => "( <sIP AND >eIP)"
+# "!= 'sIP-eIP'" => "( <sIP OR >eIP)"
wrap 'RT::Tickets::_CustomFieldLimit',
pre => sub {
return unless $_[3] =~ /^\s*($RE{net}{IPv4})\s*-\s*($RE{net}{IPv4})\s*$/o;
@@ -124,7 +124,10 @@
my $negative = ($op =~ /NOT|!=|<>/i)? 1 : 0;
$tickets->_OpenParen;
$tickets->_CustomFieldLimit($field, ($negative? '<': '>='), $start_ip, @rest);
- $tickets->_CustomFieldLimit($field, ($negative? '>': '<='), $end_ip, @rest, ENTRYAGGREGATOR => 'AND');
+ $tickets->_CustomFieldLimit(
+ $field, ($negative? '>': '<='), $end_ip,
+ @rest, ENTRYAGGREGATOR => ($negative? 'OR': 'AND'),
+ );
$tickets->_CloseParen;
# return right now as we did everything
$_[-1] = ref $_[-1]? [1]: 1;
Modified: rtir/branches/2.1-EXPERIMENTAL/t/013-custom-field-ip.t
==============================================================================
--- rtir/branches/2.1-EXPERIMENTAL/t/013-custom-field-ip.t (original)
+++ rtir/branches/2.1-EXPERIMENTAL/t/013-custom-field-ip.t Thu Sep 28 12:37:19 2006
@@ -2,7 +2,7 @@
use strict;
use warnings;
-use Test::More tests => 165;
+use Test::More tests => 176;
require "t/rtir-test.pl";
@@ -183,34 +183,74 @@
$tickets->FromSQL("id = $id1 OR id = $id2");
is( $tickets->Count, 2, "found both tickets by 'id = x OR y'" );
+ # IP
$tickets = RT::Tickets->new( $rtir_user );
$tickets->FromSQL("(id = $id1 OR id = $id2) AND CF.{_RTIR_IP} = '192.168.21.10'");
is( $tickets->Count, 1, "found one ticket" );
is( $tickets->First->FirstCustomFieldValue('_RTIR_IP'), '192.168.21.10', "correct value" );
-
$tickets = RT::Tickets->new( $rtir_user );
$tickets->FromSQL("(id = $id1 OR id = $id2) AND CF.{_RTIR_IP} = '192.168.22.10'");
is( $tickets->Count, 1, "found one ticket" );
is( $tickets->First->FirstCustomFieldValue('_RTIR_IP'), '192.168.22.10', "correct value" );
+ # IP/32 - one address
$tickets = RT::Tickets->new( $rtir_user );
- $tickets->FromSQL("(id = $id1 OR id = $id2) AND CF.{_RTIR_IP} = '192.168.21.0-192.168.21.255'");
+ $tickets->FromSQL("(id = $id1 OR id = $id2) AND CF.{_RTIR_IP} = '192.168.21.10/32'");
is( $tickets->Count, 1, "found one ticket" );
is( $tickets->First->FirstCustomFieldValue('_RTIR_IP'), '192.168.21.10', "correct value" );
+ $tickets = RT::Tickets->new( $rtir_user );
+ $tickets->FromSQL("(id = $id1 OR id = $id2) AND CF.{_RTIR_IP} = '192.168.22.10/32'");
+ is( $tickets->Count, 1, "found one ticket" );
+ is( $tickets->First->FirstCustomFieldValue('_RTIR_IP'), '192.168.22.10', "correct value" );
+ # IP range
+ $tickets = RT::Tickets->new( $rtir_user );
+ $tickets->FromSQL("(id = $id1 OR id = $id2) AND CF.{_RTIR_IP} = '192.168.21.0-192.168.21.255'");
+ is( $tickets->Count, 1, "found one ticket" );
+ is( $tickets->First->FirstCustomFieldValue('_RTIR_IP'), '192.168.21.10', "correct value" );
$tickets = RT::Tickets->new( $rtir_user );
$tickets->FromSQL("(id = $id1 OR id = $id2) AND CF.{_RTIR_IP} = '192.168.22.0-192.168.22.255'");
is( $tickets->Count, 1, "found one ticket" );
is( $tickets->First->FirstCustomFieldValue('_RTIR_IP'), '192.168.22.10', "correct value" );
+ # IP range, with start IP greater than end
+ $tickets = RT::Tickets->new( $rtir_user );
+ $tickets->FromSQL("(id = $id1 OR id = $id2) AND CF.{_RTIR_IP} = '192.168.21.255-192.168.21.0'");
+ TODO: { local $TODO = "not yet implemented";
+ is( $tickets->Count, 1, "found one ticket" );
+ #is( $tickets->First->FirstCustomFieldValue('_RTIR_IP'), '192.168.21.10', "correct value" );
+ }
+ $tickets = RT::Tickets->new( $rtir_user );
+ $tickets->FromSQL("(id = $id1 OR id = $id2) AND CF.{_RTIR_IP} = '192.168.22.255-192.168.22.0'");
+ TODO: { local $TODO = "not yet implemented";
+ is( $tickets->Count, 1, "found one ticket" );
+ #is( $tickets->First->FirstCustomFieldValue('_RTIR_IP'), '192.168.22.10', "correct value" );
+ }
+
+ # CIDR/24
$tickets = RT::Tickets->new( $rtir_user );
$tickets->FromSQL("(id = $id1 OR id = $id2) AND CF.{_RTIR_IP} = '192.168.21.0/24'");
is( $tickets->Count, 1, "found one ticket" );
is( $tickets->First->FirstCustomFieldValue('_RTIR_IP'), '192.168.21.10', "correct value" );
-
$tickets = RT::Tickets->new( $rtir_user );
$tickets->FromSQL("(id = $id1 OR id = $id2) AND CF.{_RTIR_IP} = '192.168.22.0/24'");
is( $tickets->Count, 1, "found one ticket" );
is( $tickets->First->FirstCustomFieldValue('_RTIR_IP'), '192.168.22.10', "correct value" );
+
+ # IP is not in CIDR/24
+ $tickets = RT::Tickets->new( $rtir_user );
+ $tickets->FromSQL("(id = $id1 OR id = $id2) AND CF.{_RTIR_IP} != '192.168.21.0/24'");
+ is( $tickets->Count, 1, "found one ticket" );
+ is( $tickets->First->FirstCustomFieldValue('_RTIR_IP'), '192.168.22.10', "correct value" );
+ $tickets = RT::Tickets->new( $rtir_user );
+ $tickets->FromSQL("(id = $id1 OR id = $id2) AND CF.{_RTIR_IP} != '192.168.22.0/24'");
+ is( $tickets->Count, 1, "found one ticket" );
+ is( $tickets->First->FirstCustomFieldValue('_RTIR_IP'), '192.168.21.10', "correct value" );
+
+ # CIDR or CIDR
+ $tickets = RT::Tickets->new( $rtir_user );
+ $tickets->FromSQL("(id = $id1 OR id = $id2) AND "
+ ."(CF.{_RTIR_IP} = '192.168.21.0/24' OR CF.{_RTIR_IP} = '192.168.22.0/24')");
+ is( $tickets->Count, 2, "found both tickets" );
}
More information about the Rt-commit
mailing list