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