1 package com.atlassian.user.configuration;
2
3
4 import java.io.ByteArrayInputStream;
5 import java.io.InputStream;
6
7 import junit.framework.TestCase;
8
9 import com.atlassian.cache.empty.EmptyCacheManager;
10 import com.atlassian.user.User;
11 import com.atlassian.user.configuration.xml.XMLConfiguration;
12 import com.atlassian.user.impl.DefaultGroup;
13 import com.atlassian.user.impl.DefaultUser;
14 import com.atlassian.user.impl.cache.CachingGroupManager;
15 import com.atlassian.user.impl.cache.CachingUserManager;
16 import com.atlassian.user.impl.cache.properties.CachingPropertySetFactory;
17 import com.atlassian.user.impl.hibernate.DefaultHibernateGroup;
18 import com.atlassian.user.impl.hibernate.DefaultHibernateUser;
19 import com.atlassian.user.impl.hibernate.HibernateGroupManager;
20 import com.atlassian.user.impl.hibernate.HibernateUserManager;
21 import com.atlassian.user.impl.hibernate.configuration.HibernateXMLConfiguration;
22 import com.atlassian.user.impl.hibernate.properties.HibernatePropertySetFactory;
23 import com.atlassian.user.impl.hibernate.search.query.HibernateEntityQueryParser;
24 import com.atlassian.user.impl.ldap.LDAPGroupManagerReadOnly;
25 import com.atlassian.user.impl.ldap.LDAPUserManagerReadOnly;
26 import com.atlassian.user.impl.ldap.LdapRepositoryAccessor;
27 import com.atlassian.user.impl.ldap.properties.LdapConnectionProperties;
28 import com.atlassian.user.impl.ldap.properties.LdapSearchProperties;
29 import com.atlassian.user.impl.ldap.security.authentication.DefaultLDAPAuthenticator;
30 import com.atlassian.user.impl.memory.MemoryGroupManager;
31 import com.atlassian.user.impl.memory.MemoryGroupManagerReadOnly;
32 import com.atlassian.user.impl.memory.MemoryUserManager;
33 import com.atlassian.user.impl.memory.MemoryUserManagerReadOnly;
34 import com.atlassian.user.impl.memory.properties.MemoryPropertySetFactory;
35 import com.atlassian.user.impl.osuser.OSUGroup;
36 import com.atlassian.user.impl.osuser.OSUGroupManager;
37 import com.atlassian.user.impl.osuser.OSUUser;
38 import com.atlassian.user.impl.osuser.OSUUserManager;
39 import com.atlassian.user.impl.osuser.properties.OSUPropertySetFactory;
40 import com.atlassian.user.impl.osuser.security.authentication.OSUListOfCredentialProvidersAuthenticator;
41 import com.atlassian.user.impl.osuser.security.password.OSUPasswordEncryptor;
42 import com.atlassian.user.repository.RepositoryIdentifier;
43 import com.atlassian.user.search.page.PagerUtils;
44 import com.atlassian.user.search.query.DefaultEntityQueryParser;
45 import com.atlassian.user.security.authentication.DefaultAuthenticator;
46
47
48
49
50 public class TestDefaultRepositoryConfigurations extends TestCase
51 {
52 private String memoryRepository = "<atlassian-user><repositories>" +
53 "<memory key=\"memory1\" name=\"My memory repository\"></memory>" +
54 "</repositories></atlassian-user>";
55
56 private String readOnlyMemoryRepository = "<atlassian-user><repositories>" +
57 "<memory key=\"memory1\" name=\"My memory repository\">" +
58 " <classes>\n" +
59 " <userManager>com.atlassian.user.impl.memory.MemoryUserManagerReadOnly</userManager>\n" +
60 " <groupManager>com.atlassian.user.impl.memory.MemoryGroupManagerReadOnly</groupManager>\n" +
61 " </classes>" +
62 "</memory>" +
63 "</repositories></atlassian-user>";
64
65
66 private String cachingMemoryRepository = "<atlassian-user><repositories>" +
67 "<memory key=\"memory1\" name=\"My memory repository\" cache=\"true\"></memory>" +
68 "</repositories></atlassian-user>";
69
70 private String hibernateRepository = "<atlassian-user><repositories>" +
71 "<hibernate key=\"hibernate1\" name=\"My hibernate repository\">" +
72 " <classes>" +
73 " <param name=\"accessor\">com.atlassian.user.impl.hibernate.configuration.MemoryHsqlHibernateAccessor</param>" +
74 " </classes>" +
75 "</hibernate>" +
76 "</repositories></atlassian-user>";
77
78 private String cachingHibernateRepository = "<atlassian-user><repositories>" +
79 "<hibernate key=\"hibernate1\" name=\"My hibernate repository\" cache=\"true\">" +
80 " <classes>" +
81 " <param name=\"accessor\">com.atlassian.user.impl.hibernate.configuration.MemoryHsqlHibernateAccessor</param>" +
82 " </classes>" +
83 "</hibernate>" +
84 "</repositories></atlassian-user>";
85
86 private String ldapRepository = "<atlassian-user><repositories>" +
87 "<ldap key=\"ldap1\" name=\"My LDAP repository\">" +
88 " <host>localhost</host>" +
89 " <timeToLive>600</timeToLive>" +
90 " <readTimeout>123</readTimeout>" +
91 " <connectTimeout>500</connectTimeout>" +
92 "</ldap>" +
93 "</repositories></atlassian-user>";
94
95 private String cachingLdapRepository = "<atlassian-user><repositories>" +
96 "<ldap key=\"ldap1\" name=\"My LDAP repository\" cache=\"true\"><timeToLive>600</timeToLive></ldap>" +
97 "</repositories></atlassian-user>";
98
99 private String osUserRepository = "<atlassian-user><repositories>" +
100 "<osuser key=\"osuser1\" name=\"My OSUser repository\">" +
101 " <classes>" +
102 " <param name=\"configFile\">osuser-test.xml</param>" +
103 " </classes>" +
104 "</osuser>" +
105 "</repositories></atlassian-user>";
106
107 public void testMemoryRepository() throws Exception
108 {
109 InputStream is = new ByteArrayInputStream(memoryRepository.getBytes());
110 XMLConfiguration config = new XMLConfiguration(is);
111 config.init();
112 DelegationAccessor delegationAccessor = config.getDelegationAccessor();
113
114 assertEquals("only memory repository present", 1, delegationAccessor.getRepositoryAccessors().size());
115 RepositoryAccessor repository = delegationAccessor.getRepositoryAccessor("memory1");
116 assertEquals(repository, delegationAccessor.getRepositoryAccessors().get(0));
117
118 assertEquals(MemoryUserManager.class, repository.getUserManager().getClass());
119 assertEquals(MemoryGroupManager.class, repository.getGroupManager().getClass());
120 assertEquals(DefaultAuthenticator.class, repository.getAuthenticator().getClass());
121 assertEquals(DefaultEntityQueryParser.class, repository.getEntityQueryParser().getClass());
122 assertEquals(MemoryPropertySetFactory.class, repository.getPropertySetFactory().getClass());
123
124 repository.getUserManager().createUser("bob");
125 assertEquals(DefaultUser.class, repository.getUserManager().getUser("bob").getClass());
126
127 repository.getGroupManager().createGroup("confluence-users");
128 assertEquals(DefaultGroup.class, repository.getGroupManager().getGroup("confluence-users").getClass());
129 }
130
131 public void testReadOnlyMemoryRepository() throws Exception
132 {
133 InputStream is = new ByteArrayInputStream(readOnlyMemoryRepository.getBytes());
134 XMLConfiguration config = new XMLConfiguration(is);
135 config.init();
136 DelegationAccessor delegationAccessor = config.getDelegationAccessor();
137
138 assertEquals("only memory repository present", 1, delegationAccessor.getRepositoryAccessors().size());
139 RepositoryAccessor repository = delegationAccessor.getRepositoryAccessor("memory1");
140 assertEquals(repository, delegationAccessor.getRepositoryAccessors().get(0));
141
142 assertEquals(MemoryUserManagerReadOnly.class, repository.getUserManager().getClass());
143 assertEquals(MemoryGroupManagerReadOnly.class, repository.getGroupManager().getClass());
144 assertEquals(DefaultAuthenticator.class, repository.getAuthenticator().getClass());
145 assertEquals(DefaultEntityQueryParser.class, repository.getEntityQueryParser().getClass());
146 assertEquals(MemoryPropertySetFactory.class, repository.getPropertySetFactory().getClass());
147
148 assertEquals(0, PagerUtils.count(repository.getUserManager().getUsers()));
149 assertEquals(0, PagerUtils.count(repository.getGroupManager().getGroups()));
150 }
151
152 public void testCachingMemoryRepository() throws Exception
153 {
154 InputStream is = new ByteArrayInputStream(cachingMemoryRepository.getBytes());
155 XMLConfiguration config = new CachingXMLConfiguration(is, new EmptyCacheManager());
156 config.init();
157 DelegationAccessor delegationAccessor = config.getDelegationAccessor();
158
159 assertEquals("only memory repository present", 1, delegationAccessor.getRepositoryAccessors().size());
160 RepositoryAccessor repository = delegationAccessor.getRepositoryAccessor("memory1");
161 assertEquals(repository, delegationAccessor.getRepositoryAccessors().get(0));
162
163 assertEquals(CachingUserManager.class, repository.getUserManager().getClass());
164 assertEquals(CachingGroupManager.class, repository.getGroupManager().getClass());
165 assertEquals(DefaultAuthenticator.class, repository.getAuthenticator().getClass());
166 assertEquals(DefaultEntityQueryParser.class, repository.getEntityQueryParser().getClass());
167 assertEquals(CachingPropertySetFactory.class, repository.getPropertySetFactory().getClass());
168
169 repository.getUserManager().createUser("bob");
170 assertEquals(DefaultUser.class, repository.getUserManager().getUser("bob").getClass());
171
172 repository.getGroupManager().createGroup("confluence-users");
173 assertEquals(DefaultGroup.class, repository.getGroupManager().getGroup("confluence-users").getClass());
174 }
175
176 public void testHibernateRepository() throws Exception
177 {
178 InputStream is = new ByteArrayInputStream(hibernateRepository.getBytes());
179 XMLConfiguration config = new HibernateXMLConfiguration(is, new EmptyCacheManager());
180 config.init();
181 DelegationAccessor delegationAccessor = config.getDelegationAccessor();
182
183 assertEquals("only hibernate repository present", 1, delegationAccessor.getRepositoryAccessors().size());
184 RepositoryAccessor repository = delegationAccessor.getRepositoryAccessor("hibernate1");
185 assertEquals(repository, delegationAccessor.getRepositoryAccessors().get(0));
186
187 assertEquals(HibernateUserManager.class, repository.getUserManager().getClass());
188 assertEquals(HibernateGroupManager.class, repository.getGroupManager().getClass());
189 assertEquals(DefaultAuthenticator.class, repository.getAuthenticator().getClass());
190 assertEquals(HibernateEntityQueryParser.class, repository.getEntityQueryParser().getClass());
191 assertEquals(HibernatePropertySetFactory.class, repository.getPropertySetFactory().getClass());
192
193 repository.getUserManager().createUser("bob");
194 assertEquals(DefaultHibernateUser.class, repository.getUserManager().getUser("bob").getClass());
195
196 repository.getGroupManager().createGroup("confluence-users");
197 assertEquals(DefaultHibernateGroup.class, repository.getGroupManager().getGroup("confluence-users").getClass());
198 }
199
200 public void testCachingHibernateRepository() throws Exception
201 {
202 InputStream is = new ByteArrayInputStream(cachingHibernateRepository.getBytes());
203 XMLConfiguration config = new HibernateXMLConfiguration(is, new EmptyCacheManager());
204 config.init();
205 DelegationAccessor delegationAccessor = config.getDelegationAccessor();
206
207 assertEquals("only hibernate repository present", 1, delegationAccessor.getRepositoryAccessors().size());
208 RepositoryAccessor repository = delegationAccessor.getRepositoryAccessor("hibernate1");
209 assertEquals(repository, delegationAccessor.getRepositoryAccessors().get(0));
210
211 assertEquals(CachingUserManager.class, repository.getUserManager().getClass());
212 assertEquals(CachingGroupManager.class, repository.getGroupManager().getClass());
213 assertEquals(DefaultAuthenticator.class, repository.getAuthenticator().getClass());
214 assertEquals(HibernateEntityQueryParser.class, repository.getEntityQueryParser().getClass());
215 assertEquals(CachingPropertySetFactory.class, repository.getPropertySetFactory().getClass());
216
217 repository.getUserManager().createUser("bob");
218 assertEquals(DefaultHibernateUser.class, repository.getUserManager().getUser("bob").getClass());
219
220 repository.getGroupManager().createGroup("confluence-users");
221 assertEquals(DefaultHibernateGroup.class, repository.getGroupManager().getGroup("confluence-users").getClass());
222 }
223
224 public void testOSUserRepository() throws Exception
225 {
226 InputStream is = new ByteArrayInputStream(osUserRepository.getBytes());
227 XMLConfiguration config = new XMLConfiguration(is);
228 config.init();
229 DelegationAccessor delegationAccessor = config.getDelegationAccessor();
230
231 assertEquals("only osuser repository present", 1, delegationAccessor.getRepositoryAccessors().size());
232 DefaultRepositoryAccessor repository = (DefaultRepositoryAccessor) delegationAccessor.getRepositoryAccessor("osuser1");
233 assertEquals(repository, delegationAccessor.getRepositoryAccessors().get(0));
234
235 assertEquals(OSUUserManager.class, repository.getUserManager().getClass());
236 assertEquals(OSUGroupManager.class, repository.getGroupManager().getClass());
237 assertEquals(OSUListOfCredentialProvidersAuthenticator.class, repository.getAuthenticator().getClass());
238 assertEquals(DefaultEntityQueryParser.class, repository.getEntityQueryParser().getClass());
239 assertEquals(OSUPropertySetFactory.class, repository.getPropertySetFactory().getClass());
240 assertEquals(OSUPasswordEncryptor.class, repository.getPasswordEncryptor().getClass());
241
242 User bob = repository.getUserManager().createUser("bob");
243 assertEquals(OSUUser.class, bob.getClass());
244 assertEquals(bob, repository.getUserManager().getUser("bob"));
245
246 repository.getGroupManager().createGroup("confluence-users");
247 assertEquals(OSUGroup.class, repository.getGroupManager().getGroup("confluence-users").getClass());
248
249 repository.getPasswordEncryptor().encrypt("secret");
250 }
251
252 public void testLdapRepository() throws Exception
253 {
254 InputStream is = new ByteArrayInputStream(ldapRepository.getBytes());
255 XMLConfiguration config = new XMLConfiguration(is);
256 config.init();
257 DelegationAccessor delegationAccessor = config.getDelegationAccessor();
258
259 assertEquals("only ldap accessor present", 1, delegationAccessor.getRepositoryAccessors().size());
260 LdapRepositoryAccessor accessor = (LdapRepositoryAccessor) delegationAccessor.getRepositoryAccessor("ldap1");
261 assertEquals(accessor, delegationAccessor.getRepositoryAccessors().get(0));
262
263 assertEquals(LDAPUserManagerReadOnly.class, accessor.getUserManager().getClass());
264 assertEquals(LDAPGroupManagerReadOnly.class, accessor.getGroupManager().getClass());
265 assertEquals(DefaultLDAPAuthenticator.class, accessor.getAuthenticator().getClass());
266 assertEquals(com.atlassian.user.impl.ldap.search.query.LDAPEntityQueryParser.class, accessor.getEntityQueryParser().getClass());
267 assertNull(accessor.getPropertySetFactory());
268
269 RepositoryIdentifier identifier = accessor.getIdentifier();
270 assertEquals("ldap1", identifier.getKey());
271 assertEquals("My LDAP repository", identifier.getName());
272 assertEquals("1", System.getProperty("com.sun.jndi.ldap.connect.pool.initsize"));
273 assertEquals("10", System.getProperty("com.sun.jndi.ldap.connect.pool.prefsize"));
274 assertEquals("0", System.getProperty("com.sun.jndi.ldap.connect.pool.maxsize"));
275 assertEquals("300000", System.getProperty("com.sun.jndi.ldap.connect.pool.timeout"));
276 assertEquals("none", System.getProperty("com.sun.jndi.ldap.connect.pool.debug"));
277
278 LdapConnectionProperties connectionProperties = accessor.getConnectionProperties();
279 assertTrue(connectionProperties.isPoolingOn());
280 assertEquals("plain ssl", connectionProperties.getSecurityProtocol());
281 assertEquals("simple", connectionProperties.getSecurityAuthentication());
282 assertEquals("com.sun.jndi.ldap.LdapCtxFactory", connectionProperties.getJNDIInitialContextFactoryIdentifier());
283 assertEquals(100, connectionProperties.getSearchBatchSize());
284 assertEquals("ldaps://localhost:389", connectionProperties.getProviderURL());
285 assertEquals(500, connectionProperties.getConnectTimeoutMillis());
286 assertEquals(123, connectionProperties.getReadTimeoutMillis());
287
288 LdapSearchProperties searchProperties = accessor.getSearchProperties();
289 assertEquals(600, searchProperties.getTimeLimitMillis());
290 assertTrue(searchProperties.isUserSearchScopeAllDepths());
291 assertTrue(searchProperties.isGroupSearchScopeAllDepths());
292 }
293
294 public void testCachingLdapRepository() throws Exception
295 {
296 InputStream is = new ByteArrayInputStream(cachingLdapRepository.getBytes());
297 XMLConfiguration config = new CachingXMLConfiguration(is, new EmptyCacheManager());
298 config.init();
299 DelegationAccessor delegationAccessor = config.getDelegationAccessor();
300
301 assertEquals("only ldap accessor present", 1, delegationAccessor.getRepositoryAccessors().size());
302 LdapRepositoryAccessor accessor = (LdapRepositoryAccessor) delegationAccessor.getRepositoryAccessor("ldap1");
303 assertEquals(accessor, delegationAccessor.getRepositoryAccessors().get(0));
304
305 assertEquals(CachingUserManager.class, accessor.getUserManager().getClass());
306 assertEquals(CachingGroupManager.class, accessor.getGroupManager().getClass());
307 assertEquals(DefaultLDAPAuthenticator.class, accessor.getAuthenticator().getClass());
308 assertEquals(com.atlassian.user.impl.ldap.search.query.LDAPEntityQueryParser.class, accessor.getEntityQueryParser().getClass());
309 assertNull(accessor.getPropertySetFactory());
310
311 RepositoryIdentifier identifier = accessor.getIdentifier();
312 assertEquals("ldap1", identifier.getKey());
313
314 assertEquals("1", System.getProperty("com.sun.jndi.ldap.connect.pool.initsize"));
315 assertEquals("10", System.getProperty("com.sun.jndi.ldap.connect.pool.prefsize"));
316 assertEquals("0", System.getProperty("com.sun.jndi.ldap.connect.pool.maxsize"));
317 assertEquals("300000", System.getProperty("com.sun.jndi.ldap.connect.pool.timeout"));
318 assertEquals("none", System.getProperty("com.sun.jndi.ldap.connect.pool.debug"));
319
320 LdapConnectionProperties connectionProperties = accessor.getConnectionProperties();
321 assertTrue(connectionProperties.isPoolingOn());
322 assertEquals("plain ssl", connectionProperties.getSecurityProtocol());
323 assertEquals("simple", connectionProperties.getSecurityAuthentication());
324 assertEquals("com.sun.jndi.ldap.LdapCtxFactory", connectionProperties.getJNDIInitialContextFactoryIdentifier());
325 assertEquals(100, connectionProperties.getSearchBatchSize());
326 assertEquals(30000, connectionProperties.getConnectTimeoutMillis());
327 assertEquals(60000, connectionProperties.getReadTimeoutMillis());
328
329 LdapSearchProperties searchProperties = accessor.getSearchProperties();
330 assertEquals(600, searchProperties.getTimeLimitMillis());
331 assertTrue(searchProperties.isUserSearchScopeAllDepths());
332 assertTrue(searchProperties.isGroupSearchScopeAllDepths());
333 }
334 }