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 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.Assert; 38b28a5538SAdam Hornacek import org.junit.Before; 39b28a5538SAdam Hornacek import org.junit.Test; 403c16dad8SVladimir Kotal import org.mockito.Spy; 413c16dad8SVladimir Kotal 423c16dad8SVladimir Kotal import javax.servlet.http.HttpServletRequest; 433c16dad8SVladimir Kotal 443c16dad8SVladimir Kotal import static opengrok.auth.plugin.LdapUserPlugin.SESSION_ATTR; 453c16dad8SVladimir Kotal import static org.junit.jupiter.api.Assertions.*; 463c16dad8SVladimir Kotal import static org.mockito.ArgumentMatchers.any; 473c16dad8SVladimir Kotal import static org.mockito.Mockito.*; 48b28a5538SAdam Hornacek 49b28a5538SAdam Hornacek /** 50b28a5538SAdam Hornacek * 51b28a5538SAdam Hornacek * @author Vladimir Kotal 52b28a5538SAdam Hornacek */ 53b28a5538SAdam Hornacek public class LdapUserPluginTest { 543c16dad8SVladimir 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 } 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(); 1093c16dad8SVladimir Kotal params.put(LdapUserPlugin.ATTRIBUTES, (Object)"mail"); 1103c16dad8SVladimir Kotal params.put(LdapUserPlugin.USE_DN, (Object)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(); 116*66cf937cSVladimir 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 } 122*66cf937cSVladimir Kotal 123*66cf937cSVladimir Kotal @Test testInstance()124*66cf937cSVladimir Kotal public void testInstance() { 125*66cf937cSVladimir Kotal Map<String, Object> params = getParamsMap(); 126*66cf937cSVladimir Kotal params.put(LdapUserPlugin.ATTRIBUTES, (Object)"mail"); 127*66cf937cSVladimir Kotal params.put(LdapUserPlugin.INSTANCE, (Object)"42"); 128*66cf937cSVladimir Kotal plugin.load(params); 129*66cf937cSVladimir Kotal 130*66cf937cSVladimir Kotal HttpServletRequest request = new DummyHttpServletRequestLdap(); 131*66cf937cSVladimir Kotal LdapUser ldapUser = new LdapUser(); 132*66cf937cSVladimir Kotal plugin.updateSession(request, ldapUser); 133*66cf937cSVladimir Kotal assertEquals(request.getSession().getAttribute(SESSION_ATTR + "42"), ldapUser); 134*66cf937cSVladimir Kotal } 135*66cf937cSVladimir Kotal 136*66cf937cSVladimir Kotal @Test(expected = NumberFormatException.class) testInvalidInstance()137*66cf937cSVladimir Kotal public void testInvalidInstance() { 138*66cf937cSVladimir Kotal Map<String, Object> params = getParamsMap(); 139*66cf937cSVladimir Kotal params.put(LdapUserPlugin.ATTRIBUTES, (Object)"mail"); 140*66cf937cSVladimir Kotal params.put(LdapUserPlugin.INSTANCE, (Object)"foobar"); 141*66cf937cSVladimir Kotal plugin.load(params); 142*66cf937cSVladimir Kotal } 143b28a5538SAdam Hornacek } 144