Repository: incubator-ranger Updated Branches: refs/heads/master d6cce39bb -> 0ee29405d
RANGER-400: resource-matcher handling of isRecursive updated to fix the issue Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/0ee29405 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/0ee29405 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/0ee29405 Branch: refs/heads/master Commit: 0ee29405da6e86b2683185ed68861a8f9e626ff0 Parents: d6cce39 Author: Madhan Neethiraj <[email protected]> Authored: Wed Apr 15 01:37:18 2015 -0700 Committer: Madhan Neethiraj <[email protected]> Committed: Wed Apr 15 08:48:09 2015 -0700 ---------------------------------------------------------------------- .../RangerDefaultPolicyEvaluator.java | 2 +- .../RangerAbstractResourceMatcher.java | 20 +- .../RangerDefaultResourceMatcher.java | 13 +- .../RangerPathResourceMatcher.java | 67 ++-- .../resourcematcher/RangerResourceMatcher.java | 9 +- .../resourcematcher/TestResourceMatcher.java | 136 ++++++++ .../test_resourcematcher_default.json | 327 +++++++++++++++++++ .../test_resourcematcher_path.json | 290 ++++++++++++++++ 8 files changed, 808 insertions(+), 56 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0ee29405/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerDefaultPolicyEvaluator.java ---------------------------------------------------------------------- diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerDefaultPolicyEvaluator.java b/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerDefaultPolicyEvaluator.java index b6c98f7..3f9ab84 100644 --- a/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerDefaultPolicyEvaluator.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerDefaultPolicyEvaluator.java @@ -649,7 +649,7 @@ public class RangerDefaultPolicyEvaluator extends RangerAbstractPolicyEvaluator } if (ret != null) { - ret.init(resourceDef, resource); + ret.init(resourceDef.getMatcherOptions(), resource); } } else { LOG.error("RangerDefaultPolicyEvaluator: RangerResourceDef is null"); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0ee29405/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerAbstractResourceMatcher.java ---------------------------------------------------------------------- diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerAbstractResourceMatcher.java b/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerAbstractResourceMatcher.java index 646cbc5..95dd214 100644 --- a/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerAbstractResourceMatcher.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerAbstractResourceMatcher.java @@ -53,14 +53,12 @@ public abstract class RangerAbstractResourceMatcher implements RangerResourceMat protected boolean isMatchAny = false; @Override - public void init(RangerResourceDef resourceDef, RangerPolicyResource policyResource) { + public void init(Map<String, String> options, RangerPolicyResource policyResource) { if(LOG.isDebugEnabled()) { LOG.debug("==> RangerAbstractResourceMatcher.init(" + resourceDef + ", " + policyResource + ")"); } - - this.options = resourceDef.getMatcherOptions(); - this.resourceDef = resourceDef; + this.options = options; this.policyResource = policyResource; optIgnoreCase = getBooleanOption(OPTION_IGNORE_CASE, true); @@ -75,10 +73,6 @@ public abstract class RangerAbstractResourceMatcher implements RangerResourceMat continue; } - if(optIgnoreCase) { - policyValue = policyValue.toLowerCase(); - } - if(StringUtils.containsOnly(policyValue, WILDCARD_ASTERISK)) { isMatchAny = true; } @@ -97,16 +91,6 @@ public abstract class RangerAbstractResourceMatcher implements RangerResourceMat } @Override - public RangerResourceDef getResourceDef() { - return resourceDef; - } - - @Override - public RangerPolicyResource getPolicyResource() { - return policyResource; - } - - @Override public boolean isSingleAndExactMatch(String resource) { if(LOG.isDebugEnabled()) { LOG.debug("==> RangerAbstractResourceMatcher.isSingleAndExactMatch(" + resource + ")"); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0ee29405/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerDefaultResourceMatcher.java ---------------------------------------------------------------------- diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerDefaultResourceMatcher.java b/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerDefaultResourceMatcher.java index 007fc42..79c3885 100644 --- a/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerDefaultResourceMatcher.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerDefaultResourceMatcher.java @@ -21,6 +21,7 @@ package org.apache.ranger.plugin.resourcematcher; import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOCase; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -40,12 +41,14 @@ public class RangerDefaultResourceMatcher extends RangerAbstractResourceMatcher if(resource == null || isMatchAny) { ret = isMatchAny; } else { - if(optIgnoreCase) { - resource = resource.toLowerCase(); - } - for(String policyValue : policyValues) { - ret = optWildCard ? FilenameUtils.wildcardMatch(resource, policyValue) : StringUtils.equals(resource, policyValue); + if(optWildCard) { + ret = optIgnoreCase ? FilenameUtils.wildcardMatch(resource, policyValue, IOCase.INSENSITIVE) + : FilenameUtils.wildcardMatch(resource, policyValue, IOCase.SENSITIVE); + } else { + ret = optIgnoreCase ? StringUtils.equalsIgnoreCase(resource, policyValue) + : StringUtils.equals(resource, policyValue); + } if(ret) { break; http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0ee29405/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerPathResourceMatcher.java ---------------------------------------------------------------------- diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerPathResourceMatcher.java b/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerPathResourceMatcher.java index fffdbfc..6096c8d 100644 --- a/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerPathResourceMatcher.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerPathResourceMatcher.java @@ -20,13 +20,17 @@ package org.apache.ranger.plugin.resourcematcher; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOCase; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource; -import org.apache.ranger.plugin.model.RangerServiceDef.RangerResourceDef; public class RangerPathResourceMatcher extends RangerAbstractResourceMatcher { @@ -35,22 +39,37 @@ public class RangerPathResourceMatcher extends RangerAbstractResourceMatcher { public static final String OPTION_PATH_SEPERATOR = "pathSeparatorChar"; public static final char DEFAULT_PATH_SEPERATOR_CHAR = org.apache.hadoop.fs.Path.SEPARATOR_CHAR; - private boolean policyIsRecursive = false; - private char pathSeparatorChar = DEFAULT_PATH_SEPERATOR_CHAR; + private boolean policyIsRecursive = false; + private char pathSeparatorChar = DEFAULT_PATH_SEPERATOR_CHAR; + private List<String> policyValuesForMatch = null; @Override - public void init(RangerResourceDef resourceDef, RangerPolicyResource policyResource) { + public void init(Map<String, String> options, RangerPolicyResource policyResource) { if(LOG.isDebugEnabled()) { - LOG.debug("==> RangerPathResourceMatcher.init(" + resourceDef + ", " + policyResource + ")"); + LOG.debug("==> RangerPathResourceMatcher.init(" + options + ", " + policyResource + ")"); } + super.init(options, policyResource); + policyIsRecursive = policyResource == null ? false : policyResource.getIsRecursive(); pathSeparatorChar = getCharOption(OPTION_PATH_SEPERATOR, DEFAULT_PATH_SEPERATOR_CHAR); - super.init(resourceDef, policyResource); + if(policyIsRecursive && optWildCard && !isMatchAny) { + policyValuesForMatch = new ArrayList<String>(); + + for(String policyValue : policyValues) { + if(policyValue.charAt(policyValue.length() - 1) == pathSeparatorChar) { + policyValuesForMatch.add(policyValue + WILDCARD_ASTERISK); + } else { + policyValuesForMatch.add(policyValue); + } + } + } else { + policyValuesForMatch = policyValues; + } if(LOG.isDebugEnabled()) { - LOG.debug("<== RangerPathResourceMatcher.init(" + resourceDef + ", " + policyResource + ")"); + LOG.debug("<== RangerPathResourceMatcher.init(" + options + ", " + policyResource + ")"); } } @@ -65,23 +84,19 @@ public class RangerPathResourceMatcher extends RangerAbstractResourceMatcher { if(resource == null || isMatchAny) { ret = isMatchAny; } else { - if(optIgnoreCase) { - resource = resource.toLowerCase(); - } - - for(String policyValue : policyValues) { - if(policyIsRecursive) { - if(optWildCard) { - ret = isRecursiveWildCardMatch(resource, policyValue, pathSeparatorChar) ; - } else { - ret = StringUtils.startsWith(resource, policyValue); - } + IOCase caseSensitivity = optIgnoreCase ? IOCase.INSENSITIVE : IOCase.SENSITIVE; + + for(String policyValue : policyValuesForMatch) { + if(policyIsRecursive && optWildCard) { + ret = isRecursiveWildCardMatch(resource, policyValue, pathSeparatorChar, caseSensitivity); + } else if(policyIsRecursive) { + ret = optIgnoreCase ? StringUtils.startsWithIgnoreCase(resource, policyValue) + : StringUtils.startsWith(resource, policyValue); + } else if(optWildCard) { + ret = FilenameUtils.wildcardMatch(resource, policyValue, caseSensitivity); } else { - if(optWildCard) { - ret = FilenameUtils.wildcardMatch(resource, policyValue); - } else { - ret = StringUtils.equals(resource, policyValue); - } + ret = optIgnoreCase ? StringUtils.equalsIgnoreCase(resource, policyValue) + : StringUtils.equals(resource, policyValue); } if(ret) { @@ -101,7 +116,7 @@ public class RangerPathResourceMatcher extends RangerAbstractResourceMatcher { return ret; } - private boolean isRecursiveWildCardMatch(String pathToCheck, String wildcardPath, char pathSeparatorChar) { + private boolean isRecursiveWildCardMatch(String pathToCheck, String wildcardPath, char pathSeparatorChar, IOCase caseSensitivity) { if(LOG.isDebugEnabled()) { LOG.debug("==> RangerPathResourceMatcher.isRecursiveWildCardMatch(" + pathToCheck + ", " + wildcardPath + ", " + pathSeparatorChar + ")"); } @@ -121,7 +136,7 @@ public class RangerPathResourceMatcher extends RangerAbstractResourceMatcher { for(String p : pathElements) { sb.append(p); - ret = FilenameUtils.wildcardMatch(sb.toString(), wildcardPath) ; + ret = FilenameUtils.wildcardMatch(sb.toString(), wildcardPath, caseSensitivity) ; if (ret) { break; @@ -132,7 +147,7 @@ public class RangerPathResourceMatcher extends RangerAbstractResourceMatcher { sb = null; } else { // pathToCheck consists of only pathSeparatorChar - ret = FilenameUtils.wildcardMatch(pathToCheck, wildcardPath) ; + ret = FilenameUtils.wildcardMatch(pathToCheck, wildcardPath, caseSensitivity) ; } } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0ee29405/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerResourceMatcher.java ---------------------------------------------------------------------- diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerResourceMatcher.java b/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerResourceMatcher.java index 4a846b5..3c4e99b 100644 --- a/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerResourceMatcher.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/resourcematcher/RangerResourceMatcher.java @@ -19,15 +19,12 @@ package org.apache.ranger.plugin.resourcematcher; +import java.util.Map; + import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource; -import org.apache.ranger.plugin.model.RangerServiceDef.RangerResourceDef; public interface RangerResourceMatcher { - void init(RangerResourceDef resourceDef, RangerPolicyResource policyResource); - - RangerResourceDef getResourceDef(); - - RangerPolicyResource getPolicyResource(); + void init(Map<String, String> options, RangerPolicyResource policyResource); boolean isMatch(String resource); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0ee29405/agents-common/src/test/java/org/apache/ranger/plugin/resourcematcher/TestResourceMatcher.java ---------------------------------------------------------------------- diff --git a/agents-common/src/test/java/org/apache/ranger/plugin/resourcematcher/TestResourceMatcher.java b/agents-common/src/test/java/org/apache/ranger/plugin/resourcematcher/TestResourceMatcher.java new file mode 100644 index 0000000..5775d0f --- /dev/null +++ b/agents-common/src/test/java/org/apache/ranger/plugin/resourcematcher/TestResourceMatcher.java @@ -0,0 +1,136 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.ranger.plugin.resourcematcher; + +import static org.junit.Assert.*; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.List; +import java.util.Map; + +import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource; +import org.apache.ranger.plugin.resourcematcher.TestResourceMatcher.ResourceMatcherTestCases.TestCase; +import org.apache.ranger.plugin.resourcematcher.TestResourceMatcher.ResourceMatcherTestCases.TestCase.OneTest; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +public class TestResourceMatcher { + static Gson gsonBuilder = null; + + @BeforeClass + public static void setUpBeforeClass() throws Exception { + gsonBuilder = new GsonBuilder().setDateFormat("yyyyMMdd-HH:mm:ss.SSS-Z") + .setPrettyPrinting() + .create(); + } + + @AfterClass + public static void tearDownAfterClass() throws Exception { + } + + @Before + public void setUp() throws Exception { + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testResourceMatcher_default() throws Exception { + String[] tests = { "/resourcematcher/test_resourcematcher_default.json" }; + + runTestsFromResourceFiles(tests); + } + + @Test + public void testResourceMatcher_path() throws Exception { + String[] tests = { "/resourcematcher/test_resourcematcher_path.json" }; + + runTestsFromResourceFiles(tests); + } + + private void runTestsFromResourceFiles(String[] resourceNames) throws Exception { + for(String resourceName : resourceNames) { + InputStream inStream = this.getClass().getResourceAsStream(resourceName); + InputStreamReader reader = new InputStreamReader(inStream); + + runTests(reader, resourceName); + } + } + + private void runTests(InputStreamReader reader, String testName) throws Exception { + ResourceMatcherTestCases testCases = gsonBuilder.fromJson(reader, ResourceMatcherTestCases.class); + + assertTrue("invalid input: " + testName, testCases != null && testCases.testCases != null); + + for(TestCase testCase : testCases.testCases) { + RangerResourceMatcher matcher = createResourceMatcher(testCase.matcher, testCase.matcherOptions, testCase.policyResource); + + for(OneTest oneTest : testCase.tests) { + if(oneTest == null) { + continue; + } + + boolean expected = oneTest.result; + boolean result = matcher.isMatch(oneTest.input); + + assertEquals("isMatch() failed! " + testCase.name + ":" + oneTest.name + ": input=" + oneTest.input, expected, result); + } + } + } + + private RangerResourceMatcher createResourceMatcher(String className, Map<String, String> options, RangerPolicyResource policyResource) throws Exception { + RangerResourceMatcher ret = null; + + @SuppressWarnings("unchecked") + Class<RangerResourceMatcher> matcherClass = (Class<RangerResourceMatcher>) Class.forName(className); + + ret = matcherClass.newInstance(); + ret.init(options, policyResource); + + return ret; + } + + static class ResourceMatcherTestCases { + public List<TestCase> testCases; + + class TestCase { + public String name; + public String matcher; + public Map<String, String> matcherOptions; + public RangerPolicyResource policyResource; + public List<OneTest> tests; + + class OneTest { + String name; + String input; + boolean result; + } + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0ee29405/agents-common/src/test/resources/resourcematcher/test_resourcematcher_default.json ---------------------------------------------------------------------- diff --git a/agents-common/src/test/resources/resourcematcher/test_resourcematcher_default.json b/agents-common/src/test/resources/resourcematcher/test_resourcematcher_default.json new file mode 100644 index 0000000..24d1e4e --- /dev/null +++ b/agents-common/src/test/resources/resourcematcher/test_resourcematcher_default.json @@ -0,0 +1,327 @@ +{ + "testCases":[ + { + "name":"value=simple; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["simple"] + }, + "tests":[ + { "name":"all-lower","input":"simple", "result":true}, + { "name":"all-upper","input":"SIMPLE", "result":true}, + { "name":"mixed-case","input":"SiMpLe", "result":true}, + { "name":"invalid-all-lower-wild","input":"other-simple", "result":false}, + { "name":"invalid-all-upper-wild","input":"OTHER-SIMPLE", "result":false}, + { "name":"invalid-mixed-case-wild","input":"OtHeR-SiMpLe", "result":false}, + ] + } + , + { + "name":"value=simple; wildCard=true; ignoreCase=true; isExcludes=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["simple"], + "isExcludes":true + }, + "tests":[ + { "name":"all-lower","input":"simple", "result":false}, + { "name":"all-upper","input":"SIMPLE", "result":false}, + { "name":"mixed-case","input":"SiMpLe", "result":false}, + { "name":"invalid-all-lower-wild","input":"other-simple", "result":true}, + { "name":"invalid-all-upper-wild","input":"OTHER-SIMPLE", "result":true}, + { "name":"invalid-mixed-case-wild","input":"OtHeR-SiMpLe", "result":true}, + ] + } + , + { + "name":"value=simple; wildCard=true; ignoreCase=false", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":false}, + "policyResource":{ + "values": ["simple"] + }, + "tests":[ + { "name":"all-lower","input":"simple", "result":true}, + { "name":"all-upper","input":"SIMPLE", "result":false}, + { "name":"mixed-case","input":"SiMpLe", "result":false}, + { "name":"invalid-all-lower","input":"other-string", "result":false}, + { "name":"invalid-all-upper","input":"OTHER-STRING", "result":false}, + { "name":"invalid-mixed-case","input":"oThEr-StRiNg", "result":false}, + ] + } + , + { + "name":"value=SiMpLe; wildCard=true; ignoreCase=false", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":false}, + "policyResource":{ + "values": ["SiMpLe"] + }, + "tests":[ + { "name":"all-lower","input":"simple", "result":false}, + { "name":"all-upper","input":"SIMPLE", "result":false}, + { "name":"mixed-case","input":"SiMpLe", "result":true}, + { "name":"invalid-all-lower","input":"other-string", "result":false}, + { "name":"invalid-all-upper","input":"OTHER-STRING", "result":false}, + { "name":"invalid-mixed-case","input":"oThEr-StRiNg", "result":false}, + ] + } + , + { + "name":"value=simple*; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["simple*"] + }, + "tests":[ + { "name":"all-lower","input":"simple", "result":true}, + { "name":"all-upper","input":"SIMPLE", "result":true}, + { "name":"mixed-case","input":"SiMpLe", "result":true}, + { "name":"all-lower-wild-exact","input":"simple*", "result":true}, + { "name":"all-upper-wild-exact","input":"SIMPLE*", "result":true}, + { "name":"mixed-case-wild-exact","input":"SiMpLe*", "result":true}, + { "name":"all-lower-wild","input":"simple-test-string", "result":true}, + { "name":"all-upper-wild","input":"SIMPLE-TEST-STRING", "result":true}, + { "name":"mixed-case-wild","input":"SiMpLe-TeSt-StRiNg", "result":true}, + { "name":"invalid-all-lower","input":"other-string", "result":false}, + { "name":"invalid-all-upper","input":"OTHER-STRING", "result":false}, + { "name":"invalid-mixed-case","input":"oThEr-StRiNg", "result":false}, + { "name":"invalid-lower-wild","input":"simpele-test-string", "result":false}, + { "name":"invalid-upper-wild","input":"SIMPELE-TEST-STRING", "result":false}, + { "name":"invalid-mixed-case-wild","input":"SiMpeLe-TeSt-StRiNg", "result":false}, + ] + } + , + { + "name":"value=simple*string; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["simple*string"] + }, + "tests":[ + { "name":"all-lower","input":"simplestring", "result":true}, + { "name":"all-upper","input":"SIMPLESTRING", "result":true}, + { "name":"mixed-case","input":"SiMpLeStRiNg", "result":true}, + { "name":"all-lower-wild-exact","input":"simple*string", "result":true}, + { "name":"all-upper-wild-exact","input":"SIMPLE*STRING", "result":true}, + { "name":"mixed-case-wild-exact","input":"SiMpLe*StRiNg", "result":true}, + { "name":"all-lower-wild","input":"simple-test-string", "result":true}, + { "name":"all-upper-wild","input":"SIMPLE-TEST-STRING", "result":true}, + { "name":"mixed-case-wild","input":"SiMpLe-TeSt-StRiNg", "result":true}, + { "name":"invalid-all-lower","input":"other-simple-string", "result":false}, + { "name":"invalid-all-upper","input":"OTHER-SIMPLE-STRING", "result":false}, + { "name":"invalid-mixed-case","input":"oThEr-SiMpLe-StRiNg", "result":false}, + { "name":"invalid-lower-wild","input":"simpele-test-string", "result":false}, + { "name":"invalid-upper-wild","input":"SIMPELE-TEST-STRING", "result":false}, + { "name":"invalid-mixed-case-wild","input":"SiMpeLe-TeSt-StRiNg", "result":false}, + ] + } + , + { + "name":"value=simple*test*string; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["simple*test*string"] + }, + "tests":[ + { "name":"all-lower","input":"simpleteststring", "result":true}, + { "name":"all-upper","input":"SIMPLETESTSTRING", "result":true}, + { "name":"mixed-case","input":"SiMpLeTeStStRiNg", "result":true}, + { "name":"all-lower-wild-exact","input":"simple*test*string", "result":true}, + { "name":"all-upper-wild-exact","input":"SIMPLE*TEST*STRING", "result":true}, + { "name":"mixed-case-wild-exact","input":"SiMpLe*TeSt*StRiNg", "result":true}, + { "name":"all-lower-wild","input":"simple-test-string", "result":true}, + { "name":"all-upper-wild","input":"SIMPLE-TEST-STRING", "result":true}, + { "name":"mixed-case-wild","input":"SiMpLe-TeSt-StRiNg", "result":true}, + { "name":"all-lower-wild","input":"simple-long-test-cool-string", "result":true}, + { "name":"all-upper-wild","input":"SIMPLE-LONG-TEST-COOL-STRING", "result":true}, + { "name":"mixed-case-wild","input":"SiMpLe-LoNg-TeSt-CoOl-StRiNg", "result":true}, + { "name":"invalid-all-lower","input":"other-simple-test-string", "result":false}, + { "name":"invalid-all-upper","input":"OTHER-SIMPLE-TEST-STRING", "result":false}, + { "name":"invalid-mixed-case","input":"oThEr-SiMpLe-TeSt-StRiNg", "result":false}, + { "name":"invalid-lower-wild","input":"simpele-test-string", "result":false}, + { "name":"invalid-upper-wild","input":"SIMPELE-TEST-STRING", "result":false}, + { "name":"invalid-mixed-case-wild","input":"SiMpeLe-TeSt-StRiNg", "result":false}, + ] + } + , + { + "name":"value=*simple; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["*simple"] + }, + "tests":[ + { "name":"all-lower","input":"teststringsimple", "result":true}, + { "name":"all-upper","input":"TESTSTRINGSIMPLE", "result":true}, + { "name":"mixed-case","input":"TeStStRiNgSiMpLe", "result":true}, + { "name":"all-lower","input":"simpleteststringsimple", "result":true}, + { "name":"all-upper","input":"SIMPLETESTSTRINGSIMPLE", "result":true}, + { "name":"mixed-case","input":"SiMpLeTeStStRiNgSiMpLe", "result":true}, + { "name":"invalid-all-lower","input":"simpleteststring", "result":false}, + { "name":"invalid-all-upper","input":"SIMPLETESTSTRING", "result":false}, + { "name":"invalid-mixed-case","input":"SiMpLeTeStStRiNg", "result":false}, + { "name":"invalid-all-lower-wild-exact","input":"simple*test*string", "result":false}, + { "name":"invalid-all-upper-wild-exact","input":"SIMPLE*TEST*STRING", "result":false}, + { "name":"invalid-mixed-case-wild-exact","input":"SiMpLeTeStStRiNg", "result":false}, + { "name":"invalid-all-lower-wild","input":"simple-test-string", "result":false}, + { "name":"invalid-all-upper-wild","input":"SIMPLE-TEST-STRING", "result":false}, + { "name":"invalid-mixed-case-wild","input":"SiMpLe-TeSt-StRiNg", "result":false}, + { "name":"invalid-all-lower","input":"other-simple-string", "result":false}, + { "name":"invalid-all-upper","input":"OTHER-SIMPLE-STRING", "result":false}, + { "name":"invalid-mixed-case","input":"oThEr-SiMpLe-StRiNg", "result":false}, + { "name":"invalid-lower-wild","input":"simpele-test-string", "result":false}, + { "name":"invalid-upper-wild","input":"SIMPELE-TEST-STRING", "result":false}, + { "name":"invalid-mixed-case-wild","input":"SiMpeLe-TeSt-StRiNg", "result":false}, + ] + } + , + { + "name":"value=simple*; wildCard=true; ignoreCase=false", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":false}, + "policyResource":{ + "values": ["simple*"] + }, + "tests":[ + { "name":"all-lower","input":"simple", "result":true}, + { "name":"all-upper","input":"SIMPLE", "result":false}, + { "name":"mixed-case","input":"SiMpLe", "result":false}, + { "name":"all-lower-wild","input":"simple-test-string", "result":true}, + { "name":"all-upper-wild","input":"SIMPLE-TEST-STRING", "result":false}, + { "name":"mixed-case-wild","input":"SiMpLe-TeSt-StRiNg", "result":false}, + { "name":"invalid-all-lower","input":"other-string", "result":false}, + { "name":"invalid-all-upper","input":"OTHER-STRING", "result":false}, + { "name":"invalid-mixed-case","input":"oThEr-StRiNg", "result":false}, + { "name":"invalid-lower-wild","input":"simpele-test-string", "result":false}, + { "name":"invalid-upper-wild","input":"SIMPELE-TEST-STRING", "result":false}, + { "name":"invalidmixed-case-wild","input":"SiMpeLe-TeSt-StRiNg", "result":false}, + ] + } + , + { + "name":"value=simple?; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["simple?"] + }, + "tests":[ + { "name":"all-lower","input":"simple1", "result":true}, + { "name":"all-upper","input":"SIMPLE1", "result":true}, + { "name":"mixed-case","input":"SiMpLe1", "result":true}, + { "name":"all-lower-wild-exact","input":"simple?", "result":true}, + { "name":"all-upper-wild-exact","input":"SIMPLE?", "result":true}, + { "name":"mixed-case-wild-exact","input":"SiMpLe?", "result":true}, + { "name":"invalid-all-lower","input":"simple", "result":false}, + { "name":"invalid-all-upper","input":"SIMPLE", "result":false}, + { "name":"invalid-mixed-case","input":"SiMpLe", "result":false}, + { "name":"invalid-all-lower","input":"simple11", "result":false}, + { "name":"invalid-all-upper","input":"SIMPLE11", "result":false}, + { "name":"invalid-mixed-case","input":"SiMpLe11", "result":false}, + { "name":"invalid-all-lower-wild","input":"simple-test-string", "result":false}, + { "name":"invalid-all-upper-wild","input":"SIMPLE-TEST-STRING", "result":false}, + { "name":"invalid-mixed-case-wild","input":"SiMpLe-TeSt-StRiNg", "result":false}, + { "name":"invalid-all-lower","input":"other-string", "result":false}, + { "name":"invalid-all-upper","input":"OTHER-STRING", "result":false}, + { "name":"invalid-mixed-case","input":"oThEr-StRiNg", "result":false}, + { "name":"invalid-lower-wild","input":"simpele-test-string", "result":false}, + { "name":"invalid-upper-wild","input":"SIMPELE-TEST-STRING", "result":false}, + { "name":"invalid-mixed-case-wild","input":"SiMpeLe-TeSt-StRiNg", "result":false}, + ] + } + , + { + "name":"value=simple?string; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["simple?string"] + }, + "tests":[ + { "name":"all-lower","input":"simple1string", "result":true}, + { "name":"all-upper","input":"SIMPLE1STRING", "result":true}, + { "name":"mixed-case","input":"SiMpLe1StRiNg", "result":true}, + { "name":"all-lower-wild-exact","input":"simple?string", "result":true}, + { "name":"all-upper-wild-exact","input":"SIMPLE?STRING", "result":true}, + { "name":"mixed-case-wild-exact","input":"SiMpLe?StRiNg", "result":true}, + { "name":"all-lower-wild","input":"simple-test-string", "result":false}, + { "name":"all-upper-wild","input":"SIMPLE-TEST-STRING", "result":false}, + { "name":"mixed-case-wild","input":"SiMpLe-TeSt-StRiNg", "result":false}, + { "name":"invalid-all-lower","input":"other-string-simple", "result":false}, + { "name":"invalid-all-upper","input":"OTHER-STRING-simple", "result":false}, + { "name":"invalid-mixed-case","input":"oThEr-StRiNg-simple", "result":false}, + { "name":"invalid-lower-wild","input":"simpele-test-string", "result":false}, + { "name":"invalid-upper-wild","input":"SIMPELE-TEST-STRING", "result":false}, + { "name":"invalid-mixed-case-wild","input":"SiMpeLe-TeSt-StRiNg", "result":false}, + ] + } + , + { + "name":"value=simple?string?; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["simple?string?"] + }, + "tests":[ + { "name":"all-lower","input":"simple1string1", "result":true}, + { "name":"all-upper","input":"SIMPLE1STRING1", "result":true}, + { "name":"mixed-case","input":"SiMpLe1StRiNg1", "result":true}, + { "name":"all-lower-wild-exact","input":"simple?string?", "result":true}, + { "name":"all-upper-wild-exact","input":"SIMPLE?STRING?", "result":true}, + { "name":"mixed-case-wild-exact","input":"SiMpLe*StRiNg?", "result":true}, + { "name":"all-lower","input":"simple1string", "result":false}, + { "name":"all-upper","input":"SIMPLE1STRING11", "result":false}, + { "name":"mixed-case","input":"SiMpLe1StRiNg11", "result":false}, + { "name":"all-lower-wild","input":"simple-test-string", "result":false}, + { "name":"all-upper-wild","input":"SIMPLE-TEST-STRING", "result":false}, + { "name":"mixed-case-wild","input":"SiMpLe-TeSt-StRiNg", "result":false}, + { "name":"invalid-all-lower","input":"other-string", "result":false}, + { "name":"invalid-all-upper","input":"OTHER-STRING", "result":false}, + { "name":"invalid-mixed-case","input":"oThEr-StRiNg", "result":false}, + { "name":"invalid-lower-wild","input":"simpele-test-string", "result":false}, + { "name":"invalid-upper-wild","input":"SIMPELE-TEST-STRING", "result":false}, + { "name":"invalid-mixed-case-wild","input":"SiMpeLe-TeSt-StRiNg", "result":false}, + ] + } + , + { + "name":"value=simple1,simple2,wild*,onechar?,star*onechar?; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerDefaultResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["simple1","simple2","wild*","onechar?","star*onechar?"] + }, + "tests":[ + { "name":"val1-all-lower","input":"simple1", "result":true}, + { "name":"val2-all-lower","input":"simple2", "result":true}, + { "name":"val3-all-lower","input":"wild*", "result":true}, + { "name":"val4-all-lower","input":"onechar?", "result":true}, + { "name":"val5-all-lower","input":"star*onechar?", "result":true}, + { "name":"val3-all-lower-wild","input":"wild", "result":true}, + { "name":"val3-all-lower-wild","input":"wildstring", "result":true}, + { "name":"val4-all-lower","input":"onechar1", "result":true}, + { "name":"val5-all-lower","input":"star-studded-onechar1", "result":true}, + { "name":"val1-captialize","input":"Simple1", "result":true}, + { "name":"val1-all-upper","input":"SIMPLE1", "result":true}, + { "name":"val3-captialize-wild","input":"Wild", "result":true}, + { "name":"val3-mixed-case-wild","input":"WiLdStR", "result":true}, + { "name":"val1-mixed-case","input":"SiMpLe1", "result":true}, + { "name":"val1-mixed-case","input":"sImPlE1", "result":true}, + { "name":"val1-extra-at-end","input":"simple11", "result":false}, + { "name":"val1-extra-at-begin","input":"1simple1", "result":false}, + { "name":"val3-extra-at-begin-wild","input":"mywildstring", "result":false}, + { "name":"val3-extra-at-begin-wild","input":"mywildstring", "result":false}, + { "name":"val4-all-lower","input":"onechar11", "result":false}, + { "name":"val5-all-lower","input":"star-studded-onechar11", "result":false}, + ] + } + ] +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0ee29405/agents-common/src/test/resources/resourcematcher/test_resourcematcher_path.json ---------------------------------------------------------------------- diff --git a/agents-common/src/test/resources/resourcematcher/test_resourcematcher_path.json b/agents-common/src/test/resources/resourcematcher/test_resourcematcher_path.json new file mode 100644 index 0000000..352ed52 --- /dev/null +++ b/agents-common/src/test/resources/resourcematcher/test_resourcematcher_path.json @@ -0,0 +1,290 @@ +{ + "testCases":[ + { + "name":"value=/; isRecursive=false; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerPathResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["/"], + "isRecursive":false + }, + "tests":[ + { "name":"exact-path","input":"/", "result":true}, + { "name":"child-path","input":"/path1", "result":false}, + { "name":"grand-child-path","input":"/path1/path2", "result":false}, + { "name":"invalid-path","input":"path1", "result":false}, + ] + } + , + { + "name":"value=/path1; isRecursive=false; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerPathResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["/path1"], + "isRecursive":false + }, + "tests":[ + { "name":"parent-path","input":"/", "result":false}, + { "name":"exact-path","input":"/path1", "result":true}, + { "name":"child-path","input":"/path1/path2", "result":false}, + { "name":"grand-child-path","input":"/path1/path2/path3", "result":false}, + { "name":"invalid-path","input":"path1", "result":false}, + ] + } + , + { + "name":"value=/path1/*; isRecursive=false; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerPathResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["/path1/*"], + "isRecursive":false + }, + "tests":[ + { "name":"parent-path","input":"/", "result":false}, + { "name":"exact-path","input":"/path1/*", "result":true}, + { "name":"child-path","input":"/path1/path2", "result":true}, + { "name":"grand-child-path","input":"/path1/path2/path3", "result":true}, + { "name":"sibling-path","input":"/path2/path3/path4", "result":false}, + { "name":"invalid-path","input":"path1", "result":false}, + ] + } + , + { + "name":"value=/; isRecursive=true; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerPathResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["/"], + "isRecursive":true + }, + "tests":[ + { "name":"exact-path","input":"/", "result":true}, + { "name":"child-path","input":"/path1", "result":true}, + { "name":"grand-child-path","input":"/path1/path2", "result":true}, + { "name":"invalid-path","input":"path1", "result":false}, + ] + } + , + { + "name":"value=/path1; isRecursive=true; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerPathResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["/path1"], + "isRecursive":true + }, + "tests":[ + { "name":"parent-path","input":"/", "result":false}, + { "name":"exact-path","input":"/path1", "result":true}, + { "name":"child-path","input":"/path1/path2", "result":true}, + { "name":"grand-child-path","input":"/path1/path2/path3", "result":true}, + { "name":"exact-path-upper-case","input":"/PATH1", "result":true}, + { "name":"child-path-mixed-case","input":"/PaTh1/pAtH2", "result":true}, + { "name":"grand-child-path-camel-case","input":"/Path1/Path2/Path3", "result":true}, + { "name":"sibling-path","input":"/path2", "result":false}, + { "name":"invalid-path","input":"path1", "result":false}, + ] + } + , + { + "name":"value=/path*; isRecursive=true; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerPathResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["/path*"], + "isRecursive":true + }, + "tests":[ + { "name":"parent-path","input":"/", "result":false}, + { "name":"exact-path","input":"/path*", "result":true}, + { "name":"wild-path","input":"/path1", "result":true}, + { "name":"wild-path","input":"/path-to-success", "result":true}, + { "name":"child-path","input":"/path-to-success/is-slow", "result":true}, + { "name":"grand-child-path","input":"/path-to-success/is-slow/and-fun", "result":true}, + { "name":"wild-path-mixed-case","input":"/PaTh-To-SuCcEsS", "result":true}, + { "name":"child-path-upper-case","input":"/PATH-TO-SUCCESS/IS-SLOW", "result":true}, + { "name":"grand-child-path-camel-case","input":"/Path-To-Success/Is-Slow/And-Fun", "result":true}, + { "name":"unmatched-path","input":"/pat1ha", "result":false}, + { "name":"unmatched-child-path","input":"/pat1ha/path2b", "result":false}, + { "name":"invalid-path","input":"path1", "result":false}, + ] + } + , + { + "name":"value=/path?; isRecursive=true; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerPathResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["/path?"], + "isRecursive":true + }, + "tests":[ + { "name":"parent-path","input":"/", "result":false}, + { "name":"exact-path","input":"/path?", "result":true}, + { "name":"wild-path","input":"/path1", "result":true}, + { "name":"child-path","input":"/path1/path2", "result":true}, + { "name":"grand-child-path","input":"/path1/path2/path3", "result":true}, + { "name":"wild-path-mixed-case","input":"/PaTh1", "result":true}, + { "name":"child-path-upper-case","input":"/PATH1/PATH2", "result":true}, + { "name":"grand-child-path-camel-case","input":"/Path1/Path2/Path3", "result":true}, + { "name":"unmatched-path","input":"/path1a", "result":false}, + { "name":"unmatched-child-path","input":"/path1a/path2b", "result":false}, + { "name":"invalid-path","input":"path1", "result":false}, + ] + } + , + { + "name":"value=/public/*test; isRecursive=true; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerPathResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["/public/*test"], + "isRecursive":true + }, + "tests":[ + { "name":"parent-path","input":"/", "result":false}, + { "name":"exact-path","input":"/public/*test", "result":true}, + { "name":"wild-path","input":"/public/first-test", "result":true}, + { "name":"wild-path","input":"/public/second-test", "result":true}, + { "name":"wild-path","input":"/public/last-test", "result":true}, + { "name":"child-path","input":"/public/new/first-test", "result":true}, + { "name":"grand-child-path","input":"/public/archive/2008/first-test", "result":true}, + { "name":"unmatched-path","input":"/pat1ha", "result":false}, + { "name":"unmatched-child-path","input":"/pat1ha/path2b", "result":false}, + { "name":"invalid-path","input":"path1", "result":false}, + ] + } + , + { + "name":"value=/public/*test/*result; isRecursive=true; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerPathResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["/public/*test/*result"], + "isRecursive":true + }, + "tests":[ + { "name":"parent-path","input":"/", "result":false}, + { "name":"parent-path","input":"/public/*test", "result":false}, + { "name":"parent-path","input":"/public/first-test", "result":false}, + { "name":"parent-path","input":"/public/second-test", "result":false}, + { "name":"parent-path","input":"/public/last-test", "result":false}, + { "name":"grand-parent-branch-path","input":"/public/new/first-test", "result":false}, + { "name":"grand-parent-branch-path","input":"/public/new/first-test/result", "result":true}, + { "name":"grand-parent-branch-grand-child-path","input":"/public/archive/2008/first-test/result", "result":true}, + { "name":"exact-path","input":"/public/*test/*result", "result":true}, + { "name":"wild-path","input":"/public/first-test/good-result", "result":true}, + { "name":"wild-path","input":"/public/second-test/better-result", "result":true}, + { "name":"wild-path","input":"/public/last-test/best-result", "result":true}, + { "name":"child-path","input":"/public/first-test/good-result/details", "result":true}, + { "name":"grand-child-path","input":"/public/last-test/best-result/details", "result":true}, + { "name":"unmatched-path","input":"/pat1ha", "result":false}, + { "name":"unmatched-child-path","input":"/pat1ha/path2b", "result":false}, + { "name":"invalid-path","input":"path1", "result":false}, + ] + } + , + { + "name":"value=/public/*test/*result; isRecursive=false; wildCard=true; ignoreCase=true", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerPathResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true}, + "policyResource":{ + "values": ["/public/*test/*result"], + "isRecursive":true + }, + "tests":[ + { "name":"parent-path","input":"/", "result":false}, + { "name":"parent-path","input":"/public/*test", "result":false}, + { "name":"parent-path","input":"/public/first-test", "result":false}, + { "name":"parent-path","input":"/public/second-test", "result":false}, + { "name":"parent-path","input":"/public/last-test", "result":false}, + { "name":"grand-parent-branch-path","input":"/public/new/first-test", "result":false}, + { "name":"grand-parent-branch-path","input":"/public/new/first-test/result", "result":true}, + { "name":"grand-parent-branch-grand-child-path","input":"/public/archive/2008/first-test/result", "result":true}, + { "name":"exact-path","input":"/public/*test/*result", "result":true}, + { "name":"wild-path","input":"/public/first-test/good-result", "result":true}, + { "name":"wild-path","input":"/public/second-test/better-result", "result":true}, + { "name":"wild-path","input":"/public/last-test/best-result", "result":true}, + { "name":"child-path","input":"/public/first-test/good-result/details", "result":true}, # TODO: should this be false since isRecursive=false? + { "name":"grand-child-path","input":"/public/last-test/best-result/details", "result":true}, # TODO: should this be false since isRecursive=false? + { "name":"unmatched-path","input":"/pat1ha", "result":false}, + { "name":"unmatched-child-path","input":"/pat1ha/path2b", "result":false}, + { "name":"invalid-path","input":"path1", "result":false}, + ] + } + , + { + "name":"value=root; isRecursive=false; wildCard=true; ignoreCase=true; pathSeparatorChar=.", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerPathResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true, "pathSeparatorChar":"."}, + "policyResource":{ + "values": ["root"], + "isRecursive":false + }, + "tests":[ + { "name":"exact-path","input":"root", "result":true}, + { "name":"child-path","input":"root.default", "result":false}, + { "name":"grand-child-path","input":"root.default.mycompany", "result":false}, + { "name":"invalid-path","input":"path1", "result":false}, + ] + } + , + { + "name":"value=root.default.mycompany*; isRecursive=false; wildCard=true; ignoreCase=true; pathSeparatorChar=.", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerPathResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true, "pathSeparatorChar":"."}, + "policyResource":{ + "values": ["root.default.mycompany*"], + "isRecursive":false + }, + "tests":[ + { "name":"parent-path","input":"root", "result":false}, + { "name":"parent-path","input":"root.default", "result":false}, + { "name":"exact-path","input":"root.default.mycompany*", "result":true}, + { "name":"wild-path","input":"root.default.mycompany1", "result":true}, + { "name":"child-path","input":"root.default.mycompany1.test", "result":true}, # TODO: should this be false since isRecursive=false + { "name":"child-path","input":"root.default.mycompany1.dev", "result":true}, # TODO: should this be false since isRecursive=false + { "name":"sibling-path","input":"root.default.othercompany1.dev", "result":false}, + { "name":"invalid-path","input":"path1", "result":false}, + ] + } + , + { + "name":"value=root; isRecursive=true; wildCard=true; ignoreCase=true; pathSeparatorChar=.", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerPathResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true, "pathSeparatorChar":"."}, + "policyResource":{ + "values": ["root"], + "isRecursive":true + }, + "tests":[ + { "name":"exact-path","input":"root", "result":true}, + { "name":"child-path","input":"root.default", "result":true}, + { "name":"grand-child-path","input":"root.default.mycompany", "result":true}, + { "name":"invalid-path","input":"path1", "result":false}, + ] + } + , + { + "name":"value=root.default.mycompany*; isRecursive=true; wildCard=true; ignoreCase=true; pathSeparatorChar=.", + "matcher":"org.apache.ranger.plugin.resourcematcher.RangerPathResourceMatcher", + "matcherOptions":{"wildCard":true, "ignoreCase":true, "pathSeparatorChar":"."}, + "policyResource":{ + "values": ["root.default.mycompany*"], + "isRecursive":true + }, + "tests":[ + { "name":"parent-path","input":"root", "result":false}, + { "name":"parent-path","input":"root.default", "result":false}, + { "name":"exact-path","input":"root.default.mycompany*", "result":true}, + { "name":"wild-path","input":"root.default.mycompany1", "result":true}, + { "name":"child-path","input":"root.default.mycompany1.test", "result":true}, + { "name":"child-path","input":"root.default.mycompany1.dev", "result":true}, + { "name":"sibling-path","input":"root.default.othercompany1.dev", "result":false}, + { "name":"invalid-path","input":"path1", "result":false}, + ] + } + ] +} \ No newline at end of file
