Repository: incubator-ranger
Updated Branches:
  refs/heads/master a31d901cc -> f0b129b79


RANGER-568: fixed RangerTimeOfDayMatcher condition to handle 12am/12pm correctly


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/f0b129b7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/f0b129b7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/f0b129b7

Branch: refs/heads/master
Commit: f0b129b7924f57c00a38fed11cb9754dc7c22c18
Parents: a31d901
Author: Madhan Neethiraj <[email protected]>
Authored: Thu Jun 25 02:08:14 2015 -0700
Committer: Madhan Neethiraj <[email protected]>
Committed: Thu Jun 25 08:07:19 2015 -0700

----------------------------------------------------------------------
 .../RangerTimeOfDayMatcher.java                 | 14 ++++-
 .../RangerTimeOfDayMatcherTest.java             | 55 +++++++++++++++++++-
 2 files changed, 66 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/f0b129b7/agents-common/src/main/java/org/apache/ranger/plugin/conditionevaluator/RangerTimeOfDayMatcher.java
----------------------------------------------------------------------
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/conditionevaluator/RangerTimeOfDayMatcher.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/conditionevaluator/RangerTimeOfDayMatcher.java
index 3ddb250..f65f29e 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/conditionevaluator/RangerTimeOfDayMatcher.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/conditionevaluator/RangerTimeOfDayMatcher.java
@@ -105,12 +105,22 @@ public class RangerTimeOfDayMatcher extends 
RangerAbstractConditionEvaluator {
                                        endMinute = 
Integer.parseInt(m.group(7));
                                }
                                String endType = m.group(8).toUpperCase();
-                               if (startType.equals("P")) {
+                               if(startHour == 12) {
+                                       if(startType.equals("A")) {
+                                               startHour = 0;
+                                       }
+                               } else if (startType.equals("P")) {
                                        startHour += 12;
                                }
-                               if (endType.equals("P")) {
+
+                               if(endHour == 12) {
+                                       if(endType.equals("A")) {
+                                               endHour = 0;
+                                       }
+                               } else if (endType.equals("P")) {
                                        endHour += 12;
                                }
+
                                result = new int[] { (startHour*60)+startMin, 
(endHour*60)+endMinute };
                        }
                }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/f0b129b7/agents-common/src/test/java/org/apache/ranger/plugin/conditionevaluator/RangerTimeOfDayMatcherTest.java
----------------------------------------------------------------------
diff --git 
a/agents-common/src/test/java/org/apache/ranger/plugin/conditionevaluator/RangerTimeOfDayMatcherTest.java
 
b/agents-common/src/test/java/org/apache/ranger/plugin/conditionevaluator/RangerTimeOfDayMatcherTest.java
index e894d98..7e8ef0a 100644
--- 
a/agents-common/src/test/java/org/apache/ranger/plugin/conditionevaluator/RangerTimeOfDayMatcherTest.java
+++ 
b/agents-common/src/test/java/org/apache/ranger/plugin/conditionevaluator/RangerTimeOfDayMatcherTest.java
@@ -51,7 +51,8 @@ public class RangerTimeOfDayMatcherTest {
                String[] durations = new String[] { 
                                "9am-5pm", " 9Am -5 Pm", " 9Am -5 Pm", "9 AM -5 
p.m.", "9a.M - 5Pm.",
                                "9:30am-5:30pm", " 9:00Am -5:59 Pm",
-                               "   9   am   -  4 pm  ", "9pm-5AM"
+                               "   9   am   -  4 pm  ", "9pm-5AM",
+                               "11am-12pm", "11pm-12am", "12am-12pm", 
"12pm-12am"
                };
                check(durations, true);
        }
@@ -101,6 +102,10 @@ public class RangerTimeOfDayMatcherTest {
                                { "9:30AM - 5:15pm", "9", "30", "A", "5", "15", 
"p" },
                                { "9:30 AM - 5:15 p.m.", "9", "30", "A", "5", 
"15", "p" },
                                { "9pm-5am", "9", null, "p", "5", null, "a"},
+                               { "11am-12pm", "11", null, "a", "12", null, "p" 
},
+                               { "11pm-12am", "11", null, "p", "12", null, "a" 
},
+                               { "12am-12pm", "12", null, "a", "12", null, "p" 
},
+                               { "12pm-12am", "12", null, "p", "12", null, "a" 
},
                };
                checkGroups(input);
        }
@@ -126,6 +131,10 @@ public class RangerTimeOfDayMatcherTest {
                                { "9am-5pm", true, 9*60, (12+5)*60 },
                                { "1 PM - 10P.M.", true, (12+1)*60, (12+10)*60 
},
                                { "1PM - 9AM", true, (12+1)*60, 9*60 },
+                               { "11am-12pm", true, 11*60, 12*60 },
+                               { "11pm-12am", true, (12+11)*60, 0*60 },
+                               { "12am-12pm", true, 0*60, 12*60 },
+                               { "12pm-12am", true, 12*60, 0*60 },
                                { "1PM", false, null, null }, // illegal 
patterns should come back as null, too
                };
                for (Object[] data: input) {
@@ -217,4 +226,48 @@ public class RangerTimeOfDayMatcherTest {
                        }
                }
        }
+
+       @Test
+       public void test_end2end_happyPath_12_oClock() {
+               RangerPolicyItemCondition itemCondition = 
mock(RangerPolicyItemCondition.class);
+               
when(itemCondition.getValues()).thenReturn(Arrays.asList("12am-1am", 
"11am-12pm", "12pm-1pm", "11pm-12am"));
+
+               RangerTimeOfDayMatcher matcher = new RangerTimeOfDayMatcher();
+               matcher.setConditionDef(null);
+               matcher.setPolicyItemCondition(itemCondition);
+               matcher.init();
+
+               Object[][] input = new Object[][] {
+                               { 0, 00, true },
+                               { 0, 01, true },
+                               { 1, 00, true },
+                               { 1, 01, false },
+                               { 10, 59, false },
+                               { 11, 00, true },
+                               { 11, 59, true },
+                               { 12, 00, true },
+                               { 12, 01, true },
+                               { 12, 59, true },
+                               { 13, 00, true },
+                               { 13, 01, false },
+                               {22, 59, false },
+                               {23, 0, true },
+                               {23, 59, true },
+               };
+
+               RangerAccessRequest request = mock(RangerAccessRequest.class);
+               for (Object[] data : input) {
+                       int hour = (int)data[0];
+                       int minute = (int)data[1];
+                       Calendar c = new GregorianCalendar(2015, 
Calendar.APRIL, 1, hour, minute);
+                       Date aDate = c.getTime();
+                       when(request.getAccessTime()).thenReturn(aDate);
+                       boolean matchExpected = (boolean)data[2];
+                       if (matchExpected) {
+                               assertTrue("" + hour, 
matcher.isMatched(request));
+                       } else {
+                               assertFalse("" + hour, 
matcher.isMatched(request));
+                       }
+               }
+       }
 }

Reply via email to