[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