Repository: incubator-ranger
Updated Branches:
  refs/heads/master 96dc7f4b0 -> ec749f09e


RANGER-970 Adding ability to transform users and groups when using file source

Signed-off-by: Velmurugan Periasamy <[email protected]>


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

Branch: refs/heads/master
Commit: ec749f09e0b1b88787690476ea1aca92e603bf32
Parents: 96dc7f4
Author: Bryan Bende <[email protected]>
Authored: Thu May 5 13:11:43 2016 -0400
Committer: Velmurugan Periasamy <[email protected]>
Committed: Mon May 9 08:20:28 2016 -0400

----------------------------------------------------------------------
 .../process/LdapUserGroupBuilder.java           |  47 +-----
 .../process/FileSourceUserGroupBuilder.java     |  23 ++-
 .../usergroupsync/AbstractUserGroupSource.java  |  70 ++++++++
 .../process/FileSourceUserGroupBuilderTest.java | 160 +++++++++++++++++++
 .../ranger/usergroupsync/LdapUserGroupTest.java |  34 +++-
 .../PolicyMgrUserGroupBuilderTest.java          |  18 ++-
 ugsync/src/test/resources/usergroups-dns.csv    |   4 +
 .../test/resources/usergroups-other-delim.csv   |   4 +
 ugsync/src/test/resources/usergroups.csv        |   4 +
 ugsync/src/test/resources/usergroups.json       |   6 +
 10 files changed, 316 insertions(+), 54 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/ec749f09/ugsync/src/main/java/org/apache/ranger/ldapusersync/process/LdapUserGroupBuilder.java
----------------------------------------------------------------------
diff --git 
a/ugsync/src/main/java/org/apache/ranger/ldapusersync/process/LdapUserGroupBuilder.java
 
b/ugsync/src/main/java/org/apache/ranger/ldapusersync/process/LdapUserGroupBuilder.java
index b12d209..0b76883 100644
--- 
a/ugsync/src/main/java/org/apache/ranger/ldapusersync/process/LdapUserGroupBuilder.java
+++ 
b/ugsync/src/main/java/org/apache/ranger/ldapusersync/process/LdapUserGroupBuilder.java
@@ -47,17 +47,14 @@ import javax.naming.ldap.StartTlsResponse;
 
 import org.apache.log4j.Logger;
 import org.apache.ranger.unixusersync.config.UserGroupSyncConfig;
-import org.apache.ranger.usergroupsync.Mapper;
+import org.apache.ranger.usergroupsync.AbstractUserGroupSource;
 import org.apache.ranger.usergroupsync.UserGroupSink;
-import org.apache.ranger.usergroupsync.UserGroupSource;
 
-public class LdapUserGroupBuilder implements UserGroupSource {
+public class LdapUserGroupBuilder extends AbstractUserGroupSource {
        
        private static final Logger LOG = 
Logger.getLogger(LdapUserGroupBuilder.class);
        
        private static final int PAGE_SIZE = 500;
-       
-       private UserGroupSyncConfig config = UserGroupSyncConfig.getInstance();
 
   private String ldapUrl;
   private String ldapBindDn;
@@ -100,9 +97,7 @@ public class LdapUserGroupBuilder implements UserGroupSource 
{
        private boolean groupNameLowerCaseFlag = false ;
 
   private boolean  groupUserMapSyncEnabled = false;
-  
-  Mapper userNameRegExInst = null;
-  Mapper groupNameRegExInst = null;
+
   private Map<String, UserInfo> userGroupMap;
   
        public static void main(String[] args) throws Throwable {
@@ -111,6 +106,7 @@ public class LdapUserGroupBuilder implements 
UserGroupSource {
        }
        
        public LdapUserGroupBuilder() {
+               super();
                LOG.info("LdapUserGroupBuilder created") ;
                
                String userNameCaseConversion = 
config.getUserNameCaseConversion() ;
@@ -132,41 +128,6 @@ public class LdapUserGroupBuilder implements 
UserGroupSource {
                    groupNameCaseConversionFlag = true ;
                    groupNameLowerCaseFlag = 
UserGroupSyncConfig.UGSYNC_LOWER_CASE_CONVERSION_VALUE.equalsIgnoreCase(groupNameCaseConversion)
 ;
                }
-               
-               String mappingUserNameHandler = 
config.getUserSyncMappingUserNameHandler();
-               try {
-                       if (mappingUserNameHandler != null) {
-                               Class<Mapper> regExClass = 
(Class<Mapper>)Class.forName(mappingUserNameHandler);
-                               userNameRegExInst = regExClass.newInstance();
-                               if (userNameRegExInst != null) {
-                                       
userNameRegExInst.init(UserGroupSyncConfig.SYNC_MAPPING_USERNAME);
-                               } else {
-                                       LOG.error("RegEx handler instance for 
username is null!");
-                               }
-                       }
-               } catch (ClassNotFoundException cne) {
-                       LOG.error("Failed to load " + mappingUserNameHandler + 
" " + cne);
-               } catch (Throwable te) {
-                       LOG.error("Failed to instantiate " + 
mappingUserNameHandler + " " + te);
-               }
-
-               String mappingGroupNameHandler = 
config.getUserSyncMappingGroupNameHandler();
-               try {
-                       if (mappingGroupNameHandler != null) {
-                               Class<Mapper> regExClass = 
(Class<Mapper>)Class.forName(mappingGroupNameHandler);
-                               groupNameRegExInst = regExClass.newInstance();
-                               if (groupNameRegExInst != null) {
-                                       
groupNameRegExInst.init(UserGroupSyncConfig.SYNC_MAPPING_GROUPNAME);
-                               } else {
-                                       LOG.error("RegEx handler instance for 
groupname is null!");
-                               }
-                       }
-               } catch (ClassNotFoundException cne) {
-                       LOG.error("Failed to load " + mappingGroupNameHandler + 
" " + cne);
-               } catch (Throwable te) {
-                       LOG.error("Failed to instantiate " + 
mappingGroupNameHandler + " " + te);
-               }
-               
        }
 
        @Override

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/ec749f09/ugsync/src/main/java/org/apache/ranger/unixusersync/process/FileSourceUserGroupBuilder.java
----------------------------------------------------------------------
diff --git 
a/ugsync/src/main/java/org/apache/ranger/unixusersync/process/FileSourceUserGroupBuilder.java
 
b/ugsync/src/main/java/org/apache/ranger/unixusersync/process/FileSourceUserGroupBuilder.java
index 312f383..54e47f6 100644
--- 
a/ugsync/src/main/java/org/apache/ranger/unixusersync/process/FileSourceUserGroupBuilder.java
+++ 
b/ugsync/src/main/java/org/apache/ranger/unixusersync/process/FileSourceUserGroupBuilder.java
@@ -32,6 +32,7 @@ import org.apache.commons.csv.CSVParser;
 import org.apache.commons.csv.CSVRecord;
 import org.apache.log4j.Logger;
 import org.apache.ranger.unixusersync.config.UserGroupSyncConfig;
+import org.apache.ranger.usergroupsync.AbstractUserGroupSource;
 import org.apache.ranger.usergroupsync.UserGroupSink;
 import org.apache.ranger.usergroupsync.UserGroupSource;
 
@@ -39,11 +40,10 @@ import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gson.stream.JsonReader;
 
-public class FileSourceUserGroupBuilder  implements UserGroupSource {
+public class FileSourceUserGroupBuilder extends AbstractUserGroupSource {
        private static final Logger LOG = 
Logger.getLogger(FileSourceUserGroupBuilder.class) ;
 
        private Map<String,List<String>> user2GroupListMap     = new 
HashMap<String,List<String>>();
-       private UserGroupSyncConfig      config                = 
UserGroupSyncConfig.getInstance();
        private String                   userGroupFilename     = null;
        private long                     usergroupFileModified = 0 ;
 
@@ -67,6 +67,10 @@ public class FileSourceUserGroupBuilder  implements 
UserGroupSource {
                        filesourceUGBuilder.print(); 
                }
        }
+
+       public FileSourceUserGroupBuilder() {
+               super();
+       }
        
        @Override
        public void init() throws Throwable {
@@ -91,9 +95,22 @@ public class FileSourceUserGroupBuilder  implements 
UserGroupSource {
                buildUserGroupInfo();
 
                for (Map.Entry<String, List<String>> entry : 
user2GroupListMap.entrySet()) {
-                   String       user   = entry.getKey();
+                   String user = entry.getKey();
+
+                       if (userNameRegExInst != null) {
+                               user = userNameRegExInst.transform(user);
+                       }
+
                    List<String> groups = entry.getValue();
 
+                       if (groupNameRegExInst != null) {
+                               List<String> mappedGroups = new ArrayList<>();
+                               for (String group : groups) {
+                                       
mappedGroups.add(groupNameRegExInst.transform(group));
+                               }
+                               groups = mappedGroups;
+                       }
+
                    sink.addOrUpdateUser(user, groups);
                }
        }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/ec749f09/ugsync/src/main/java/org/apache/ranger/usergroupsync/AbstractUserGroupSource.java
----------------------------------------------------------------------
diff --git 
a/ugsync/src/main/java/org/apache/ranger/usergroupsync/AbstractUserGroupSource.java
 
b/ugsync/src/main/java/org/apache/ranger/usergroupsync/AbstractUserGroupSource.java
new file mode 100644
index 0000000..4a54e57
--- /dev/null
+++ 
b/ugsync/src/main/java/org/apache/ranger/usergroupsync/AbstractUserGroupSource.java
@@ -0,0 +1,70 @@
+/*
+ * 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.usergroupsync;
+
+import org.apache.log4j.Logger;
+import org.apache.ranger.unixusersync.config.UserGroupSyncConfig;
+
+public abstract class AbstractUserGroupSource implements UserGroupSource {
+
+    private static final Logger LOG = 
Logger.getLogger(AbstractUserGroupSource.class);
+
+    protected UserGroupSyncConfig config = UserGroupSyncConfig.getInstance();
+
+    protected Mapper userNameRegExInst = null;
+    protected Mapper groupNameRegExInst = null;
+
+
+    public AbstractUserGroupSource() {
+        String mappingUserNameHandler = 
config.getUserSyncMappingUserNameHandler();
+        try {
+            if (mappingUserNameHandler != null) {
+                Class<Mapper> regExClass = 
(Class<Mapper>)Class.forName(mappingUserNameHandler);
+                userNameRegExInst = regExClass.newInstance();
+                if (userNameRegExInst != null) {
+                    
userNameRegExInst.init(UserGroupSyncConfig.SYNC_MAPPING_USERNAME);
+                } else {
+                    LOG.error("RegEx handler instance for username is null!");
+                }
+            }
+        } catch (ClassNotFoundException cne) {
+            LOG.error("Failed to load " + mappingUserNameHandler + " " + cne);
+        } catch (Throwable te) {
+            LOG.error("Failed to instantiate " + mappingUserNameHandler + " " 
+ te);
+        }
+
+        String mappingGroupNameHandler = 
config.getUserSyncMappingGroupNameHandler();
+        try {
+            if (mappingGroupNameHandler != null) {
+                Class<Mapper> regExClass = 
(Class<Mapper>)Class.forName(mappingGroupNameHandler);
+                groupNameRegExInst = regExClass.newInstance();
+                if (groupNameRegExInst != null) {
+                    
groupNameRegExInst.init(UserGroupSyncConfig.SYNC_MAPPING_GROUPNAME);
+                } else {
+                    LOG.error("RegEx handler instance for groupname is null!");
+                }
+            }
+        } catch (ClassNotFoundException cne) {
+            LOG.error("Failed to load " + mappingGroupNameHandler + " " + cne);
+        } catch (Throwable te) {
+            LOG.error("Failed to instantiate " + mappingGroupNameHandler + " " 
+ te);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/ec749f09/ugsync/src/test/java/org/apache/ranger/unixusersync/process/FileSourceUserGroupBuilderTest.java
----------------------------------------------------------------------
diff --git 
a/ugsync/src/test/java/org/apache/ranger/unixusersync/process/FileSourceUserGroupBuilderTest.java
 
b/ugsync/src/test/java/org/apache/ranger/unixusersync/process/FileSourceUserGroupBuilderTest.java
new file mode 100644
index 0000000..65a339c
--- /dev/null
+++ 
b/ugsync/src/test/java/org/apache/ranger/unixusersync/process/FileSourceUserGroupBuilderTest.java
@@ -0,0 +1,160 @@
+/*
+ * 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.unixusersync.process;
+
+import static org.junit.Assert.*;
+
+import org.apache.ranger.unixusersync.config.UserGroupSyncConfig;
+import org.apache.ranger.usergroupsync.PolicyMgrUserGroupBuilderTest;
+import org.junit.Test;
+
+public class FileSourceUserGroupBuilderTest {
+
+    private UserGroupSyncConfig config = UserGroupSyncConfig.getInstance();
+
+    @Test
+    public void testUpdateSinkFromCsvFile() throws Throwable {
+        config.setProperty(UserGroupSyncConfig.UGSYNC_SOURCE_FILE_PROC, 
"src/test/resources/usergroups.csv");
+
+        FileSourceUserGroupBuilder fileBuilder = new 
FileSourceUserGroupBuilder();
+        fileBuilder.init();
+
+        PolicyMgrUserGroupBuilderTest sink = new 
PolicyMgrUserGroupBuilderTest();
+        sink.init();
+        fileBuilder.updateSink(sink);
+
+        assertEquals(4, sink.getTotalUsers());
+        assertEquals(2, sink.getTotalGroups());
+
+        assertTrue(sink.getAllUsers().contains("user1"));
+        assertTrue(sink.getAllUsers().contains("user2"));
+        assertTrue(sink.getAllUsers().contains("user3"));
+        assertTrue(sink.getAllUsers().contains("user4"));
+
+        assertTrue(sink.getAllGroups().contains("group1"));
+        assertTrue(sink.getAllGroups().contains("group2"));
+    }
+
+    @Test
+    public void testUpdateSinkFromCsvFileWithCustomDelimiter() throws 
Throwable {
+        config.setProperty(UserGroupSyncConfig.UGSYNC_SOURCE_FILE_PROC,
+                "src/test/resources/usergroups-other-delim.csv");
+        config.setProperty(UserGroupSyncConfig.UGSYNC_SOURCE_FILE_DELIMITER, 
"|");
+
+        FileSourceUserGroupBuilder fileBuilder = new 
FileSourceUserGroupBuilder();
+        fileBuilder.init();
+
+        PolicyMgrUserGroupBuilderTest sink = new 
PolicyMgrUserGroupBuilderTest();
+        sink.init();
+        fileBuilder.updateSink(sink);
+
+        assertEquals(4, sink.getTotalUsers());
+        assertEquals(2, sink.getTotalGroups());
+
+        assertTrue(sink.getAllUsers().contains("user1"));
+        assertTrue(sink.getAllUsers().contains("user2"));
+        assertTrue(sink.getAllUsers().contains("user3"));
+        assertTrue(sink.getAllUsers().contains("user4"));
+
+        assertTrue(sink.getAllGroups().contains("group1"));
+        assertTrue(sink.getAllGroups().contains("group2"));
+    }
+
+    @Test
+    public void testUpdateSinkFromCsvFileMisSpelledDelimiterProperty() throws 
Throwable {
+        config.setProperty(UserGroupSyncConfig.UGSYNC_SOURCE_FILE_PROC,
+                "src/test/resources/usergroups-other-delim.csv");
+        config.setProperty(UserGroupSyncConfig.UGSYNC_SOURCE_FILE_DELIMITERER, 
"|");
+
+        FileSourceUserGroupBuilder fileBuilder = new 
FileSourceUserGroupBuilder();
+        fileBuilder.init();
+
+        PolicyMgrUserGroupBuilderTest sink = new 
PolicyMgrUserGroupBuilderTest();
+        sink.init();
+        fileBuilder.updateSink(sink);
+
+        assertEquals(4, sink.getTotalUsers());
+        assertEquals(2, sink.getTotalGroups());
+
+        assertTrue(sink.getAllUsers().contains("user1"));
+        assertTrue(sink.getAllUsers().contains("user2"));
+        assertTrue(sink.getAllUsers().contains("user3"));
+        assertTrue(sink.getAllUsers().contains("user4"));
+
+        assertTrue(sink.getAllGroups().contains("group1"));
+        assertTrue(sink.getAllGroups().contains("group2"));
+    }
+
+    @Test
+    public void testUpdateSinkFromJsonFile() throws Throwable {
+        config.setProperty(UserGroupSyncConfig.UGSYNC_SOURCE_FILE_PROC, 
"src/test/resources/usergroups.json");
+
+        FileSourceUserGroupBuilder fileBuilder = new 
FileSourceUserGroupBuilder();
+        fileBuilder.init();
+
+        PolicyMgrUserGroupBuilderTest sink = new 
PolicyMgrUserGroupBuilderTest();
+        sink.init();
+        fileBuilder.updateSink(sink);
+
+        assertEquals(4, sink.getTotalUsers());
+        assertEquals(7, sink.getTotalGroups());
+
+        assertTrue(sink.getAllUsers().contains("user1"));
+        assertTrue(sink.getAllUsers().contains("user2"));
+        assertTrue(sink.getAllUsers().contains("user3"));
+        assertTrue(sink.getAllUsers().contains("user4"));
+
+        assertTrue(sink.getAllGroups().contains("group1"));
+        assertTrue(sink.getAllGroups().contains("group2"));
+        assertTrue(sink.getAllGroups().contains("group3"));
+        assertTrue(sink.getAllGroups().contains("group4"));
+        assertTrue(sink.getAllGroups().contains("group5"));
+        assertTrue(sink.getAllGroups().contains("group6"));
+        assertTrue(sink.getAllGroups().contains("group7"));
+    }
+
+    @Test
+    public void testUpdateSinkWithUserAndGroupMapping() throws Throwable {
+        config.setProperty(UserGroupSyncConfig.UGSYNC_SOURCE_FILE_PROC, 
"src/test/resources/usergroups-dns.csv");
+        config.setProperty(UserGroupSyncConfig.UGSYNC_SOURCE_FILE_DELIMITERER, 
"|");
+
+        config.setProperty(UserGroupSyncConfig.SYNC_MAPPING_USERNAME, 
"s/[=]/_/g");
+        config.setProperty(UserGroupSyncConfig.SYNC_MAPPING_USERNAME + ".1", 
"s/[,]//g");
+
+        config.setProperty(UserGroupSyncConfig.SYNC_MAPPING_GROUPNAME, 
"s/[=]//g");
+
+        FileSourceUserGroupBuilder fileBuilder = new 
FileSourceUserGroupBuilder();
+        fileBuilder.init();
+
+        PolicyMgrUserGroupBuilderTest sink = new 
PolicyMgrUserGroupBuilderTest();
+        sink.init();
+        fileBuilder.updateSink(sink);
+
+        assertEquals(4, sink.getTotalUsers());
+        assertEquals(2, sink.getTotalGroups());
+
+        assertTrue(sink.getAllUsers().contains("CN_User1 OU_Org1 O_Apache 
L_Santa Monica ST_CA C_US"));
+        assertTrue(sink.getAllUsers().contains("CN_User2 OU_Org1 O_Apache 
L_Santa Monica ST_CA C_US"));
+        assertTrue(sink.getAllUsers().contains("CN_User3 OU_Org1 O_Apache 
L_Santa Monica ST_CA C_US"));
+        assertTrue(sink.getAllUsers().contains("CN_User4 OU_Org1 O_Apache 
L_Santa Monica ST_CA C_US"));
+
+        assertTrue(sink.getAllGroups().contains("group1"));
+        assertTrue(sink.getAllGroups().contains("group2"));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/ec749f09/ugsync/src/test/java/org/apache/ranger/usergroupsync/LdapUserGroupTest.java
----------------------------------------------------------------------
diff --git 
a/ugsync/src/test/java/org/apache/ranger/usergroupsync/LdapUserGroupTest.java 
b/ugsync/src/test/java/org/apache/ranger/usergroupsync/LdapUserGroupTest.java
index b285e78..4355c4d 100644
--- 
a/ugsync/src/test/java/org/apache/ranger/usergroupsync/LdapUserGroupTest.java
+++ 
b/ugsync/src/test/java/org/apache/ranger/usergroupsync/LdapUserGroupTest.java
@@ -20,6 +20,7 @@
 package org.apache.ranger.usergroupsync;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 
 import org.apache.directory.server.annotations.CreateLdapConnectionPool;
 import org.apache.directory.server.core.annotations.ApplyLdifFiles;
@@ -39,7 +40,6 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import org.apache.directory.server.core.annotations.CreateIndex;
-import org.apache.ranger.usergroupsync.PolicyMgrUserGroupBuilderTest;
 
 @RunWith(FrameworkRunner.class)
 @CreateDS(name = "classDS",
@@ -484,6 +484,38 @@ public class LdapUserGroupTest extends 
AbstractLdapTestUnit{
                assertEquals(3, sink.getTotalGroups());
        }
 
+       @Test
+       public void testUpdateSinkWithUserGroupMapping() throws Throwable {
+               
config.setUserSearchBase("cn=users,DC=ranger,DC=qe,DC=hortonworks,DC=com");
+               config.setUserSearchFilter("");
+               
config.setGroupSearchBase("OU=Groups,DC=ranger,DC=qe,DC=hortonworks,DC=com");
+               config.setGroupSearchFilter("");
+               config.setUserGroupMemberAttributeName("member");
+               config.setUserObjectClass("organizationalPerson");
+               config.setGroupObjectClass("groupOfNames");
+               config.setGroupSearchEnabled(true);
+               config.setGroupSearchFirstEnabled(false);
+
+               config.setProperty(UserGroupSyncConfig.SYNC_MAPPING_USERNAME, 
"s/[=]/_/g");
+               config.setProperty(UserGroupSyncConfig.SYNC_MAPPING_GROUPNAME, 
"s/[=]/_/g");
+
+               ldapBuilder.init();
+               PolicyMgrUserGroupBuilderTest sink = new 
PolicyMgrUserGroupBuilderTest();
+               sink.init();
+               ldapBuilder.updateSink(sink);
+               assertEquals(10, sink.getTotalGroups());
+
+               // no user should have an = character because of the mapping
+               for (String user : sink.getAllUsers()) {
+                       assertFalse(user.contains("="));
+               }
+
+               // no group should have an = character because of the mapping
+               for (String group : sink.getAllGroups()) {
+                       assertFalse(group.contains("="));
+               }
+       }
+
        @After
        public void shutdown() throws Exception {
                if (getService().isStarted()) {

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/ec749f09/ugsync/src/test/java/org/apache/ranger/usergroupsync/PolicyMgrUserGroupBuilderTest.java
----------------------------------------------------------------------
diff --git 
a/ugsync/src/test/java/org/apache/ranger/usergroupsync/PolicyMgrUserGroupBuilderTest.java
 
b/ugsync/src/test/java/org/apache/ranger/usergroupsync/PolicyMgrUserGroupBuilderTest.java
index 0d817f6..2880bcb 100644
--- 
a/ugsync/src/test/java/org/apache/ranger/usergroupsync/PolicyMgrUserGroupBuilderTest.java
+++ 
b/ugsync/src/test/java/org/apache/ranger/usergroupsync/PolicyMgrUserGroupBuilderTest.java
@@ -26,32 +26,29 @@ import java.util.Set;
 import org.apache.ranger.unixusersync.process.PolicyMgrUserGroupBuilder;
 
 public class PolicyMgrUserGroupBuilderTest extends PolicyMgrUserGroupBuilder {
-        private static int totalUsers = 0;
-        //private static int totalGroups = 0;
         private Set<String> allGroups;
+        private Set<String> allUsers;
 
         @Override
         public void init() throws Throwable {
-                // TODO Auto-generated method stub
-                totalUsers = 0;
                 allGroups = new HashSet<>();
+                allUsers = new HashSet<>();
         }
 
         @Override
         public void addOrUpdateUser(String user, List<String> groups) {
-                totalUsers++;
                 allGroups.addAll(groups);
+                allUsers.add(user);
                 //System.out.println("Username: " + user + " and associated 
groups: " + groups);
         }
         
         @Override
         public void addOrUpdateGroup(String group) {
-                //totalGroups++;
                 allGroups.add(group);
         }
 
         public int getTotalUsers() {
-                return totalUsers;
+                return allUsers.size();
         }
 
         public int getTotalGroups() {
@@ -59,4 +56,11 @@ public class PolicyMgrUserGroupBuilderTest extends 
PolicyMgrUserGroupBuilder {
                 return allGroups.size();
         }
 
+        public Set<String> getAllGroups() {
+                return allGroups;
+        }
+
+        public Set<String> getAllUsers() {
+                return allUsers;
+        }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/ec749f09/ugsync/src/test/resources/usergroups-dns.csv
----------------------------------------------------------------------
diff --git a/ugsync/src/test/resources/usergroups-dns.csv 
b/ugsync/src/test/resources/usergroups-dns.csv
new file mode 100644
index 0000000..d6fc5a8
--- /dev/null
+++ b/ugsync/src/test/resources/usergroups-dns.csv
@@ -0,0 +1,4 @@
+CN=User1, OU=Org1, O=Apache, L=Santa Monica, ST=CA, C=US|group=1
+CN=User2, OU=Org1, O=Apache, L=Santa Monica, ST=CA, C=US|group=2
+CN=User3, OU=Org1, O=Apache, L=Santa Monica, ST=CA, C=US|group=1|group=2
+CN=User4, OU=Org1, O=Apache, L=Santa Monica, ST=CA, C=US|
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/ec749f09/ugsync/src/test/resources/usergroups-other-delim.csv
----------------------------------------------------------------------
diff --git a/ugsync/src/test/resources/usergroups-other-delim.csv 
b/ugsync/src/test/resources/usergroups-other-delim.csv
new file mode 100644
index 0000000..6a00ebf
--- /dev/null
+++ b/ugsync/src/test/resources/usergroups-other-delim.csv
@@ -0,0 +1,4 @@
+user1|group1
+user2|group2
+user3|group1|group2
+user4|
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/ec749f09/ugsync/src/test/resources/usergroups.csv
----------------------------------------------------------------------
diff --git a/ugsync/src/test/resources/usergroups.csv 
b/ugsync/src/test/resources/usergroups.csv
new file mode 100644
index 0000000..27770cd
--- /dev/null
+++ b/ugsync/src/test/resources/usergroups.csv
@@ -0,0 +1,4 @@
+user1,group1
+user2,group2
+user3,group1,group2
+user4,
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/ec749f09/ugsync/src/test/resources/usergroups.json
----------------------------------------------------------------------
diff --git a/ugsync/src/test/resources/usergroups.json 
b/ugsync/src/test/resources/usergroups.json
new file mode 100644
index 0000000..100b97a
--- /dev/null
+++ b/ugsync/src/test/resources/usergroups.json
@@ -0,0 +1,6 @@
+{
+  "user1":["group1","group2","group3","group4"],
+  "user2":["group5","group6","group7"],
+  "user3":[],
+  "user4":["group1","group6"]
+}
\ No newline at end of file

Reply via email to