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 /* 21c6f0939bSAdam Hornacek * Copyright (c) 2017, 2021, 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; 38*2f7dccc7SAdam Hornacek import org.junit.jupiter.api.BeforeEach; 39*2f7dccc7SAdam Hornacek import org.junit.jupiter.api.Test; 403c16dad8SVladimir Kotal 413c16dad8SVladimir Kotal import static opengrok.auth.plugin.LdapUserPlugin.SESSION_ATTR; 42*2f7dccc7SAdam Hornacek import static org.junit.jupiter.api.Assertions.assertEquals; 43*2f7dccc7SAdam Hornacek import static org.junit.jupiter.api.Assertions.assertNotNull; 44*2f7dccc7SAdam Hornacek import static org.junit.jupiter.api.Assertions.assertThrows; 453c16dad8SVladimir Kotal import static org.mockito.ArgumentMatchers.any; 461161d3e8SAdam Hornacek import static org.mockito.ArgumentMatchers.isNull; 471161d3e8SAdam Hornacek import static org.mockito.Mockito.mock; 481161d3e8SAdam Hornacek import static org.mockito.Mockito.when; 49b28a5538SAdam Hornacek 50b28a5538SAdam Hornacek /** 51b28a5538SAdam Hornacek * @author Vladimir Kotal 52b28a5538SAdam Hornacek */ 53b28a5538SAdam Hornacek public class LdapUserPluginTest { 54c6f0939bSAdam Hornacek 55b28a5538SAdam Hornacek private LdapUserPlugin plugin; 56b28a5538SAdam Hornacek 57*2f7dccc7SAdam Hornacek @BeforeEach 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 70*2f7dccc7SAdam Hornacek @Test loadTestNegative1()71b28a5538SAdam Hornacek public void loadTestNegative1() { 72b28a5538SAdam Hornacek Map<String, Object> params = getParamsMap(); 731161d3e8SAdam Hornacek params.put("foo", "bar"); 74*2f7dccc7SAdam Hornacek assertThrows(NullPointerException.class, () -> plugin.load(params)); 75b28a5538SAdam Hornacek } 76b28a5538SAdam Hornacek 77b28a5538SAdam Hornacek @Test loadTestPositive()7817b325b6SVladimir Kotal public void loadTestPositive() { 79b28a5538SAdam Hornacek Map<String, Object> params = getParamsMap(); 801161d3e8SAdam Hornacek params.put(LdapUserPlugin.ATTRIBUTES, "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(); 871161d3e8SAdam Hornacek params.put(LdapUserPlugin.LDAP_FILTER, "(&(objectclass=person)(mail=%username%))"); 881161d3e8SAdam Hornacek params.put(LdapUserPlugin.ATTRIBUTES, "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); 931161d3e8SAdam Hornacek assertEquals("(&(objectclass=person)(mail=foo@bar.cz))", filter); 94b28a5538SAdam Hornacek } 953c16dad8SVladimir Kotal 963c16dad8SVladimir Kotal @Test testFillSessionWithDnOff()9702df4614SVladimir Kotal public void testFillSessionWithDnOff() throws LdapException { 983c16dad8SVladimir Kotal AbstractLdapProvider mockprovider = mock(LdapFacade.class); 993c16dad8SVladimir Kotal Map<String, Set<String>> attrs = new HashMap<>(); 10002df4614SVladimir Kotal attrs.put("mail", Collections.singleton("foo@bar.cz")); 10102df4614SVladimir Kotal final String dn = "cn=FOO_BAR,L=EMEA,DC=FOO,DC=COM"; 1023c16dad8SVladimir Kotal AbstractLdapProvider.LdapSearchResult<Map<String, Set<String>>> result = 10302df4614SVladimir Kotal new AbstractLdapProvider.LdapSearchResult<>(dn, attrs); 1043c16dad8SVladimir Kotal assertNotNull(result); 1053c16dad8SVladimir Kotal when(mockprovider.lookupLdapContent(isNull(), isNull(), any(String[].class))). 1063c16dad8SVladimir Kotal thenReturn(result); 1073c16dad8SVladimir Kotal 1083c16dad8SVladimir Kotal Map<String, Object> params = getParamsMap(); 1091161d3e8SAdam Hornacek params.put(LdapUserPlugin.ATTRIBUTES, "mail"); 1101161d3e8SAdam Hornacek params.put(LdapUserPlugin.USE_DN, false); 1113c16dad8SVladimir Kotal LdapUserPlugin plugin = new LdapUserPlugin(); 1123c16dad8SVladimir Kotal plugin.load(params, mockprovider); 1133c16dad8SVladimir Kotal assertEquals(mockprovider, plugin.getLdapProvider()); 1143c16dad8SVladimir Kotal 1153c16dad8SVladimir Kotal HttpServletRequest request = new DummyHttpServletRequestLdap(); 11666cf937cSVladimir Kotal User user = new User("foo@bar.cz", "id"); 1173c16dad8SVladimir Kotal plugin.fillSession(request, user); 1183c16dad8SVladimir Kotal 1193c16dad8SVladimir Kotal assertNotNull(request.getSession().getAttribute(SESSION_ATTR)); 12002df4614SVladimir Kotal assertEquals(dn, ((LdapUser) request.getSession().getAttribute(SESSION_ATTR)).getDn()); 1213c16dad8SVladimir Kotal } 12266cf937cSVladimir Kotal 12366cf937cSVladimir Kotal @Test testInstance()12466cf937cSVladimir Kotal public void testInstance() { 12566cf937cSVladimir Kotal Map<String, Object> params = getParamsMap(); 1261161d3e8SAdam Hornacek params.put(LdapUserPlugin.ATTRIBUTES, "mail"); 1271161d3e8SAdam Hornacek params.put(LdapUserPlugin.INSTANCE, "42"); 12866cf937cSVladimir Kotal plugin.load(params); 12966cf937cSVladimir Kotal 13066cf937cSVladimir Kotal HttpServletRequest request = new DummyHttpServletRequestLdap(); 13166cf937cSVladimir Kotal LdapUser ldapUser = new LdapUser(); 13266cf937cSVladimir Kotal plugin.updateSession(request, ldapUser); 13366cf937cSVladimir Kotal assertEquals(request.getSession().getAttribute(SESSION_ATTR + "42"), ldapUser); 13466cf937cSVladimir Kotal } 13566cf937cSVladimir Kotal 136*2f7dccc7SAdam Hornacek @Test testInvalidInstance()13766cf937cSVladimir Kotal public void testInvalidInstance() { 13866cf937cSVladimir Kotal Map<String, Object> params = getParamsMap(); 1391161d3e8SAdam Hornacek params.put(LdapUserPlugin.ATTRIBUTES, "mail"); 1401161d3e8SAdam Hornacek params.put(LdapUserPlugin.INSTANCE, "foobar"); 141*2f7dccc7SAdam Hornacek assertThrows(NumberFormatException.class, () -> plugin.load(params)); 14266cf937cSVladimir Kotal } 143b28a5538SAdam Hornacek } 144