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*5d9f3aa0SAdam Hornáček * Copyright (c) 2017, 2020, 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 313c16dad8SVladimir Kotal import opengrok.auth.entity.LdapUser; 32b28a5538SAdam Hornacek import opengrok.auth.plugin.entity.User; 333c16dad8SVladimir Kotal import opengrok.auth.plugin.ldap.AbstractLdapProvider; 343c16dad8SVladimir Kotal import opengrok.auth.plugin.ldap.LdapException; 353c16dad8SVladimir Kotal import opengrok.auth.plugin.ldap.LdapFacade; 363c16dad8SVladimir Kotal import opengrok.auth.plugin.util.DummyHttpServletRequestLdap; 37b28a5538SAdam Hornacek import org.junit.Before; 38b28a5538SAdam Hornacek import org.junit.Test; 393c16dad8SVladimir Kotal import org.mockito.Spy; 403c16dad8SVladimir Kotal 413c16dad8SVladimir Kotal import javax.servlet.http.HttpServletRequest; 423c16dad8SVladimir Kotal 433c16dad8SVladimir Kotal import static opengrok.auth.plugin.LdapUserPlugin.SESSION_ATTR; 441161d3e8SAdam Hornacek import static org.junit.Assert.assertEquals; 451161d3e8SAdam Hornacek import static org.junit.Assert.assertNotNull; 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 */ 54b28a5538SAdam Hornacek public class LdapUserPluginTest { 553c16dad8SVladimir Kotal @Spy 56b28a5538SAdam Hornacek private LdapUserPlugin plugin; 57b28a5538SAdam Hornacek 58b28a5538SAdam Hornacek @Before 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 7153c33ae5SVladimir Kotal @Test(expected = NullPointerException.class) loadTestNegative1()72b28a5538SAdam Hornacek public void loadTestNegative1() { 73b28a5538SAdam Hornacek Map<String, Object> params = getParamsMap(); 741161d3e8SAdam Hornacek params.put("foo", "bar"); 75b28a5538SAdam Hornacek plugin.load(params); 76b28a5538SAdam Hornacek } 77b28a5538SAdam Hornacek 78b28a5538SAdam Hornacek @Test loadTestPositive()7917b325b6SVladimir Kotal public 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()8653c33ae5SVladimir Kotal public 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 9253c33ae5SVladimir Kotal User user = new User("foo@bar.cz", "id", null, false); 9353c33ae5SVladimir Kotal String filter = plugin.expandFilter(user); 941161d3e8SAdam Hornacek assertEquals("(&(objectclass=person)(mail=foo@bar.cz))", filter); 95b28a5538SAdam Hornacek } 963c16dad8SVladimir Kotal 973c16dad8SVladimir Kotal @Test testFillSessionWithDnOff()9802df4614SVladimir Kotal public void testFillSessionWithDnOff() throws LdapException { 993c16dad8SVladimir Kotal AbstractLdapProvider mockprovider = mock(LdapFacade.class); 1003c16dad8SVladimir Kotal Map<String, Set<String>> attrs = new HashMap<>(); 10102df4614SVladimir Kotal attrs.put("mail", Collections.singleton("foo@bar.cz")); 10202df4614SVladimir Kotal final String dn = "cn=FOO_BAR,L=EMEA,DC=FOO,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(); 11766cf937cSVladimir Kotal User user = new User("foo@bar.cz", "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()12566cf937cSVladimir Kotal public 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 13766cf937cSVladimir Kotal @Test(expected = NumberFormatException.class) testInvalidInstance()13866cf937cSVladimir Kotal public void testInvalidInstance() { 13966cf937cSVladimir Kotal Map<String, Object> params = getParamsMap(); 1401161d3e8SAdam Hornacek params.put(LdapUserPlugin.ATTRIBUTES, "mail"); 1411161d3e8SAdam Hornacek params.put(LdapUserPlugin.INSTANCE, "foobar"); 14266cf937cSVladimir Kotal plugin.load(params); 14366cf937cSVladimir Kotal } 144b28a5538SAdam Hornacek } 145