001    /**
002     * Copyright 2005-2011 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.kim.test.service;
017    
018    import org.junit.AfterClass;
019    import org.junit.BeforeClass;
020    import org.junit.Test;
021    import org.kuali.rice.core.api.lifecycle.Lifecycle;
022    import org.kuali.rice.core.framework.resourceloader.SpringResourceLoader;
023    import org.kuali.rice.kim.api.identity.IdentityService;
024    import org.kuali.rice.kim.api.identity.affiliation.EntityAffiliation;
025    import org.kuali.rice.kim.api.identity.entity.Entity;
026    import org.kuali.rice.kim.api.identity.entity.EntityDefault;
027    import org.kuali.rice.kim.api.identity.principal.Principal;
028    import org.kuali.rice.kim.api.identity.privacy.EntityPrivacyPreferences;
029    import org.kuali.rice.kim.api.identity.type.EntityTypeContactInfo;
030    
031    import org.kuali.rice.kim.service.KIMServiceLocatorInternal;
032    import org.kuali.rice.kim.test.KIMTestCase;
033    
034    import org.kuali.rice.test.BaselineTestCase;
035    import org.kuali.rice.test.SQLDataLoader;
036    import org.springframework.core.io.ClassPathResource;
037    import org.springframework.ldap.core.DistinguishedName;
038    import org.springframework.ldap.core.LdapTemplate;
039    import org.springframework.ldap.core.support.LdapContextSource;
040    import org.springframework.ldap.test.LdapTestUtils;
041    
042    import javax.xml.namespace.QName;
043    import java.util.List;
044    
045    import static org.junit.Assert.assertEquals;
046    import static org.junit.Assert.assertNotNull;
047    
048    /**
049     * @author Kuali Rice Team (rice.collab@kuali.org)
050     */
051    @BaselineTestCase.BaselineMode(BaselineTestCase.Mode.NONE)
052    public class LDAPIdentityServiceImplTest extends KIMTestCase {
053        private static final DistinguishedName baseName = new DistinguishedName("o=Whoniverse");
054    
055        private static final String PRINCIPAL = "uid=admin,ou=system";
056        private static final String CREDENTIALS = "secret";
057    
058        // This port MUST be free on local host for these unit tests to function.
059        private static int PORT = 10389;
060        private IdentityService identityService;
061    
062    
063        @BeforeClass
064        public static void startLDAPServer() throws Exception {
065            LdapTestUtils.startApacheDirectoryServer(PORT, baseName.toString(), "test", PRINCIPAL, CREDENTIALS, null);
066            LdapContextSource contextSource = new LdapContextSource();
067            contextSource.setUrl("ldap://127.0.0.1:" + PORT);
068            contextSource.setUserDn("");
069            contextSource.setPassword("");
070            contextSource.setPooled(false);
071            contextSource.afterPropertiesSet();
072    
073            // Create the Sprint LDAP template
074            LdapTemplate template = new LdapTemplate(contextSource);
075    
076            // Clear out any old data - and load the test data
077            LdapTestUtils.cleanAndSetup(template.getContextSource(), baseName, new ClassPathResource("ldap/testdata.ldif"));
078            System.out.println("____________Started LDAP_________");
079        }
080    
081        @AfterClass
082        public static void shutdownLDAP() throws Exception {
083            LdapTestUtils.destroyApacheDirectoryServer(PRINCIPAL, CREDENTIALS);
084             System.out.println("____________Shutdown LDAP_________");
085        }
086    
087    
088        public void setUp() throws Exception {
089            super.setUp();
090            identityService = (IdentityService) KIMServiceLocatorInternal.getBean("kimLDAPIdentityDelegateService");
091    
092        }
093    
094    
095        @Test
096        public void testGetEntity() {
097            Entity entity = identityService.getEntity("williamh");
098            assertNotNull("Entity must not be null", entity);
099            assertEquals("Entity name matched expected result", "williamh", entity.getPrincipals().get(0)
100                    .getPrincipalName());
101        }
102    
103        @Test
104        public void testGetEntityByPrincipalId() {
105            Entity entity = identityService.getEntityByPrincipalId("williamh");
106            assertNotNull("Entity must not be null", entity);
107            assertEquals("Entity name matched expected result", "williamh", entity.getPrincipals().get(0)
108                    .getPrincipalName());
109        }
110    
111        @Test
112        public void testGetEntityByPrincipalName() {
113            Entity entity = identityService.getEntityByPrincipalName("williamh");
114            assertNotNull("Entity must not be null", entity);
115            assertEquals("Entity name matched expected result", "williamh", entity.getPrincipals().get(0)
116                    .getPrincipalName());
117        }
118    
119        @Test
120        public void testGetEntityDefault() {
121            EntityDefault entity = identityService.getEntityDefault("williamh");
122            assertNotNull("Entity must not be null", entity);
123            assertEquals("Entity name matched expected result", "williamh", entity.getPrincipals().get(0)
124                    .getPrincipalName());
125        }
126    
127        @Test
128        public void testGetEntityDefaultByPrincipalId() {
129            EntityDefault entity = identityService.getEntityDefaultByPrincipalId("williamh");
130            assertNotNull("Entity must not be null", entity);
131            assertEquals("Entity name matched expected result", "williamh", entity.getPrincipals().get(0)
132                    .getPrincipalName());
133        }
134    
135        @Test
136        public void testGetEntityDefaultByPrincipalName() {
137            EntityDefault entity = identityService.getEntityDefaultByPrincipalName("williamh");
138            assertNotNull("Entity must not be null", entity);
139            assertEquals("Entity name matched expected result", "williamh", entity.getPrincipals().get(0)
140                    .getPrincipalName());
141        }
142    
143        @Test
144        public void testGetEntityPrivacyPreferences() {
145            EntityPrivacyPreferences entityPrivacyPreferences = identityService.getEntityPrivacyPreferences("williamh");
146            assertNotNull("Entity must not be null", entityPrivacyPreferences);
147    
148        }
149    
150        @Test
151        public void testGetPrincipal() {
152            Principal principal = identityService.getPrincipal("williamh");
153            assertNotNull("Principal must not be null", principal);
154            assertEquals("Principal name did not match expected result", "williamh", principal.getPrincipalName());
155        }
156    
157        @Test
158        public void testGetPrincipalByPrincipalName() {
159            Principal principal = identityService.getPrincipalByPrincipalName("williamh");
160            assertNotNull("principal must not be null", principal);
161            assertEquals("Principal ID did not match expected result", "williamh", principal.getPrincipalId());
162        }
163    
164        @Test
165        public void testGetContainedAttributes() {
166            Principal principal = identityService.getPrincipal("williamh");
167    
168            Entity entity = identityService.getEntity(principal.getEntityId());
169            assertNotNull("Entity Must not be null", entity);
170            EntityTypeContactInfo eet = entity.getEntityTypeContactInfoByTypeCode("PERSON");
171            List<EntityAffiliation> ea = entity.getAffiliations();
172            assertNotNull("PERSON EntityEntityType Must not be null", eet);
173            assertEquals("there should be 1 email address", 1, eet.getEmailAddresses().size());
174            assertEquals("Email address does not match", "williamh@test.edu",
175                    eet.getDefaultEmailAddress().getEmailAddressUnmasked());
176            assertEquals("there should be 1 phone number", 1, eet.getPhoneNumbers().size());
177            assertEquals("The Phone number does not match", "111-111-1111", eet.getPhoneNumbers().get(0)
178                    .getPhoneNumberUnmasked());
179            assertEquals("there should be 1 phone number", 1, ea.size());
180            assertEquals("The Affiliations do not match", "STAFF", ea.get(0).getAffiliationType().getCode());
181        }
182    
183    }