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