1 package com.atlassian.user.impl.delegation;
2
3 import com.atlassian.ldap.server.LdapServer;
4 import com.atlassian.user.*;
5 import com.atlassian.user.impl.delegation.security.authentication.DelegatingAuthenticator;
6 import com.atlassian.user.impl.DuplicateEntityException;
7 import com.atlassian.user.generic.AbstractTestExternalGroupManager;
8 import com.atlassian.user.search.page.PagerUtils;
9 import com.atlassian.user.security.authentication.Authenticator;
10
11 import java.util.Arrays;
12 import java.util.List;
13
14 import net.sf.hibernate.HibernateException;
15
16
17
18
19 public class TestDelegatingGroupManagerWithLdapAndHibernate extends AbstractTestExternalGroupManager
20 {
21 private GroupManager ldapGroupManager;
22 private UserManager ldapUserManager;
23 private Authenticator ldapAuthenticator;
24 private GroupManager hibernateGroupManager;
25 private UserManager hibernateUserManager;
26 private Authenticator hibernateAuthenticator;
27 private LdapServer ldapServer;
28 private GroupManager delegatingGroupManager;
29 private UserManager delegatingUserManager;
30
31 protected String[] getConfigLocations()
32 {
33 return new String[]{
34 "classpath:com/atlassian/user/impl/ldap/ldapTestContext.xml",
35 "classpath:com/atlassian/user/impl/ldap/ldapTestServerContext.xml",
36 "classpath:com/atlassian/user/impl/ldap/static/flat/ldapTestStaticFlatContext.xml",
37 "classpath:com/atlassian/user/impl/hibernate/hibernateTestContext.xml",
38 "classpath:com/atlassian/user/dataSourceTestContext.xml"
39 };
40 }
41
42 protected void onSetUp() throws Exception
43 {
44 super.onSetUp();
45 ldapServer.start();
46 delegatingGroupManager = new DelegatingGroupManager(Arrays.asList(new GroupManager[]{
47 ldapGroupManager,
48 hibernateGroupManager,
49 }));
50 delegatingUserManager = new DelegatingUserManager(Arrays.asList(new UserManager[]{
51 ldapUserManager,
52 hibernateUserManager,
53 }));
54 }
55
56
57 protected void onTearDown() throws Exception
58 {
59 ldapServer.stop();
60 super.onTearDown();
61 }
62
63 public void setLdapServer(LdapServer ldapServer)
64 {
65 this.ldapServer = ldapServer;
66 }
67
68 public void setHibernateGroupManager(GroupManager hibernateGroupManager)
69 {
70 this.hibernateGroupManager = hibernateGroupManager;
71 }
72
73 public void setHibernateUserManager(UserManager hibernateUserManager)
74 {
75 this.hibernateUserManager = hibernateUserManager;
76 }
77
78 public void setHibernateAuthenticator(Authenticator hibernateAuthenticator)
79 {
80 this.hibernateAuthenticator = hibernateAuthenticator;
81 }
82
83 public void setLdapGroupManager(GroupManager ldapGroupManager)
84 {
85 this.ldapGroupManager = ldapGroupManager;
86 }
87
88 public void setLdapUserManager(UserManager ldapUserManager)
89 {
90 this.ldapUserManager = ldapUserManager;
91 }
92
93 public void setLdapAuthenticator(Authenticator ldapAuthenticator)
94 {
95 this.ldapAuthenticator = ldapAuthenticator;
96 }
97
98 protected UserManager getUserManager()
99 {
100 return delegatingUserManager;
101 }
102
103 protected GroupManager getGroupManager()
104 {
105 return delegatingGroupManager;
106 }
107
108 public void testLdapExternalMembership() throws Exception
109 {
110 Group localGroup = delegatingGroupManager.createGroup("local-group");
111 User localUser = delegatingUserManager.createUser("local-user");
112 User externalUser = ldapUserManager.getUser("user1");
113 delegatingGroupManager.addMembership(localGroup, localUser);
114 delegatingGroupManager.addMembership(localGroup, externalUser);
115
116 List members = PagerUtils.toList(delegatingGroupManager.getMemberNames(localGroup));
117 assertEquals(2, members.size());
118 assertEquals("user1", members.get(0));
119 assertEquals("local-user", members.get(1));
120
121 List externalMembers = PagerUtils.toList(delegatingGroupManager.getExternalMemberNames(localGroup));
122 assertEquals(1, externalMembers.size());
123 assertEquals("user1", externalMembers.get(0));
124
125 List localMembers = PagerUtils.toList(delegatingGroupManager.getLocalMemberNames(localGroup));
126 assertEquals(1, localMembers.size());
127 assertEquals("local-user", localMembers.get(0));
128
129 List groupsForExternalUser = PagerUtils.toList(delegatingGroupManager.getGroups(externalUser));
130 assertEquals(2, groupsForExternalUser.size());
131
132 assertEquals(ldapGroupManager.getGroup("group1"), groupsForExternalUser.get(0));
133 assertEquals(localGroup, groupsForExternalUser.get(1));
134 }
135
136 public void testAuthenticateAgainstLdap() throws Exception
137 {
138 assertTrue(ldapAuthenticator.authenticate("user1", "pass1"));
139
140 Authenticator delegatingAuthenticator = new DelegatingAuthenticator(delegatingUserManager, Arrays.asList(new Authenticator[] {
141 ldapAuthenticator,
142 hibernateAuthenticator
143 }));
144
145 assertTrue(delegatingAuthenticator.authenticate("user1", "pass1"));
146
147 User hibernateUser = hibernateUserManager.createUser("user1");
148 hibernateUserManager.alterPassword(hibernateUser, "anotherpass");
149
150 assertTrue(delegatingAuthenticator.authenticate("user1", "pass1"));
151 }
152
153
154
155
156 public void testCreateGroup() throws EntityException, HibernateException
157 {
158 Group group = getGroupManager().createGroup("group");
159 assertNotNull(group);
160
161 try
162 {
163 getGroupManager().createGroup("group");
164 fail("Expected DuplicateEntityException when trying to create a duplicate group");
165 }
166 catch (DuplicateEntityException expected)
167 {
168 }
169
170 assertEquals(9, PagerUtils.count(getGroupManager().getGroups()));
171 }
172 }