1 package org.exoplatform.platform.component.organization.test;
2
3 import org.exoplatform.container.PortalContainer;
4 import org.exoplatform.container.configuration.ConfigurationManager;
5 import org.exoplatform.container.xml.InitParams;
6 import org.exoplatform.platform.organization.integration.*;
7 import org.exoplatform.services.jcr.RepositoryService;
8 import org.exoplatform.services.jcr.core.ManageableRepository;
9 import org.exoplatform.services.organization.MembershipHandler;
10 import org.exoplatform.services.organization.OrganizationService;
11 import org.exoplatform.services.organization.User;
12 import org.exoplatform.services.organization.UserHandler;
13 import org.exoplatform.services.organization.externalstore.IDMExternalStoreService;
14 import org.exoplatform.services.organization.idm.*;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.mockito.Mockito;
18 import org.picketlink.idm.api.AttributesManager;
19 import org.picketlink.idm.api.IdentitySession;
20 import org.picketlink.idm.api.PersistenceManager;
21 import org.picketlink.idm.impl.api.session.IdentitySessionImpl;
22 import org.picketlink.idm.impl.api.session.context.IdentitySessionContextImpl;
23 import org.picketlink.idm.impl.repository.RepositoryIdentityStoreSessionImpl;
24 import org.picketlink.idm.spi.store.IdentityStoreInvocationContext;
25 import org.picketlink.idm.spi.store.IdentityStoreSession;
26
27 import javax.jcr.Node;
28 import javax.jcr.Session;
29 import javax.naming.ldap.LdapContext;
30
31 import static junit.framework.TestCase.assertFalse;
32 import static junit.framework.TestCase.assertNotNull;
33 import static org.mockito.Matchers.any;
34 import static org.mockito.Mockito.never;
35 import static org.mockito.internal.verification.VerificationModeFactory.times;
36
37 public class TestOrganizationIntegration {
38 PortalContainer container = null;
39
40 RepositoryService repositoryService = null;
41
42 OrganizationService organizationService = null;
43
44 @Before
45 public void setUp() throws Exception {
46 container = PortalContainer.getInstance();
47 repositoryService = container.getComponentInstanceOfType(RepositoryService.class);
48 organizationService = container.getComponentInstanceOfType(OrganizationService.class);
49 }
50
51 @Test
52 public void testIntegrationService() throws Exception {
53 IDMExternalStoreService externalStoreService = Mockito.mock(IDMExternalStoreService.class);
54 Mockito.when(externalStoreService.isEnabled()).thenReturn(false);
55 container.registerComponentInstance(org.exoplatform.services.organization.externalstore.IDMExternalStoreService.class,
56 externalStoreService);
57
58 OrganizationIntegrationService organizationIntegrationService =
59 container.createComponent(OrganizationIntegrationService.class);
60 container.registerComponentInstance(organizationIntegrationService);
61 assertNotNull(organizationIntegrationService);
62 NewUserListener userListener = container.createComponent(NewUserListener.class);
63 assertNotNull(userListener);
64 organizationIntegrationService.addListenerPlugin(userListener);
65 NewProfileListener profileListener = container.createComponent(NewProfileListener.class);
66 assertNotNull(profileListener);
67 organizationIntegrationService.addListenerPlugin(profileListener);
68 NewMembershipListener membershipListener = container.createComponent(NewMembershipListener.class);
69 assertNotNull(membershipListener);
70 organizationIntegrationService.addListenerPlugin(membershipListener);
71 NewGroupListener groupListener = container.createComponent(NewGroupListener.class);
72 assertNotNull(groupListener);
73 organizationIntegrationService.addListenerPlugin(groupListener);
74
75 }
76
77 @Test
78 public void testSyncDeletedUserException() throws Exception {
79 PicketLinkIDMService picketLinkIDMService = Mockito.mock(PicketLinkIDMService.class);
80 IdentitySessionImpl identitySession = Mockito.mock(IdentitySessionImpl.class);
81 Mockito.when((IdentitySessionImpl) picketLinkIDMService.getIdentitySession()).thenReturn(identitySession);
82 IdentitySessionContextImpl ctx = Mockito.mock(IdentitySessionContextImpl.class);
83 Mockito.when(((IdentitySessionImpl) identitySession).getSessionContext()).thenReturn(ctx);
84 IdentityStoreInvocationContext identityStoreInvocationContext = Mockito.mock(IdentityStoreInvocationContext.class);
85 Mockito.when(ctx.resolveStoreInvocationContext()).thenReturn(identityStoreInvocationContext);
86 RepositoryIdentityStoreSessionImpl repoSession = Mockito.mock(RepositoryIdentityStoreSessionImpl.class);
87 Mockito.when((RepositoryIdentityStoreSessionImpl) identityStoreInvocationContext.getIdentityStoreSession())
88 .thenReturn(repoSession);
89 IdentityStoreSession identityStoreSession = Mockito.mock(IdentityStoreSession.class);
90 Mockito.when(repoSession.getIdentityStoreSession("PortalLDAPStore")).thenReturn(identityStoreSession);
91 LdapContext ldapContext = Mockito.mock(LdapContext.class);
92 Mockito.when((LdapContext) identityStoreSession.getSessionContext()).thenReturn(ldapContext);
93 boolean connected = false;
94 if (ldapContext.getEnvironment() != null) {
95 connected = true;
96 } else {
97 connected = false;
98 }
99 assertFalse(connected);
100 OrganizationService organizationService = Mockito.mock(OrganizationService.class);
101 RepositoryService repositoryService = Mockito.mock(RepositoryService.class);
102 ConfigurationManager manager = Mockito.mock(ConfigurationManager.class);
103 PortalContainer container = Mockito.mock(PortalContainer.class);
104 InitParams initParams = Mockito.mock(InitParams.class);
105 PicketLinkIDMCacheService picketLinkIDMCacheService = Mockito.mock(PicketLinkIDMCacheService.class);
106 IDMExternalStoreService externalStoreService = Mockito.mock(IDMExternalStoreService.class);
107 Mockito.when(externalStoreService.isEnabled()).thenReturn(false);
108 OrganizationIntegrationService organizationIntegrationService =
109 Mockito.spy(new OrganizationIntegrationService(organizationService,
110 externalStoreService,
111 repositoryService,
112 manager,
113 container,
114 initParams,
115 picketLinkIDMCacheService));
116 PicketLinkIDMOrganizationServiceImpl picketLinkIDMOrganizationServiceImpl =
117 Mockito.mock(PicketLinkIDMOrganizationServiceImpl.class);
118 UserDAOImpl userDAO = new UserDAOImpl(picketLinkIDMOrganizationServiceImpl, picketLinkIDMService);
119 IdentitySession session = Mockito.mock(IdentitySession.class);
120 Mockito.when(picketLinkIDMService.getIdentitySession()).thenReturn(session);
121 User user = userDAO.createUserInstance("root");
122 user.setPassword("123456");
123 user.setEmail("test@gmail.com");
124 NewUserListener userListener = Mockito.mock(NewUserListener.class);
125 organizationIntegrationService.addListenerPlugin(userListener);
126 Mockito.verify(userListener, never()).preDelete(user);
127 Mockito.verify(userListener, never()).postDelete(user);
128 assertNotNull(user);
129 }
130
131 @Test
132 public void testSyncDeletedUser() throws Exception {
133 PicketLinkIDMService picketLinkIDMService = Mockito.mock(PicketLinkIDMService.class);
134 OrganizationService organizationService = Mockito.mock(OrganizationService.class);
135 RepositoryService repositoryService = Mockito.mock(RepositoryService.class);
136 ManageableRepository repository = Mockito.mock(ManageableRepository.class);
137 Mockito.when(repositoryService.getCurrentRepository()).thenReturn(repository);
138 Session session = Mockito.mock(Session.class);
139 Mockito.when(repository.getSystemSession("collaboration")).thenReturn(session);
140 ConfigurationManager manager = Mockito.mock(ConfigurationManager.class);
141 PortalContainer container = Mockito.mock(PortalContainer.class);
142 InitParams initParams = Mockito.mock(InitParams.class);
143 PicketLinkIDMCacheService picketLinkIDMCacheService = Mockito.mock(PicketLinkIDMCacheService.class);
144 IDMExternalStoreService externalStoreService = Mockito.mock(IDMExternalStoreService.class);
145 Mockito.when(externalStoreService.isEnabled()).thenReturn(false);
146 OrganizationIntegrationService organizationIntegrationService =
147 Mockito.spy(new OrganizationIntegrationService(organizationService,
148 externalStoreService,
149 repositoryService,
150 manager,
151 container,
152 initParams,
153 picketLinkIDMCacheService));
154 PicketLinkIDMOrganizationServiceImpl picketLinkIDMOrganizationServiceImpl =
155 Mockito.mock(PicketLinkIDMOrganizationServiceImpl.class);
156 UserDAOImpl userDAO = new UserDAOImpl(picketLinkIDMOrganizationServiceImpl, picketLinkIDMService);
157 IdentitySession identitySession = Mockito.mock(IdentitySession.class);
158 Mockito.when(picketLinkIDMService.getIdentitySession()).thenReturn(identitySession);
159 Config config = Mockito.mock(Config.class);
160 Mockito.when(picketLinkIDMOrganizationServiceImpl.getConfiguration()).thenReturn(config);
161 AttributesManager am = Mockito.mock(AttributesManager.class);
162 Mockito.when(identitySession.getAttributesManager()).thenReturn(am);
163 PersistenceManager persistenceManager = Mockito.mock(PersistenceManager.class);
164 Mockito.when(identitySession.getPersistenceManager()).thenReturn(persistenceManager);
165 User user = userDAO.createUserInstance("exo");
166 user.setPassword("123456");
167 user.setEmail("test@gmail.com");
168 userDAO.saveUser(user, false);
169 userDAO.persistUserInfo(user, identitySession, true);
170 userDAO.populateUser(user, identitySession);
171 NewUserListener userListener = Mockito.mock(NewUserListener.class);
172 organizationIntegrationService.addListenerPlugin(userListener);
173 MembershipHandler membershipHandler = Mockito.mock(MembershipHandler.class);
174 Mockito.when(organizationService.getMembershipHandler()).thenReturn(membershipHandler);
175 UserHandler userHandler = Mockito.mock(UserHandler.class);
176 Mockito.when(organizationService.getUserHandler()).thenReturn(userHandler);
177 Node folder = Mockito.mock(Node.class);
178 Mockito.when(session.getItem("/")).thenReturn(folder);
179 Node organizationInitializersHomePathNode = Mockito.mock(Node.class);
180 Mockito.when(folder.getNode("OrganizationIntegrationService")).thenReturn(organizationInitializersHomePathNode);
181 Node node = Mockito.mock(Node.class);
182 Mockito.when(org.exoplatform.platform.organization.integration.Util.getUsersFolder(session)).thenReturn(node);
183 Mockito.when(Util.hasUserFolder(session, user.getUserName())).thenReturn(true);
184 userDAO.removeUser(user.getUserName(), false);
185 organizationIntegrationService.syncUser("exo", EventType.DELETED.toString());
186 Mockito.verify(userListener, times(1)).preDelete(any());
187 Mockito.verify(userListener, times(1)).postDelete(any());
188 }
189
190 }