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                  * Retrieves the Reference of this object.
277                  *
278                  * @return The non-null Reference of this object.
279                  * @throws javax.naming.NamingException If a naming exception was encountered
280                  *                                      while retrieving the reference.
281                  */
282                 public Reference getReference() throws NamingException
283                 {
284                     return null;
285                 }
286             };
287         }
288     }
289 }