1   package com.atlassian.user.impl.hibernate;
2   
3   import com.atlassian.user.EntityException;
4   import com.atlassian.user.User;
5   import com.atlassian.user.UserManager;
6   import com.atlassian.user.generic.AbstractTestUserManager;
7   import com.atlassian.user.impl.DefaultUser;
8   import com.atlassian.user.impl.osuser.security.password.OSUPasswordEncryptor;
9   import com.atlassian.user.security.password.Credential;
10  import com.atlassian.user.security.password.PasswordEncryptor;
11  
12  public class TestHibernateUserManager extends AbstractTestUserManager
13  {
14      protected HibernateUserManager hibernateUserManager;
15  
16      protected UserManager getUserManager()
17      {
18          return hibernateUserManager;
19      }
20  
21      public void setHibernateUserManager(HibernateUserManager hibernateUserManager)
22      {
23          this.hibernateUserManager = hibernateUserManager;
24      }
25  
26      protected String[] getConfigLocations()
27      {
28          return new String[]{
29              "classpath:com/atlassian/user/impl/hibernate/hibernateTestContext.xml",
30              "classpath:com/atlassian/user/dataSourceTestContext.xml",
31          };
32      }
33      public void testSetPassword() throws Exception
34      {
35          getUserManager().createUser(new DefaultUser("user"), Credential.encrypted("password-hash"));
36  
37          DefaultUser retrievedUser = (DefaultUser) getUserManager().getUser("user");
38          String retrievedPassword = retrievedUser.getPassword();
39  
40          assertEquals("password-hash", retrievedPassword);
41      }
42  
43      public void testAlterPassword() throws Exception
44      {
45          final UserManager userManager = getUserManager();
46          PasswordEncryptor encryptor = new OSUPasswordEncryptor();
47  
48          Thread createAndAlterPassword = new Thread(new Runnable() {
49              public void run()
50              {
51                  try
52                  {
53                      User user = getUserManager().createUser(new DefaultUser("user"), Credential.encrypted("password-hash"));
54  
55                      userManager.alterPassword(user, "plaintext-password");
56                  }
57                  catch (EntityException e)
58                  {
59                      throw new RuntimeException(e);
60                  }
61              }
62          });
63          createAndAlterPassword.start();
64          createAndAlterPassword.join(1000);
65  
66          final DefaultUser retrievedUser = (DefaultUser) userManager.getUser("user");
67          assertNotNull(retrievedUser);
68          try
69          {
70              assertEquals(encryptor.encrypt("plaintext-password"), retrievedUser.getPassword());
71          }
72          finally
73          {
74              // roll back the database changes persisted by the other thread
75              userManager.removeUser(retrievedUser);
76              transactionManager.commit(transactionStatus);
77          }
78      }
79  
80  }