public Object getFieldValue(_Fields field) { switch (field) { case TYPE: return Byte.valueOf(getType()); case PATH_ELEMENT: return getPathElement(); case CHILDREN: return getChildren(); case AUTHZ_OBJS: return getAuthzObjs(); } throw new IllegalStateException(); }
private void buildPathsImageMap(Map<Integer, TPathEntry> nodeMap, TPathEntry node, String path, Map<String, Collection<String>> pathsImage, boolean includeLeadingSlash) { path = path.isEmpty()?node.getPathElement(): (path + node.getPathElement() + "/"); TPathEntry tempNode = node; for(int childVal:node.getChildren()) { node = nodeMap.get(childVal); buildPathsImageMap(nodeMap, node, path, pathsImage, includeLeadingSlash); } if(tempNode.getChildren().isEmpty() && node.getAuthzObjs() != null) { for (String authz : node.getAuthzObjs()) { if (!pathsImage.containsKey(authz)) { pathsImage.put(authz, new LinkedList<>()); } if(includeLeadingSlash) { pathsImage.get(authz).add(path.replaceAll("(/+$)", "")); } else { pathsImage.get(authz).add(path.replaceAll("(^/+)|(/+$)", "")); } } } }
boolean isChildPrefix = hasCrossedPrefix; if (!hasCrossedPrefix) { child = parent.getChildren().get(tChild.getPathElement()); child = new Entry(parent, tChild.getPathElement(), EntryType.fromByte(tChild.getType()), tChild.getAuthzObjs());
int rootId = pathDump.getRootId(); TPathEntry root = nodeMap.get(rootId); assertEquals("/", root.getPathElement()); List<Integer> children; TPathEntry child = root; assertEquals(1, children.size()); child = nodeMap.get(children.get(0)); assertEquals(path, child.getPathElement());
buildPathsImageMap(nodeMap, root, "", pathImage, true); assertEquals("/", root.getPathElement()); assertEquals(9, nodeMap.size());//Tree size assertEquals(1, pathsUpdate.getImgNum()); buildPathsImageMap(nodeMap, root, "", pathImage, true); assertEquals("/", root.getPathElement()); assertEquals(8, nodeMap.size());//Tree size assertEquals(2, pathsUpdate.getImgNum());
assertEquals("/", root.getPathElement());
int rootId = pathDump.getRootId(); TPathEntry root = nodeMap.get(rootId); assertEquals("/", root.getPathElement());
buildPathsImageMap(nodeMap, root, "", pathsImage, true); assertEquals("/", root.getPathElement()); assertEquals(11, nodeMap.size());//Tree size assertEquals(2, pathsImage.size()); buildPathsImageMap(nodeMap, root, "", pathsImage, false); assertEquals("/", root.getPathElement()); assertEquals(12, nodeMap.size());//Tree size assertEquals(3, pathsImage.size());
buildPathsImageMap(nodeMap, root, "", pathImage, false); assertEquals("/", root.getPathElement()); assertEquals(10, nodeMap.size());//Tree size assertEquals(2, pathImage.size()); buildPathsImageMap(nodeMap, root, "", pathImage, false); assertEquals("/", root.getPathElement()); assertEquals(9, nodeMap.size());//Tree size assertEquals(2, pathImage.size());
@Test public void testIsAuthzPathsMappingEmpty() throws Exception { // Add "db1.table1" authzObj UniquePathsUpdate addUpdate = new UniquePathsUpdate("u1",1, false); addUpdate.newPathChange("db1.table"). addToAddPaths(Arrays.asList("db1", "tbl1")); addUpdate.newPathChange("db1.table"). addToAddPaths(Arrays.asList("db1", "tbl2")); // Persist an empty image so that we can add paths to it. sentryStore.persistFullPathsImage(new HashMap<String, Collection<String>>(), 0); assertEquals(sentryStore.isAuthzPathsMappingEmpty(), true); sentryStore.addAuthzPathsMapping("db1.table", Sets.newHashSet("db1/tbl1", "db1/tbl2"), addUpdate); String[]prefixes = {"/"}; PathsUpdate pathsUpdate = sentryStore.retrieveFullPathsImageUpdate(prefixes); TPathsDump pathsDump = pathsUpdate.toThrift().getPathsDump(); Map<Integer, TPathEntry>nodeMap = pathsDump.getNodeMap(); TPathEntry root = nodeMap.get(pathsDump.getRootId()); Map<String, Collection<String>> pathImage = new HashMap<>(); buildPathsImageMap(nodeMap, root, "", pathImage, false); assertEquals("/", root.getPathElement()); assertEquals(4, nodeMap.size());//Tree size assertEquals(1, pathImage.size()); assertEquals(2, pathImage.get("db1.table").size()); assertEquals(2, sentryStore.getMPaths().size()); assertEquals(sentryStore.isAuthzPathsMappingEmpty(), false); sentryStore.clearAllTables(); assertEquals(sentryStore.isAuthzPathsMappingEmpty(), true); }
buildPathsImageMap(nodeMap, root, "", pathsImage, false); assertEquals("/", root.getPathElement()); assertEquals(8, nodeMap.size());//Tree size assertEquals(2, pathsImage.size()); buildPathsImageMap(nodeMap, root, "", pathsImage, false); assertEquals("/", root.getPathElement()); assertEquals(9, nodeMap.size());//Tree size assertEquals(2, pathsImage.size());
buildPathsImageMap(nodeMap, root, "", pathImage, false); assertEquals("/", root.getPathElement()); assertEquals(4, nodeMap.size());//Tree size assertEquals(1, pathImage.size()); buildPathsImageMap(nodeMap, root, "", pathImage, false); assertEquals("/", root.getPathElement()); assertEquals(3, nodeMap.size());//Tree size assertEquals(1, pathImage.size()); buildPathsImageMap(nodeMap, root, "", pathImage, false); assertEquals("/", root.getPathElement()); assertEquals(1, nodeMap.size());//Tree size assertEquals(0, pathImage.size());
buildPathsImageMap(nodeMap, root, "", pathsImage, false); assertEquals("/", root.getPathElement()); assertEquals(8, nodeMap.size());//Tree size assertEquals(2, pathsImage.size()); buildPathsImageMap(nodeMap, root, "", pathsImage, false); assertEquals("/", root.getPathElement()); assertEquals(9, nodeMap.size());//Tree size assertEquals(2, pathsImage.size()); buildPathsImageMap(nodeMap, root, "", pathsImage, false); assertEquals("/", root.getPathElement()); assertEquals(9, nodeMap.size());//Tree size assertEquals(2, pathsImage.size()); buildPathsImageMap(nodeMap, root, "", pathsImage, false); assertEquals("/", root.getPathElement()); assertEquals(9, nodeMap.size());//Tree size assertEquals(2, pathsImage.size());
assertEquals("/", root.getPathElement()); assertEquals(1, pathImage.size()); assertEquals(2, pathImage.get("db1.table").size()); buildPathsImageMap(nodeMap, root, "", pathImage, false); assertEquals("/", root.getPathElement()); assertEquals(3, nodeMap.size());//Tree size assertEquals(1, pathImage.size()); buildPathsImageMap(nodeMap, root, "", pathImage, false); assertEquals("/", root.getPathElement()); assertEquals(1, nodeMap.size());//Tree size assertEquals(0, pathImage.size());