You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LdapGroupsProviderTest.java 6.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2019 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. package org.sonar.auth.ldap;
  21. import java.util.Collection;
  22. import org.junit.ClassRule;
  23. import org.junit.Test;
  24. import org.sonar.api.config.internal.MapSettings;
  25. import org.sonar.auth.ldap.server.LdapServer;
  26. import static org.assertj.core.api.Assertions.assertThat;
  27. public class LdapGroupsProviderTest {
  28. /**
  29. * A reference to the original ldif file
  30. */
  31. public static final String USERS_EXAMPLE_ORG_LDIF = "/users.example.org.ldif";
  32. /**
  33. * A reference to an aditional ldif file.
  34. */
  35. public static final String USERS_INFOSUPPORT_COM_LDIF = "/users.infosupport.com.ldif";
  36. @ClassRule
  37. public static LdapServer exampleServer = new LdapServer(USERS_EXAMPLE_ORG_LDIF);
  38. @ClassRule
  39. public static LdapServer infosupportServer = new LdapServer(USERS_INFOSUPPORT_COM_LDIF, "infosupport.com", "dc=infosupport,dc=com");
  40. @Test
  41. public void defaults() throws Exception {
  42. MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, null);
  43. LdapSettingsManager settingsManager = new LdapSettingsManager(settings, new LdapAutodiscovery());
  44. LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings());
  45. Collection<String> groups;
  46. groups = groupsProvider.getGroups("tester");
  47. assertThat(groups).containsOnly("sonar-users");
  48. groups = groupsProvider.getGroups("godin");
  49. assertThat(groups).containsOnly("sonar-users", "sonar-developers");
  50. groups = groupsProvider.getGroups("notfound");
  51. assertThat(groups).isEmpty();
  52. }
  53. @Test
  54. public void defaultsMultipleLdap() {
  55. MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, infosupportServer);
  56. LdapSettingsManager settingsManager = new LdapSettingsManager(settings, new LdapAutodiscovery());
  57. LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings());
  58. Collection<String> groups;
  59. groups = groupsProvider.getGroups("tester");
  60. assertThat(groups).containsOnly("sonar-users");
  61. groups = groupsProvider.getGroups("godin");
  62. assertThat(groups).containsOnly("sonar-users", "sonar-developers");
  63. groups = groupsProvider.getGroups("notfound");
  64. assertThat(groups).isEmpty();
  65. groups = groupsProvider.getGroups("testerInfo");
  66. assertThat(groups).containsOnly("sonar-users");
  67. groups = groupsProvider.getGroups("robby");
  68. assertThat(groups).containsOnly("sonar-users", "sonar-developers");
  69. }
  70. @Test
  71. public void posix() {
  72. MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, null);
  73. settings.setProperty("ldap.group.request", "(&(objectClass=posixGroup)(memberUid={uid}))");
  74. LdapSettingsManager settingsManager = new LdapSettingsManager(settings, new LdapAutodiscovery());
  75. LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings());
  76. Collection<String> groups;
  77. groups = groupsProvider.getGroups("godin");
  78. assertThat(groups).containsOnly("linux-users");
  79. }
  80. @Test
  81. public void posixMultipleLdap() {
  82. MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, infosupportServer);
  83. settings.setProperty("ldap.example.group.request", "(&(objectClass=posixGroup)(memberUid={uid}))");
  84. settings.setProperty("ldap.infosupport.group.request", "(&(objectClass=posixGroup)(memberUid={uid}))");
  85. LdapSettingsManager settingsManager = new LdapSettingsManager(settings, new LdapAutodiscovery());
  86. LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings());
  87. Collection<String> groups;
  88. groups = groupsProvider.getGroups("godin");
  89. assertThat(groups).containsOnly("linux-users");
  90. groups = groupsProvider.getGroups("robby");
  91. assertThat(groups).containsOnly("linux-users");
  92. }
  93. @Test
  94. public void mixed() {
  95. MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, infosupportServer);
  96. settings.setProperty("ldap.example.group.request", "(&(|(objectClass=groupOfUniqueNames)(objectClass=posixGroup))(|(uniqueMember={dn})(memberUid={uid})))");
  97. LdapSettingsManager settingsManager = new LdapSettingsManager(settings, new LdapAutodiscovery());
  98. LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings());
  99. Collection<String> groups;
  100. groups = groupsProvider.getGroups("godin");
  101. assertThat(groups).containsOnly("sonar-users", "sonar-developers", "linux-users");
  102. }
  103. @Test
  104. public void mixedMultipleLdap() {
  105. MapSettings settings = LdapSettingsFactory.generateSimpleAnonymousAccessSettings(exampleServer, infosupportServer);
  106. settings.setProperty("ldap.example.group.request", "(&(|(objectClass=groupOfUniqueNames)(objectClass=posixGroup))(|(uniqueMember={dn})(memberUid={uid})))");
  107. settings.setProperty("ldap.infosupport.group.request", "(&(|(objectClass=groupOfUniqueNames)(objectClass=posixGroup))(|(uniqueMember={dn})(memberUid={uid})))");
  108. LdapSettingsManager settingsManager = new LdapSettingsManager(settings, new LdapAutodiscovery());
  109. LdapGroupsProvider groupsProvider = new LdapGroupsProvider(settingsManager.getContextFactories(), settingsManager.getUserMappings(), settingsManager.getGroupMappings());
  110. Collection<String> groups;
  111. groups = groupsProvider.getGroups("godin");
  112. assertThat(groups).containsOnly("sonar-users", "sonar-developers", "linux-users");
  113. groups = groupsProvider.getGroups("robby");
  114. assertThat(groups).containsOnly("sonar-users", "sonar-developers", "linux-users");
  115. }
  116. }