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]
