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*c6f0939bSAdam 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; 38b28a5538SAdam Hornacek import org.junit.Before; 39b28a5538SAdam Hornacek import org.junit.Test; 403c16dad8SVladimir Kotal 413c16dad8SVladimir Kotal import static opengrok.auth.plugin.LdapUserPlugin.SESSION_ATTR; 421161d3e8SAdam Hornacek import static org.junit.Assert.assertEquals; 431161d3e8SAdam Hornacek import static org.junit.Assert.assertNotNull; 443c16dad8SVladimir Kotal import static org.mockito.ArgumentMatchers.any; 451161d3e8SAdam Hornacek import static org.mockito.ArgumentMatchers.isNull; 461161d3e8SAdam Hornacek import static org.mockito.Mockito.mock; 471161d3e8SAdam Hornacek import static org.mockito.Mockito.when; 48b28a5538SAdam Hornacek 49b28a5538SAdam Hornacek /** 50b28a5538SAdam Hornacek * @author Vladimir Kotal 51b28a5538SAdam Hornacek */ 52b28a5538SAdam Hornacek public class LdapUserPluginTest { 53*c6f0939bSAdam Hornacek 54b28a5538SAdam Hornacek private LdapUserPlugin plugin; 55b28a5538SAdam Hornacek 56b28a5538SAdam Hornacek @Before setUp()57b28a5538SAdam Hornacek public void setUp() { 58b28a5538SAdam Hornacek plugin = new LdapUserPlugin(); 59b28a5538SAdam Hornacek } 60b28a5538SAdam Hornacek getParamsMap()61b28a5538SAdam Hornacek private Map<String, Object> getParamsMap() { 62b28a5538SAdam Hornacek Map<String, Object> params = new TreeMap<>(); 63b28a5538SAdam Hornacek params.put(AbstractLdapPlugin.CONFIGURATION_PARAM, 64b28a5538SAdam Hornacek getClass().getResource("config.xml").getFile()); 65b28a5538SAdam Hornacek 66b28a5538SAdam Hornacek return params; 67b28a5538SAdam Hornacek } 68b28a5538SAdam Hornacek 6953c33ae5SVladimir Kotal @Test(expected = NullPointerException.class) loadTestNegative1()70b28a5538SAdam Hornacek public void loadTestNegative1() { 71b28a5538SAdam Hornacek Map<String, Object> params = getParamsMap(); 721161d3e8SAdam Hornacek params.put("foo", "bar"); 73b28a5538SAdam Hornacek plugin.load(params); 74b28a5538SAdam Hornacek } 75b28a5538SAdam Hornacek 76b28a5538SAdam Hornacek @Test loadTestPositive()7717b325b6SVladimir Kotal public void loadTestPositive() { 78b28a5538SAdam Hornacek Map<String, Object> params = getParamsMap(); 791161d3e8SAdam Hornacek params.put(LdapUserPlugin.ATTRIBUTES, "mail"); 80b28a5538SAdam Hornacek plugin.load(params); 81b28a5538SAdam Hornacek } 82b28a5538SAdam Hornacek 83b28a5538SAdam Hornacek @Test filterTest()8453c33ae5SVladimir Kotal public void filterTest() { 85b28a5538SAdam Hornacek Map<String, Object> params = getParamsMap(); 861161d3e8SAdam Hornacek params.put(LdapUserPlugin.LDAP_FILTER, "(&(objectclass=person)(mail=%username%))"); 871161d3e8SAdam Hornacek params.put(LdapUserPlugin.ATTRIBUTES, "uid,mail"); 88b28a5538SAdam Hornacek plugin.load(params); 89b28a5538SAdam Hornacek 9053c33ae5SVladimir Kotal User user = new User("foo@bar.cz", "id", null, false); 9153c33ae5SVladimir Kotal String filter = plugin.expandFilter(user); 921161d3e8SAdam Hornacek assertEquals("(&(objectclass=person)(mail=foo@bar.cz))", filter); 93b28a5538SAdam Hornacek } 943c16dad8SVladimir Kotal 953c16dad8SVladimir Kotal @Test testFillSessionWithDnOff()9602df4614SVladimir Kotal public void testFillSessionWithDnOff() throws LdapException { 973c16dad8SVladimir Kotal AbstractLdapProvider mockprovider = mock(LdapFacade.class); 983c16dad8SVladimir Kotal Map<String, Set<String>> attrs = new HashMap<>(); 9902df4614SVladimir Kotal attrs.put("mail", Collections.singleton("foo@bar.cz")); 10002df4614SVladimir Kotal final String dn = "cn=FOO_BAR,L=EMEA,DC=FOO,DC=COM"; 1013c16dad8SVladimir Kotal AbstractLdapProvider.LdapSearchResult<Map<String, Set<String>>> result = 10202df4614SVladimir Kotal new AbstractLdapProvider.LdapSearchResult<>(dn, attrs); 1033c16dad8SVladimir Kotal assertNotNull(result); 1043c16dad8SVladimir Kotal when(mockprovider.lookupLdapContent(isNull(), isNull(), any(String[].class))). 1053c16dad8SVladimir Kotal thenReturn(result); 1063c16dad8SVladimir Kotal 1073c16dad8SVladimir Kotal Map<String, Object> params = getParamsMap(); 1081161d3e8SAdam Hornacek params.put(LdapUserPlugin.ATTRIBUTES, "mail"); 1091161d3e8SAdam Hornacek params.put(LdapUserPlugin.USE_DN, false); 1103c16dad8SVladimir Kotal LdapUserPlugin plugin = new LdapUserPlugin(); 1113c16dad8SVladimir Kotal plugin.load(params, mockprovider); 1123c16dad8SVladimir Kotal assertEquals(mockprovider, plugin.getLdapProvider()); 1133c16dad8SVladimir Kotal 1143c16dad8SVladimir Kotal HttpServletRequest request = new DummyHttpServletRequestLdap(); 11566cf937cSVladimir Kotal User user = new User("foo@bar.cz", "id"); 1163c16dad8SVladimir Kotal plugin.fillSession(request, user); 1173c16dad8SVladimir Kotal 1183c16dad8SVladimir Kotal assertNotNull(request.getSession().getAttribute(SESSION_ATTR)); 11902df4614SVladimir Kotal assertEquals(dn, ((LdapUser) request.getSession().getAttribute(SESSION_ATTR)).getDn()); 1203c16dad8SVladimir Kotal } 12166cf937cSVladimir Kotal 12266cf937cSVladimir Kotal @Test testInstance()12366cf937cSVladimir Kotal public void testInstance() { 12466cf937cSVladimir Kotal Map<String, Object> params = getParamsMap(); 1251161d3e8SAdam Hornacek params.put(LdapUserPlugin.ATTRIBUTES, "mail"); 1261161d3e8SAdam Hornacek params.put(LdapUserPlugin.INSTANCE, "42"); 12766cf937cSVladimir Kotal plugin.load(params); 12866cf937cSVladimir Kotal 12966cf937cSVladimir Kotal HttpServletRequest request = new DummyHttpServletRequestLdap(); 13066cf937cSVladimir Kotal LdapUser ldapUser = new LdapUser(); 13166cf937cSVladimir Kotal plugin.updateSession(request, ldapUser); 13266cf937cSVladimir Kotal assertEquals(request.getSession().getAttribute(SESSION_ATTR + "42"), ldapUser); 13366cf937cSVladimir Kotal } 13466cf937cSVladimir Kotal 13566cf937cSVladimir Kotal @Test(expected = NumberFormatException.class) testInvalidInstance()13666cf937cSVladimir Kotal public void testInvalidInstance() { 13766cf937cSVladimir Kotal Map<String, Object> params = getParamsMap(); 1381161d3e8SAdam Hornacek params.put(LdapUserPlugin.ATTRIBUTES, "mail"); 1391161d3e8SAdam Hornacek params.put(LdapUserPlugin.INSTANCE, "foobar"); 14066cf937cSVladimir Kotal plugin.load(params); 14166cf937cSVladimir Kotal } 142b28a5538SAdam Hornacek } 143