content: package alien4cloud.security;
  
  import java.util.List;
  
  import javax.annotation.Resource;
  import javax.naming.NamingException;
  
  import alien4cloud.security.model.User;
  import alien4cloud.security.users.IAlienUserDao;
  import org.junit.FixMethodOrder;
  import org.junit.Test;
  import org.junit.runner.RunWith;
  import org.junit.runners.MethodSorters;
  import org.mockito.Mockito;
  import org.springframework.ldap.core.ContextSource;
  import org.springframework.ldap.core.LdapTemplate;
  import org.springframework.security.authentication.BadCredentialsException;
  import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
  import org.springframework.test.context.ContextConfiguration;
  import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  
  import alien4cloud.security.spring.ldap.LdapAuthenticationProvider;
  
  @RunWith(SpringJUnit4ClassRunner.class)
  @ContextConfiguration("classpath:ldap-authentication-provider-security-test.xml")
  @FixMethodOrder(MethodSorters.NAME_ASCENDING)
  public class LdapAuthenticationProviderTest extends AbstractLdapTest {
      @Resource
      private IAlienUserDao alienUserDao;
      @Resource
      private LdapTemplate ldapTemplate;
      @Resource
      private LdapAuthenticationProvider ldapAuthenticationProvider;
  
      @Test
      public void testLdapUserImport() throws NamingException {
          Mockito.when(ldapTemplate.getContextSource()).thenReturn(Mockito.mock(ContextSource.class));
          int userCount = 10;
          List<User> users = prepareGetAllUserMock(userCount);
  
          // for each user we should check if it exists in the user repository and only if not then we add it.
          for (int i = 0; i < users.size(); i++) {
              User user = users.get(i);
              if (i % 2 == 0) {
                  user.setLastName("test");
                  Mockito.when(alienUserDao.find(user.getUsername())).thenReturn(user);
              } else {
                  Mockito.when(alienUserDao.find(user.getUsername())).thenReturn(user);
              }
          }
  
          ldapAuthenticationProvider.importLdapUsers();
  
          Mockito.verify(alienUserDao, Mockito.times(users.size())).save(Mockito.any(User.class));
      }
  
      @Test
      public void testAuthenticate() {
          String userName = "admin";
          String password = "admin";
  
          Mockito.when(ldapTemplate.authenticate("", getUserIdKey() + "=" + userName, password)).thenReturn(true);
          ldapAuthenticationProvider.authenticate(new UsernamePasswordAuthenticationToken(userName, password));
      }
  
      @Test(expected = BadCredentialsException.class)
      public void testAuthenticateShouldFailIfWrontPassword() {
          String userName = "admin";
          String password = "admin";
  
          Mockito.when(ldapTemplate.authenticate("", getUserIdKey() + "=" + userName, password)).thenReturn(false);
          ldapAuthenticationProvider.authenticate(new UsernamePasswordAuthenticationToken(userName, password));
      }
  }
  