xref: /OpenGrok/plugins/src/test/java/opengrok/auth/plugin/LdapUserPluginTest.java (revision 1bef0339efe1f517123d45d11552f7f11fcfd387)
1b28a5538SAdam Hornacek /*
2b28a5538SAdam Hornacek  * CDDL HEADER START
3b28a5538SAdam Hornacek  *
4b28a5538SAdam Hornacek  * The contents of this file are subject to the terms of the
5b28a5538SAdam Hornacek  * Common Development and Distribution License (the "License").
6b28a5538SAdam Hornacek  * You may not use this file except in compliance with the License.
7b28a5538SAdam Hornacek  *
8b28a5538SAdam Hornacek  * See LICENSE.txt included in this distribution for the specific
9b28a5538SAdam Hornacek  * language governing permissions and limitations under the License.
10b28a5538SAdam Hornacek  *
11b28a5538SAdam Hornacek  * When distributing Covered Code, include this CDDL HEADER in each
12b28a5538SAdam Hornacek  * file and include the License file at LICENSE.txt.
13b28a5538SAdam Hornacek  * If applicable, add the following below this CDDL HEADER, with the
14b28a5538SAdam Hornacek  * fields enclosed by brackets "[]" replaced with your own identifying
15b28a5538SAdam Hornacek  * information: Portions Copyright [yyyy] [name of copyright owner]
16b28a5538SAdam Hornacek  *
17b28a5538SAdam Hornacek  * CDDL HEADER END
18b28a5538SAdam Hornacek  */
19b28a5538SAdam Hornacek 
20b28a5538SAdam Hornacek /*
21*1bef0339SVladimir Kotal  * Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved.
22b28a5538SAdam Hornacek  */
23b28a5538SAdam Hornacek package opengrok.auth.plugin;
24b28a5538SAdam Hornacek 
2502df4614SVladimir Kotal import java.util.Collections;
263c16dad8SVladimir Kotal import java.util.HashMap;
27b28a5538SAdam Hornacek import java.util.Map;
283c16dad8SVladimir Kotal import java.util.Set;
29b28a5538SAdam Hornacek import java.util.TreeMap;
303c16dad8SVladimir Kotal 
31aa6abf42SAdam Hornacek import jakarta.servlet.http.HttpServletRequest;
323c16dad8SVladimir Kotal import opengrok.auth.entity.LdapUser;
33b28a5538SAdam Hornacek import opengrok.auth.plugin.entity.User;
343c16dad8SVladimir Kotal import opengrok.auth.plugin.ldap.AbstractLdapProvider;
353c16dad8SVladimir Kotal import opengrok.auth.plugin.ldap.LdapException;
363c16dad8SVladimir Kotal import opengrok.auth.plugin.ldap.LdapFacade;
373c16dad8SVladimir Kotal import opengrok.auth.plugin.util.DummyHttpServletRequestLdap;
382f7dccc7SAdam Hornacek import org.junit.jupiter.api.BeforeEach;
392f7dccc7SAdam Hornacek import org.junit.jupiter.api.Test;
403c16dad8SVladimir Kotal 
413c16dad8SVladimir Kotal import static opengrok.auth.plugin.LdapUserPlugin.SESSION_ATTR;
42*1bef0339SVladimir Kotal import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
432f7dccc7SAdam Hornacek import static org.junit.jupiter.api.Assertions.assertEquals;
442f7dccc7SAdam Hornacek import static org.junit.jupiter.api.Assertions.assertNotNull;
452f7dccc7SAdam Hornacek import static org.junit.jupiter.api.Assertions.assertThrows;
463c16dad8SVladimir Kotal import static org.mockito.ArgumentMatchers.any;
471161d3e8SAdam Hornacek import static org.mockito.ArgumentMatchers.isNull;
481161d3e8SAdam Hornacek import static org.mockito.Mockito.mock;
491161d3e8SAdam Hornacek import static org.mockito.Mockito.when;
50b28a5538SAdam Hornacek 
51b28a5538SAdam Hornacek /**
52b28a5538SAdam Hornacek  * @author Vladimir Kotal
53b28a5538SAdam Hornacek  */
54*1bef0339SVladimir Kotal class LdapUserPluginTest {
55c6f0939bSAdam Hornacek 
56b28a5538SAdam Hornacek     private LdapUserPlugin plugin;
57b28a5538SAdam Hornacek 
582f7dccc7SAdam Hornacek     @BeforeEach
setUp()59b28a5538SAdam Hornacek     public void setUp() {
60b28a5538SAdam Hornacek         plugin = new LdapUserPlugin();
61b28a5538SAdam Hornacek     }
62b28a5538SAdam Hornacek 
getParamsMap()63b28a5538SAdam Hornacek     private Map<String, Object> getParamsMap() {
64b28a5538SAdam Hornacek         Map<String, Object> params = new TreeMap<>();
65b28a5538SAdam Hornacek         params.put(AbstractLdapPlugin.CONFIGURATION_PARAM,
66b28a5538SAdam Hornacek                 getClass().getResource("config.xml").getFile());
67b28a5538SAdam Hornacek 
68b28a5538SAdam Hornacek         return params;
69b28a5538SAdam Hornacek     }
70b28a5538SAdam Hornacek 
712f7dccc7SAdam Hornacek     @Test
loadTestNegative1()72*1bef0339SVladimir Kotal     void loadTestNegative1() {
73b28a5538SAdam Hornacek         Map<String, Object> params = getParamsMap();
741161d3e8SAdam Hornacek         params.put("foo", "bar");
752f7dccc7SAdam Hornacek         assertThrows(NullPointerException.class, () -> plugin.load(params));
76b28a5538SAdam Hornacek     }
77b28a5538SAdam Hornacek 
78b28a5538SAdam Hornacek     @Test
loadTestPositive()79*1bef0339SVladimir Kotal     void loadTestPositive() {
80b28a5538SAdam Hornacek         Map<String, Object> params = getParamsMap();
811161d3e8SAdam Hornacek         params.put(LdapUserPlugin.ATTRIBUTES, "mail");
82b28a5538SAdam Hornacek         plugin.load(params);
83b28a5538SAdam Hornacek     }
84b28a5538SAdam Hornacek 
85b28a5538SAdam Hornacek     @Test
filterTest()86*1bef0339SVladimir Kotal     void filterTest() {
87b28a5538SAdam Hornacek         Map<String, Object> params = getParamsMap();
881161d3e8SAdam Hornacek         params.put(LdapUserPlugin.LDAP_FILTER, "(&(objectclass=person)(mail=%username%))");
891161d3e8SAdam Hornacek         params.put(LdapUserPlugin.ATTRIBUTES, "uid,mail");
90b28a5538SAdam Hornacek         plugin.load(params);
91b28a5538SAdam Hornacek 
92*1bef0339SVladimir Kotal         User user = new User("foo@example.com", "id", null, false);
9353c33ae5SVladimir Kotal         String filter = plugin.expandFilter(user);
94*1bef0339SVladimir Kotal         assertEquals("(&(objectclass=person)(mail=foo@example.com))", filter);
95b28a5538SAdam Hornacek     }
963c16dad8SVladimir Kotal 
973c16dad8SVladimir Kotal     @Test
testFillSessionWithDnOff()98*1bef0339SVladimir Kotal     void testFillSessionWithDnOff() throws LdapException {
993c16dad8SVladimir Kotal         AbstractLdapProvider mockprovider = mock(LdapFacade.class);
1003c16dad8SVladimir Kotal         Map<String, Set<String>> attrs = new HashMap<>();
101*1bef0339SVladimir Kotal         attrs.put("mail", Collections.singleton("foo@example.com"));
102*1bef0339SVladimir Kotal         final String dn = "cn=FOO_BAR,L=EMEA,DC=EXAMPLE,DC=COM";
1033c16dad8SVladimir Kotal         AbstractLdapProvider.LdapSearchResult<Map<String, Set<String>>> result =
10402df4614SVladimir Kotal                 new AbstractLdapProvider.LdapSearchResult<>(dn, attrs);
1053c16dad8SVladimir Kotal         assertNotNull(result);
1063c16dad8SVladimir Kotal         when(mockprovider.lookupLdapContent(isNull(), isNull(), any(String[].class))).
1073c16dad8SVladimir Kotal                 thenReturn(result);
1083c16dad8SVladimir Kotal 
1093c16dad8SVladimir Kotal         Map<String, Object> params = getParamsMap();
1101161d3e8SAdam Hornacek         params.put(LdapUserPlugin.ATTRIBUTES, "mail");
1111161d3e8SAdam Hornacek         params.put(LdapUserPlugin.USE_DN, false);
1123c16dad8SVladimir Kotal         LdapUserPlugin plugin = new LdapUserPlugin();
1133c16dad8SVladimir Kotal         plugin.load(params, mockprovider);
1143c16dad8SVladimir Kotal         assertEquals(mockprovider, plugin.getLdapProvider());
1153c16dad8SVladimir Kotal 
1163c16dad8SVladimir Kotal         HttpServletRequest request = new DummyHttpServletRequestLdap();
117*1bef0339SVladimir Kotal         User user = new User("foo@example.com", "id");
1183c16dad8SVladimir Kotal         plugin.fillSession(request, user);
1193c16dad8SVladimir Kotal 
1203c16dad8SVladimir Kotal         assertNotNull(request.getSession().getAttribute(SESSION_ATTR));
12102df4614SVladimir Kotal         assertEquals(dn, ((LdapUser) request.getSession().getAttribute(SESSION_ATTR)).getDn());
1223c16dad8SVladimir Kotal     }
12366cf937cSVladimir Kotal 
12466cf937cSVladimir Kotal     @Test
testInstance()125*1bef0339SVladimir Kotal     void testInstance() {
12666cf937cSVladimir Kotal         Map<String, Object> params = getParamsMap();
1271161d3e8SAdam Hornacek         params.put(LdapUserPlugin.ATTRIBUTES, "mail");
1281161d3e8SAdam Hornacek         params.put(LdapUserPlugin.INSTANCE, "42");
12966cf937cSVladimir Kotal         plugin.load(params);
13066cf937cSVladimir Kotal 
13166cf937cSVladimir Kotal         HttpServletRequest request = new DummyHttpServletRequestLdap();
13266cf937cSVladimir Kotal         LdapUser ldapUser = new LdapUser();
13366cf937cSVladimir Kotal         plugin.updateSession(request, ldapUser);
13466cf937cSVladimir Kotal         assertEquals(request.getSession().getAttribute(SESSION_ATTR + "42"), ldapUser);
13566cf937cSVladimir Kotal     }
13666cf937cSVladimir Kotal 
1372f7dccc7SAdam Hornacek     @Test
testInvalidInstance()138*1bef0339SVladimir Kotal     void testInvalidInstance() {
13966cf937cSVladimir Kotal         Map<String, Object> params = getParamsMap();
1401161d3e8SAdam Hornacek         params.put(LdapUserPlugin.ATTRIBUTES, "mail");
1411161d3e8SAdam Hornacek         params.put(LdapUserPlugin.INSTANCE, "foobar");
1422f7dccc7SAdam Hornacek         assertThrows(NumberFormatException.class, () -> plugin.load(params));
14366cf937cSVladimir Kotal     }
144b28a5538SAdam Hornacek }
145