This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git

commit 17cab901e5005be9c3355f5cf9fe8d5994b06994
Author: Alex Rudyy <[email protected]>
AuthorDate: Thu Dec 5 17:01:40 2019 +0000

    QPID-8374: [Broker-J] Change of attribute 'caseSensitive' should take 
immediate effect
---
 .../model/adapter/FileBasedGroupProviderImpl.java  |  4 +--
 .../server/security/group/FileGroupDatabase.java   | 12 ++++----
 .../adapter/FileBasedGroupProviderImplTest.java    | 35 ++++++++++++++++++++++
 .../FileGroupDatabaseCaseInsensitiveTest.java      | 16 ++++++----
 .../security/group/FileGroupDatabaseTest.java      | 16 ++++++----
 5 files changed, 64 insertions(+), 19 deletions(-)

diff --git 
a/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java
 
b/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java
index 3d4f0fc..7760f7b 100644
--- 
a/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java
+++ 
b/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImpl.java
@@ -105,7 +105,7 @@ public class FileBasedGroupProviderImpl
     protected void onOpen()
     {
         super.onOpen();
-        FileGroupDatabase groupDatabase = new 
FileGroupDatabase(isCaseSensitive());
+        FileGroupDatabase groupDatabase = new FileGroupDatabase(this);
         try
         {
             groupDatabase.setGroupFile(getPath());
@@ -175,7 +175,7 @@ public class FileBasedGroupProviderImpl
                 throw new IllegalConfigurationException(String.format("Cannot 
read groups file '%s'. Please check permissions.", _path));
             }
 
-            FileGroupDatabase groupDatabase = new 
FileGroupDatabase(isCaseSensitive());
+            FileGroupDatabase groupDatabase = new FileGroupDatabase(this);
             try
             {
                 groupDatabase.setGroupFile(_path);
diff --git 
a/broker-core/src/main/java/org/apache/qpid/server/security/group/FileGroupDatabase.java
 
b/broker-core/src/main/java/org/apache/qpid/server/security/group/FileGroupDatabase.java
index 0e9a608..8f08ccb 100644
--- 
a/broker-core/src/main/java/org/apache/qpid/server/security/group/FileGroupDatabase.java
+++ 
b/broker-core/src/main/java/org/apache/qpid/server/security/group/FileGroupDatabase.java
@@ -36,6 +36,7 @@ import com.google.common.base.Joiner;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.qpid.server.model.adapter.FileBasedGroupProvider;
 import org.apache.qpid.server.util.BaseAction;
 import org.apache.qpid.server.util.FileHelper;
 import org.apache.qpid.server.util.ServerScopedRuntimeException;
@@ -52,15 +53,12 @@ public class FileGroupDatabase implements GroupDatabase
 
     private final Map<String, Set<String>> _groupToUserMap;
     private final Map<String, Set<String>> _userToGroupMap;
+    private final FileBasedGroupProvider<?>  _groupProvider;
     private String _groupFile;
-    private final boolean _caseSensitive;
 
-    /**
-     * @param caseSensitive provides information if search of Users and Groups 
is CaseSensitive or CaseInsensitive;
-     */
-    public FileGroupDatabase(boolean caseSensitive)
+    public FileGroupDatabase(FileBasedGroupProvider<?> groupProvider)
     {
-        this._caseSensitive = caseSensitive;
+        this._groupProvider = groupProvider;
         _groupToUserMap = new ConcurrentHashMap<>();
         _userToGroupMap = new ConcurrentHashMap<>();
     }
@@ -299,7 +297,7 @@ public class FileGroupDatabase implements GroupDatabase
 
     private String keySearch(Set<String> set, String requiredKey)
     {
-        if (!_caseSensitive)
+        if (!_groupProvider.isCaseSensitive())
         {
             for (String key : set)
             {
diff --git 
a/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImplTest.java
 
b/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImplTest.java
index d046937..ba41631 100644
--- 
a/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImplTest.java
+++ 
b/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImplTest.java
@@ -21,8 +21,10 @@
 package org.apache.qpid.server.model.adapter;
 
 import static 
org.apache.qpid.server.model.adapter.FileBasedGroupProviderImpl.GROUP_FILE_PROVIDER_TYPE;
+import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.Matchers.containsInAnyOrder;
+import static org.hamcrest.Matchers.empty;
 import static org.hamcrest.Matchers.equalTo;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -166,6 +168,39 @@ public class FileBasedGroupProviderImplTest extends 
UnitTestBase
         assertThat(rootMember.getName(), is(equalTo("root")));
     }
 
+
+    @Test
+    public void testGetGroupPrincipalsForUserCaseAware() throws Exception
+    {
+        Map<String, Set<String>> input = new HashMap<>();
+        input.put("super", Sets.newHashSet("root"));
+
+        _groupFile = createTemporaryGroupFile(input);
+
+        Map<String, Object> providerAttrs = new HashMap<>();
+        String groupsFile = _groupFile.getAbsolutePath();
+        providerAttrs.put(FileBasedGroupProvider.TYPE, 
GROUP_FILE_PROVIDER_TYPE);
+        providerAttrs.put(FileBasedGroupProvider.PATH, groupsFile);
+        providerAttrs.put(FileBasedGroupProvider.NAME, getTestName());
+
+        @SuppressWarnings("unchecked")
+        GroupProvider<?> provider = _objectFactory.create(GroupProvider.class, 
providerAttrs, _broker);
+        assertThat(provider, is(instanceOf(FileBasedGroupProvider.class)));
+        assertThat(((FileBasedGroupProvider)provider).isCaseSensitive(), 
is(true));
+
+        Set<Principal> adminGroups = provider.getGroupPrincipalsForUser(() -> 
"Root");
+        assertThat("No group should be found when caseSensitive=true",
+                   
adminGroups.stream().map(Principal::getName).collect(Collectors.toSet()),
+                  is(empty()));
+
+        provider.setAttributes(Collections.singletonMap("caseSensitive", 
false));
+        assertThat(((FileBasedGroupProvider)provider).isCaseSensitive(), 
is(false));
+        Set<Principal> adminGroups2 = provider.getGroupPrincipalsForUser(() -> 
"Root");
+        assertThat("root has unexpected group membership",
+                   
adminGroups2.stream().map(Principal::getName).collect(Collectors.toSet()),
+                   containsInAnyOrder("super"));
+    }
+
     @Test
     public void testAddGroupAndMember() throws Exception
     {
diff --git 
a/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseCaseInsensitiveTest.java
 
b/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseCaseInsensitiveTest.java
index b712387..2f0a923 100644
--- 
a/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseCaseInsensitiveTest.java
+++ 
b/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseCaseInsensitiveTest.java
@@ -23,6 +23,8 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.io.File;
 import java.io.IOException;
@@ -32,6 +34,7 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.qpid.server.model.adapter.FileBasedGroupProvider;
 import org.apache.qpid.test.utils.UnitTestBase;
 
 public class FileGroupDatabaseCaseInsensitiveTest extends UnitTestBase
@@ -48,11 +51,14 @@ public class FileGroupDatabaseCaseInsensitiveTest extends 
UnitTestBase
     private FileGroupDatabase _fileGroupDatabase;
     private GroupProviderUtil _util;
     private String _groupFile;
+    private FileBasedGroupProvider _groupProvider;
 
     @Before
     public void setUp() throws IOException
     {
-        _fileGroupDatabase = new FileGroupDatabase(CASE_SENSITIVE);
+        _groupProvider = mock(FileBasedGroupProvider.class);
+        when(_groupProvider.isCaseSensitive()).thenReturn(CASE_SENSITIVE);
+        _fileGroupDatabase = new FileGroupDatabase(_groupProvider);
         _util = new GroupProviderUtil(_fileGroupDatabase);
         _groupFile = _util.getGroupFile();
     }
@@ -307,7 +313,7 @@ public class FileGroupDatabaseCaseInsensitiveTest extends 
UnitTestBase
         _fileGroupDatabase.addUserToGroup(USER3.toUpperCase(), MY_GROUP);
         assertEquals(3, users.size());
 
-        FileGroupDatabase newGroupDatabase = new 
FileGroupDatabase(CASE_SENSITIVE);
+        FileGroupDatabase newGroupDatabase = new 
FileGroupDatabase(_groupProvider);
         newGroupDatabase.setGroupFile(_groupFile);
 
         Set<String> newUsers = 
newGroupDatabase.getUsersInGroup(MY_GROUP.toUpperCase());
@@ -325,7 +331,7 @@ public class FileGroupDatabaseCaseInsensitiveTest extends 
UnitTestBase
         _fileGroupDatabase.removeUserFromGroup(USER2.toUpperCase(), MY_GROUP);
         assertEquals(1, users.size());
 
-        FileGroupDatabase newGroupDatabase = new 
FileGroupDatabase(CASE_SENSITIVE);
+        FileGroupDatabase newGroupDatabase = new 
FileGroupDatabase(_groupProvider);
         newGroupDatabase.setGroupFile(_groupFile);
 
         Set<String> newUsers = 
newGroupDatabase.getUsersInGroup(MY_GROUP.toUpperCase());
@@ -346,7 +352,7 @@ public class FileGroupDatabaseCaseInsensitiveTest extends 
UnitTestBase
         assertEquals(1, groups.size());
         assertTrue(groups.contains(MY_GROUP));
 
-        FileGroupDatabase newGroupDatabase = new 
FileGroupDatabase(CASE_SENSITIVE);
+        FileGroupDatabase newGroupDatabase = new 
FileGroupDatabase(_groupProvider);
         newGroupDatabase.setGroupFile(_groupFile);
 
         Set<String> newGroups = newGroupDatabase.getAllGroups();
@@ -374,7 +380,7 @@ public class FileGroupDatabaseCaseInsensitiveTest extends 
UnitTestBase
         groupsForUser1 = 
_fileGroupDatabase.getGroupsForUser(USER1.toUpperCase());
         assertEquals(1, groupsForUser1.size());
 
-        FileGroupDatabase newGroupDatabase = new 
FileGroupDatabase(CASE_SENSITIVE);
+        FileGroupDatabase newGroupDatabase = new 
FileGroupDatabase(_groupProvider);
         newGroupDatabase.setGroupFile(_groupFile);
 
         Set<String> newGroups = newGroupDatabase.getAllGroups();
diff --git 
a/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseTest.java
 
b/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseTest.java
index 9d2590d..0ccbe3c 100644
--- 
a/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseTest.java
+++ 
b/broker-core/src/test/java/org/apache/qpid/server/security/group/FileGroupDatabaseTest.java
@@ -23,6 +23,8 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -32,6 +34,7 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.qpid.server.model.adapter.FileBasedGroupProvider;
 import org.apache.qpid.test.utils.UnitTestBase;
 
 public class FileGroupDatabaseTest extends UnitTestBase
@@ -48,11 +51,14 @@ public class FileGroupDatabaseTest extends UnitTestBase
     private FileGroupDatabase _fileGroupDatabase;
     private GroupProviderUtil _util;
     private String _groupFile;
+    private FileBasedGroupProvider<?> _groupProvider;
 
     @Before
     public void setUp() throws Exception
     {
-        _fileGroupDatabase = new FileGroupDatabase(CASE_SENSITIVE);
+        _groupProvider = mock(FileBasedGroupProvider.class);
+        when(_groupProvider.isCaseSensitive()).thenReturn(CASE_SENSITIVE);
+        _fileGroupDatabase = new FileGroupDatabase(_groupProvider);
         _util = new GroupProviderUtil(_fileGroupDatabase);
         _groupFile = _util.getGroupFile();
     }
@@ -357,7 +363,7 @@ public class FileGroupDatabaseTest extends UnitTestBase
         _fileGroupDatabase.addUserToGroup(USER3, MY_GROUP);
         assertEquals(3, users.size());
 
-        FileGroupDatabase newGroupDatabase = new 
FileGroupDatabase(CASE_SENSITIVE);
+        FileGroupDatabase newGroupDatabase = new 
FileGroupDatabase(_groupProvider);
         newGroupDatabase.setGroupFile(_groupFile);
 
         Set<String> newUsers = newGroupDatabase.getUsersInGroup(MY_GROUP);
@@ -375,7 +381,7 @@ public class FileGroupDatabaseTest extends UnitTestBase
         _fileGroupDatabase.removeUserFromGroup(USER2, MY_GROUP);
         assertEquals(1, users.size());
 
-        FileGroupDatabase newGroupDatabase = new 
FileGroupDatabase(CASE_SENSITIVE);
+        FileGroupDatabase newGroupDatabase = new 
FileGroupDatabase(_groupProvider);
         newGroupDatabase.setGroupFile(_groupFile);
 
         Set<String> newUsers = newGroupDatabase.getUsersInGroup(MY_GROUP);
@@ -396,7 +402,7 @@ public class FileGroupDatabaseTest extends UnitTestBase
         assertEquals(1, groups.size());
         assertTrue(groups.contains(MY_GROUP));
 
-        FileGroupDatabase newGroupDatabase = new 
FileGroupDatabase(CASE_SENSITIVE);
+        FileGroupDatabase newGroupDatabase = new 
FileGroupDatabase(_groupProvider);
         newGroupDatabase.setGroupFile(_groupFile);
 
         Set<String> newGroups = newGroupDatabase.getAllGroups();
@@ -424,7 +430,7 @@ public class FileGroupDatabaseTest extends UnitTestBase
         groupsForUser1 = _fileGroupDatabase.getGroupsForUser(USER1);
         assertEquals(1, groupsForUser1.size());
 
-        FileGroupDatabase newGroupDatabase = new 
FileGroupDatabase(CASE_SENSITIVE);
+        FileGroupDatabase newGroupDatabase = new 
FileGroupDatabase(_groupProvider);
         newGroupDatabase.setGroupFile(_groupFile);
 
         Set<String> newGroups = newGroupDatabase.getAllGroups();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to