xref: /OpenGrok/plugins/src/test/java/opengrok/auth/plugin/LdapUserPluginTest.java (revision 3c16dad83fd39d8b4e849afe0d6f354b435108e8)
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 /*
21b28a5538SAdam Hornacek  * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
22b28a5538SAdam Hornacek  */
23b28a5538SAdam Hornacek package opengrok.auth.plugin;
24b28a5538SAdam Hornacek 
25*3c16dad8SVladimir Kotal import java.util.HashMap;
26b28a5538SAdam Hornacek import java.util.Map;
27*3c16dad8SVladimir Kotal import java.util.Set;
28b28a5538SAdam Hornacek import java.util.TreeMap;
29*3c16dad8SVladimir Kotal 
30*3c16dad8SVladimir Kotal import opengrok.auth.entity.LdapUser;
31b28a5538SAdam Hornacek import opengrok.auth.plugin.entity.User;
32*3c16dad8SVladimir Kotal import opengrok.auth.plugin.ldap.AbstractLdapProvider;
33*3c16dad8SVladimir Kotal import opengrok.auth.plugin.ldap.LdapException;
34*3c16dad8SVladimir Kotal import opengrok.auth.plugin.ldap.LdapFacade;
35*3c16dad8SVladimir Kotal import opengrok.auth.plugin.util.DummyHttpServletRequestLdap;
36b28a5538SAdam Hornacek import org.junit.Assert;
37b28a5538SAdam Hornacek import org.junit.Before;
38b28a5538SAdam Hornacek import org.junit.Test;
39*3c16dad8SVladimir Kotal import org.mockito.Spy;
40*3c16dad8SVladimir Kotal 
41*3c16dad8SVladimir Kotal import javax.servlet.http.HttpServletRequest;
42*3c16dad8SVladimir Kotal 
43*3c16dad8SVladimir Kotal import static opengrok.auth.plugin.LdapUserPlugin.SESSION_ATTR;
44*3c16dad8SVladimir Kotal import static org.junit.jupiter.api.Assertions.*;
45*3c16dad8SVladimir Kotal import static org.mockito.ArgumentMatchers.any;
46*3c16dad8SVladimir Kotal import static org.mockito.ArgumentMatchers.anyString;
47*3c16dad8SVladimir Kotal import static org.mockito.Mockito.*;
48b28a5538SAdam Hornacek 
49b28a5538SAdam Hornacek /**
50b28a5538SAdam Hornacek  *
51b28a5538SAdam Hornacek  * @author Vladimir Kotal
52b28a5538SAdam Hornacek  */
53b28a5538SAdam Hornacek public class LdapUserPluginTest {
54*3c16dad8SVladimir Kotal     @Spy
55b28a5538SAdam Hornacek     private LdapUserPlugin plugin;
56b28a5538SAdam Hornacek 
57b28a5538SAdam Hornacek     @Before
setUp()58b28a5538SAdam Hornacek     public void setUp() {
59b28a5538SAdam Hornacek         plugin = new LdapUserPlugin();
60b28a5538SAdam Hornacek     }
61b28a5538SAdam Hornacek 
getParamsMap()62b28a5538SAdam Hornacek     private Map<String, Object> getParamsMap() {
63b28a5538SAdam Hornacek         Map<String, Object> params = new TreeMap<>();
64b28a5538SAdam Hornacek         params.put(AbstractLdapPlugin.CONFIGURATION_PARAM,
65b28a5538SAdam Hornacek                 getClass().getResource("config.xml").getFile());
66b28a5538SAdam Hornacek 
67b28a5538SAdam Hornacek         return params;
68b28a5538SAdam Hornacek     }
69b28a5538SAdam Hornacek 
7053c33ae5SVladimir Kotal     @Test(expected = NullPointerException.class)
loadTestNegative1()71b28a5538SAdam Hornacek     public void loadTestNegative1() {
72b28a5538SAdam Hornacek         Map<String, Object> params = getParamsMap();
73b28a5538SAdam Hornacek         params.put("foo", (Object)"bar");
74b28a5538SAdam Hornacek         plugin.load(params);
75b28a5538SAdam Hornacek     }
76b28a5538SAdam Hornacek 
77b28a5538SAdam Hornacek     @Test
loadTestPositive()7817b325b6SVladimir Kotal     public void loadTestPositive() {
79b28a5538SAdam Hornacek         Map<String, Object> params = getParamsMap();
80b28a5538SAdam Hornacek         params.put(LdapUserPlugin.ATTRIBUTES, (Object)"mail");
81b28a5538SAdam Hornacek         plugin.load(params);
82b28a5538SAdam Hornacek     }
83b28a5538SAdam Hornacek 
84b28a5538SAdam Hornacek     @Test
filterTest()8553c33ae5SVladimir Kotal     public void filterTest() {
86b28a5538SAdam Hornacek         Map<String, Object> params = getParamsMap();
8753c33ae5SVladimir Kotal         params.put(LdapUserPlugin.LDAP_FILTER, (Object) "(&(objectclass=person)(mail=%username%))");
88b28a5538SAdam Hornacek         params.put(LdapUserPlugin.ATTRIBUTES, (Object) "uid,mail");
89b28a5538SAdam Hornacek         plugin.load(params);
90b28a5538SAdam Hornacek 
9153c33ae5SVladimir Kotal         User user = new User("foo@bar.cz", "id", null, false);
9253c33ae5SVladimir Kotal         String filter = plugin.expandFilter(user);
9353c33ae5SVladimir Kotal         Assert.assertEquals("(&(objectclass=person)(mail=foo@bar.cz))", filter);
94b28a5538SAdam Hornacek     }
95*3c16dad8SVladimir Kotal 
96*3c16dad8SVladimir Kotal     @Test
testFillSessionWithDnOn()97*3c16dad8SVladimir Kotal     public void testFillSessionWithDnOn() throws LdapException {
98*3c16dad8SVladimir Kotal         AbstractLdapProvider mockprovider = mock(LdapFacade.class);
99*3c16dad8SVladimir Kotal         Map<String, Set<String>> attrs = new HashMap<>();
100*3c16dad8SVladimir Kotal         attrs.put("foo", null);
101*3c16dad8SVladimir Kotal         AbstractLdapProvider.LdapSearchResult<Map<String, Set<String>>> result =
102*3c16dad8SVladimir Kotal                 new AbstractLdapProvider.LdapSearchResult<>("foo@bar.cz", attrs);
103*3c16dad8SVladimir Kotal         assertNotNull(result);
104*3c16dad8SVladimir Kotal         when(mockprovider.lookupLdapContent(isNull(), isNull(), any(String[].class))).
105*3c16dad8SVladimir Kotal                 thenReturn(result);
106*3c16dad8SVladimir Kotal 
107*3c16dad8SVladimir Kotal         Map<String, Object> params = getParamsMap();
108*3c16dad8SVladimir Kotal         params.put(LdapUserPlugin.ATTRIBUTES, (Object)"mail");
109*3c16dad8SVladimir Kotal         params.put(LdapUserPlugin.USE_DN, (Object)false);
110*3c16dad8SVladimir Kotal         LdapUserPlugin plugin = new LdapUserPlugin();
111*3c16dad8SVladimir Kotal         plugin.load(params, mockprovider);
112*3c16dad8SVladimir Kotal         assertEquals(mockprovider, plugin.getLdapProvider());
113*3c16dad8SVladimir Kotal 
114*3c16dad8SVladimir Kotal         HttpServletRequest request = new DummyHttpServletRequestLdap();
115*3c16dad8SVladimir Kotal         User user = new User("foo@bar.cz", "id", null, false);
116*3c16dad8SVladimir Kotal         plugin.fillSession(request, user);
117*3c16dad8SVladimir Kotal 
118*3c16dad8SVladimir Kotal         assertNotNull(request.getSession().getAttribute(SESSION_ATTR));
119*3c16dad8SVladimir Kotal         assertEquals(user.getUsername(), ((LdapUser)request.getSession().getAttribute(SESSION_ATTR)).getId());
120*3c16dad8SVladimir Kotal     }
121b28a5538SAdam Hornacek }
122