1 package com.atlassian.user.impl.memory.configuration;
2
3 import com.atlassian.user.GroupManager;
4 import com.atlassian.user.UserManager;
5 import com.atlassian.user.configuration.*;
6 import com.atlassian.user.configuration.xml.XMLConfiguration;
7 import com.atlassian.user.configuration.xml.XMLConfigurationParser;
8 import com.atlassian.user.impl.delegation.properties.DelegatingPropertySetFactory;
9 import com.atlassian.user.impl.delegation.security.authentication.DelegatingAuthenticator;
10 import com.atlassian.user.impl.memory.MemoryGroupManager;
11 import com.atlassian.user.impl.memory.MemoryGroupManagerReadOnly;
12 import com.atlassian.user.impl.memory.MemoryUserManager;
13 import com.atlassian.user.impl.memory.MemoryUserManagerReadOnly;
14 import com.atlassian.user.impl.memory.properties.MemoryPropertySetFactory;
15 import com.atlassian.user.properties.PropertySetFactory;
16 import com.atlassian.user.repository.RepositoryIdentifier;
17 import com.atlassian.user.security.authentication.Authenticator;
18 import com.atlassian.user.security.authentication.DefaultAuthenticator;
19 import com.atlassian.user.util.FileUtils;
20 import com.opensymphony.module.propertyset.hibernate.DefaultHibernateConfigurationProvider;
21 import com.opensymphony.module.propertyset.hibernate.HibernateConfigurationProvider;
22 import net.sf.hibernate.*;
23 import net.sf.hibernate.exception.SQLExceptionConverter;
24 import net.sf.hibernate.metadata.ClassMetadata;
25 import net.sf.hibernate.metadata.CollectionMetadata;
26
27 import javax.naming.NamingException;
28 import javax.naming.Reference;
29 import java.io.File;
30 import java.io.FileInputStream;
31 import java.io.InputStream;
32 import java.io.Serializable;
33 import java.sql.Connection;
34 import java.util.*;
35
36 public class TestMemoryRepositoryProcessor extends AbstractRepositoryProcessorTestCase
37 {
38 public PropertySetFactory propertySetFactory;
39 private HashMap<String, ArrayList> args;
40
41 public void setUp() throws Exception
42 {
43 super.setUp();
44
45 args = new HashMap<String, ArrayList>();
46 args.put("propertySetFactories", new ArrayList());
47 parser = new XMLConfigurationParser();
48 }
49
50 public void tearDown() throws Exception
51 {
52 super.tearDown();
53 args = null;
54 }
55
56 public void testProcess() throws ConfigurationException
57 {
58 initializeConfiguration(memXML);
59 RepositoryAccessor repoAccessor = delegationAccessor.getRepositoryAccessor("mem1");
60 RepositoryIdentifier repo = repoAccessor.getIdentifier();
61
62 assertEquals("mem1", repo.getKey());
63 assertEquals("name1", repo.getName());
64 }
65
66 public void testConfigureUserManager() throws ConfigurationException
67 {
68 initializeConfiguration(memXML);
69 RepositoryAccessor repoAccessor = delegationAccessor.getRepositoryAccessor("mem1");
70
71 UserManager userManager = repoAccessor.getUserManager();
72 assertNotNull(userManager);
73 assertTrue(userManager instanceof MemoryUserManager);
74 }
75
76 public void testConfigureGroupManager() throws ConfigurationException
77 {
78 initializeConfiguration(memXML);
79 RepositoryAccessor repoAccessor = delegationAccessor.getRepositoryAccessor("mem1");
80
81 GroupManager groupManager = repoAccessor.getGroupManager();
82 assertNotNull(groupManager);
83 assertTrue(groupManager instanceof MemoryGroupManager);
84 }
85
86 public void testConfigureAuthenticator() throws ConfigurationException
87 {
88 initializeConfiguration(memXML);
89 RepositoryAccessor repoAccessor = delegationAccessor.getRepositoryAccessor("mem1");
90
91 Authenticator authenticator = repoAccessor.getAuthenticator();
92 assertNotNull(authenticator);
93 assertTrue(authenticator instanceof DefaultAuthenticator);
94 }
95
96 public void testConfigurePropertySetFactory() throws ConfigurationException
97 {
98 initializeConfiguration(memXML);
99 RepositoryAccessor repoAccessor = delegationAccessor.getRepositoryAccessor("mem1");
100
101 propertySetFactory = repoAccessor.getPropertySetFactory();
102 assertNotNull(propertySetFactory);
103 assertTrue(propertySetFactory instanceof MemoryPropertySetFactory);
104 }
105
106 public void testConfigureOverrideUserManager()
107 {
108 initializeConfiguration(memXML2, args);
109 RepositoryAccessor repoAccessor = delegationAccessor.getRepositoryAccessor("mem2");
110 UserManager userManager = repoAccessor.getUserManager();
111 assertNotNull(userManager);
112 assertTrue(userManager instanceof MemoryUserManagerReadOnly);
113 }
114
115 public void testConfigureOverrideGroupManager()
116 {
117 initializeConfiguration(memXML2, args);
118 RepositoryAccessor repoAccessor = delegationAccessor.getRepositoryAccessor("mem2");
119 GroupManager groupManager = repoAccessor.getGroupManager();
120 assertNotNull(groupManager);
121 assertTrue(groupManager instanceof MemoryGroupManagerReadOnly);
122 }
123
124 public void testConfigureOverrideAuthenticator()
125 {
126 initializeConfiguration(memXML2, args);
127 RepositoryAccessor repoAccessor = delegationAccessor.getRepositoryAccessor("mem2");
128 Authenticator authenticator = repoAccessor.getAuthenticator();
129 assertNotNull(authenticator);
130 assertTrue(authenticator instanceof DelegatingAuthenticator);
131 }
132
133 public void testConfigureOverridePropertySetFactory()
134 {
135 initializeConfiguration(memXML2, args);
136 RepositoryAccessor repoAccessor = delegationAccessor.getRepositoryAccessor("mem2");
137 propertySetFactory = repoAccessor.getPropertySetFactory();
138 assertNotNull(propertySetFactory);
139 assertTrue(propertySetFactory instanceof DelegatingPropertySetFactory);
140 }
141
142
143 protected void initializeConfiguration(String str, HashMap<String, ArrayList> args)
144 {
145 try
146 {
147 File xml = FileUtils.copyIntoTemporaryFile(str, "atlassian-user.xml");
148 FileInputStream is = new FileInputStream(xml);
149
150 config = new TestXMLConfiguration(is, args);
151 config.init();
152 }
153 catch (Exception e)
154 {
155 e.printStackTrace();
156 }
157 delegationAccessor = config.getDelegationAccessor();
158 }
159
160
161 class TestXMLConfiguration extends XMLConfiguration
162 {
163 HashMap<String, ArrayList> dependencies;
164
165 public TestXMLConfiguration(InputStream is, HashMap<String, ArrayList> components) throws ConfigurationException
166 {
167 super(is);
168 this.dependencies = components;
169 }
170
171 protected RepositoryAccessor configureRepository(RepositoryConfiguration config) throws ConfigurationException
172 {
173 SessionFactory sessionFactory = getAnonSessionFactory();
174 HibernateConfigurationProvider configurationProvider = new DefaultHibernateConfigurationProvider();
175 config.addComponent(Configuration.HIBERNATE_CONFIGURATION_PROVIDER, configurationProvider);
176 config.addComponent(Configuration.HIBERNATE_SESSION_FACTORY, sessionFactory);
177
178 if (dependencies != null)
179 {
180 Set<String> keys = dependencies.keySet();
181 Iterator<String> keysIter = keys.iterator();
182
183 while (keysIter.hasNext())
184 {
185 String key = keysIter.next();
186
187 config.addComponent(key, dependencies.get(key));
188 }
189 }
190
191 return super.configureRepository(config);
192 }
193
194 private SessionFactory getAnonSessionFactory()
195 {
196 return new SessionFactory(){
197 public Session openSession(Connection connection)
198 {
199 return null;
200 }
201
202 public Session openSession(Interceptor interceptor) throws HibernateException
203 {
204 return null;
205 }
206
207 public Session openSession(Connection connection, Interceptor interceptor)
208 {
209 return null;
210 }
211
212 public Session openSession() throws HibernateException
213 {
214 return null;
215 }
216
217 public Databinder openDatabinder() throws HibernateException
218 {
219 return null;
220 }
221
222 public ClassMetadata getClassMetadata(Class aClass) throws HibernateException
223 {
224 return null;
225 }
226
227 public CollectionMetadata getCollectionMetadata(String uid) throws HibernateException
228 {
229 return null;
230 }
231
232 public Map getAllClassMetadata() throws HibernateException
233 {
234 return null;
235 }
236
237 public Map getAllCollectionMetadata() throws HibernateException
238 {
239 return null;
240 }
241
242 public void close() throws HibernateException
243 {
244 }
245
246 public void evict(Class aClass) throws HibernateException
247 {
248 }
249
250 public void evict(Class aClass, Serializable serializable) throws HibernateException
251 {
252 }
253
254 public void evictCollection(String uid) throws HibernateException
255 {
256 }
257
258 public void evictCollection(String uid, Serializable serializable) throws HibernateException
259 {
260 }
261
262 public void evictQueries() throws HibernateException
263 {
264 }
265
266 public void evictQueries(String uid) throws HibernateException
267 {
268 }
269
270 public SQLExceptionConverter getSQLExceptionConverter()
271 {
272 return null;
273 }
274
275
276
277
278
279
280
281
282 public Reference getReference() throws NamingException
283 {
284 return null;
285 }
286 };
287 }
288 }
289 }