/** * Abiquo community edition * cloud management application for hybrid clouds * Copyright (C) 2008-2010 - Abiquo Holdings S.L. * * This application is free software; you can redistribute it and/or * modify it under the terms of the GNU LESSER GENERAL PUBLIC * LICENSE as published by the Free Software Foundation under * version 3 of the License * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * LESSER GENERAL PUBLIC LICENSE v.3 for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ package com.abiquo.api.services.enterprise; import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.persistence.EntityManager; import org.springframework.security.context.SecurityContextHolder; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import com.abiquo.api.common.AbstractUnitTest; import com.abiquo.api.common.Assert; import com.abiquo.api.common.SysadminAuthentication; import com.abiquo.api.common.UriTestResolver; import com.abiquo.api.exceptions.APIException; import com.abiquo.api.exceptions.BadRequestException; import com.abiquo.api.services.UserService; import com.abiquo.model.enumerator.Privileges; import com.abiquo.model.rest.RESTLink; import com.abiquo.server.core.enterprise.Enterprise; import com.abiquo.server.core.enterprise.Privilege; import com.abiquo.server.core.enterprise.Role; import com.abiquo.server.core.enterprise.User; import com.abiquo.server.core.enterprise.User.AuthType; import com.abiquo.server.core.enterprise.UserDto; public class UserServiceTest extends AbstractUnitTest { private Enterprise e; private Role r; private User u; @BeforeMethod public void setupSysadmin() { e = enterpriseGenerator.createUniqueInstance(); Privilege p1 = new Privilege(Privileges.USERS_MANAGE_OTHER_ENTERPRISES); Privilege p2 = new Privilege(Privileges.USERS_MANAGE_USERS); r = roleGenerator.createInstance(p1, p2); u = userGenerator.createInstance(e, r, "sysadmin", "sysadmin"); setup(e, p1, p2, r, u); SecurityContextHolder.getContext().setAuthentication(new SysadminAuthentication()); } @Test public void findUsersWithEnterpriseWildcard() { Enterprise e1 = enterpriseGenerator.createUniqueInstance(); Enterprise e2 = enterpriseGenerator.createUniqueInstance(); User u1 = userGenerator.createInstance(e1); User u2 = userGenerator.createInstance(e2); List<Object> entitiesToPersist = new ArrayList<Object>(); entitiesToPersist.add(e1); entitiesToPersist.add(e2); for (Privilege p : u1.getRole().getPrivileges()) { entitiesToPersist.add(p); } for (Privilege p : u2.getRole().getPrivileges()) { entitiesToPersist.add(p); } entitiesToPersist.add(u1.getRole()); entitiesToPersist.add(u2.getRole()); entitiesToPersist.add(u1); entitiesToPersist.add(u2); setup(entitiesToPersist.toArray()); UserService service = new UserService(getEntityManagerWithAnActiveTransaction()); Collection<User> users = service.getUsersByEnterprise("_", null, null, false); Assert.assertSize(users, 3); } @Test public void findUsersFiltered() { Enterprise e1 = enterpriseGenerator.createUniqueInstance(); Enterprise e2 = enterpriseGenerator.createUniqueInstance(); Role r = roleGenerator.createUniqueInstance(); User u1 = userGenerator.createInstance(e1, r, "p1", "u1", "s1", "e1", "n1"); User u2 = userGenerator.createInstance(e2, r, "p2", "u2", "s2", "e2", "n2"); List<Object> entitiesToPersist = new ArrayList<Object>(); entitiesToPersist.add(e1); entitiesToPersist.add(e2); for (Privilege p : r.getPrivileges()) { entitiesToPersist.add(p); } entitiesToPersist.add(r); entitiesToPersist.add(u1); entitiesToPersist.add(u2); setup(entitiesToPersist.toArray()); UserService service = new UserService(getEntityManagerWithAnActiveTransaction()); Collection<User> users = service.getUsersByEnterprise("_", u1.getName(), null, false); Assert.assertSize(users, 1); users = service.getUsersByEnterprise("_", u1.getSurname(), null, false); Assert.assertSize(users, 1); users = service.getUsersByEnterprise("_", u1.getEmail(), null, false); Assert.assertSize(users, 1); users = service.getUsersByEnterprise("_", u1.getNick(), null, false); Assert.assertSize(users, 1); } @Test public void findUsersOrdered() { Enterprise e1 = enterpriseGenerator.createUniqueInstance(); Enterprise e2 = enterpriseGenerator.createUniqueInstance(); Role r = roleGenerator.createUniqueInstance(); User u1 = userGenerator.createInstance(e1, r, "p1", "u1", "s1", "e1", "nick"); User u2 = userGenerator.createInstance(e2, r, "p2", "u2", "s2", "e2", "nack"); List<Object> entitiesToPersist = new ArrayList<Object>(); entitiesToPersist.add(e1); entitiesToPersist.add(e2); for (Privilege p : r.getPrivileges()) { entitiesToPersist.add(p); } entitiesToPersist.add(r); entitiesToPersist.add(u1); entitiesToPersist.add(u2); setup(entitiesToPersist.toArray()); UserService service = new UserService(getEntityManagerWithAnActiveTransaction()); Collection<User> users = service.getUsersByEnterprise("_", null, "nick", false); User u = users.iterator().next(); org.testng.Assert.assertEquals(u.getNick(), "nack"); users = service.getUsersByEnterprise("_", null, "nick", true); u = users.iterator().next(); org.testng.Assert.assertEquals(u.getNick(), "sysadmin"); } @Test public void addUserWithDuplicatedNick() { EntityManager em = getEntityManagerWithAnActiveTransaction(); UserService service = new UserService(em); UserDto dto = new UserDto("foo", "foo", "foo@foo.com", u.getNick(), "foo", "ES", "", AuthType.ABIQUO.name()); try { service.addUser(dto, e.getId(), r); org.testng.Assert.fail(""); } catch (APIException e) { Assert.assertSize(e.getErrors(), 1); } finally { rollbackActiveTransaction(em); } } @Test public void updateUserWithDuplicatedNick() { User u2 = userGenerator.createInstance(e, r, "p2", "u2", "s2", "e2", "nack"); setup(u2); EntityManager em = getEntityManagerWithAnActiveTransaction(); UserService service = new UserService(em); UserDto dto = new UserDto("foo", "foo", "foo@foo.com", u.getNick(), "foo", "ES", "", AuthType.ABIQUO.name()); String roleURI = UriTestResolver.resolveRoleURI(r.getId()); dto.addLink(new RESTLink("role", roleURI)); dto.setId(u2.getId()); try { service.modifyUser(u2.getId(), dto); org.testng.Assert.fail(""); } catch (APIException e) { Assert.assertSize(e.getErrors(), 1); } finally { rollbackActiveTransaction(em); } } @Test(expectedExceptions = {BadRequestException.class}) public void addUserWithOutNick() { EntityManager em = getEntityManagerWithAnActiveTransaction(); UserService service = new UserService(em); UserDto dto = new UserDto("foo", "foo", "foo@foo.com", null, "foo", "ES", "", User.AuthType.ABIQUO .name()); service.addUser(dto, e.getId(), r); } @Test(expectedExceptions = {BadRequestException.class}) public void addUserWithEmptyName() { EntityManager em = getEntityManagerWithAnActiveTransaction(); UserService service = new UserService(em); UserDto dto = new UserDto("", "foo", "foo@foo.com", "newuser", "foo", "ES", "", User.AuthType.ABIQUO .name()); service.addUser(dto, e.getId(), r); } @Test(expectedExceptions = {BadRequestException.class}) public void addUserWithEmptyNick() { EntityManager em = getEntityManagerWithAnActiveTransaction(); UserService service = new UserService(em); UserDto dto = new UserDto("foo", "foo", "foo@foo.com", "", "foo", "ES", "", User.AuthType.ABIQUO .name()); service.addUser(dto, e.getId(), r); } }