/** * Copyright (c) 2009--2014 Red Hat, Inc. * * This software is licensed to you under the GNU General Public License, * version 2 (GPLv2). There is NO WARRANTY for this software, express or * implied, including the implied warranties of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 * along with this software; if not, see * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. * * Red Hat trademarks are not licensed under GPLv2. No permission is * granted to use or replicate Red Hat trademarks that are incorporated * in this software or its documentation. */ package com.redhat.rhn.manager.system.test; import com.redhat.rhn.domain.role.RoleFactory; import com.redhat.rhn.domain.server.ManagedServerGroup; import com.redhat.rhn.domain.server.ServerGroup; import com.redhat.rhn.domain.server.ServerGroupFactory; import com.redhat.rhn.domain.user.User; import com.redhat.rhn.manager.system.ServerGroupManager; import com.redhat.rhn.testing.BaseTestCaseWithUser; import com.redhat.rhn.testing.TestUtils; import com.redhat.rhn.testing.UserTestUtils; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; /** * ServerGroupManagerTest * @version $Rev$ */ public class ServerGroupManagerTest extends BaseTestCaseWithUser { private static final String NAME = "Foo1"; private static final String DESCRIPTION = "Test Foo1"; private ServerGroupManager manager; public void setUp() throws Exception { super.setUp(); manager = ServerGroupManager.getInstance(); } public void testCreate() { try { manager.create(user, NAME, DESCRIPTION); String msg = "Unprivileged user creates a servergroup." + "Only a user with Sys Group Admin privilege " + " should be able to create/remove a system group."; fail(msg); } catch (Exception e) { //Great... No privilege won't let you create a server group. } user.addPermanentRole(RoleFactory.SYSTEM_GROUP_ADMIN); ServerGroup sg = manager.create(user, NAME, DESCRIPTION); assertNotNull(sg); assertEquals(NAME, sg.getName()); assertEquals(DESCRIPTION, sg.getDescription()); } public void testAccess() throws Exception { user.addPermanentRole(RoleFactory.SYSTEM_GROUP_ADMIN); ManagedServerGroup sg = manager.create(user, NAME, DESCRIPTION); assertTrue(manager.canAccess(user, sg)); User newUser = UserTestUtils.createUser("testDiffUser", user.getOrg().getId()); assertFalse(manager.canAccess(newUser, sg)); List admins = new ArrayList(); admins.add(newUser); manager.associateAdmins(sg, admins, user); assertTrue(manager.canAccess(newUser, sg)); manager.dissociateAdmins(sg, admins, user); assertFalse(manager.canAccess(newUser, sg)); User orgAdmin = UserTestUtils.createUser("testDiffUser", user.getOrg().getId()); orgAdmin.addPermanentRole(RoleFactory.ORG_ADMIN); assertTrue(manager.canAccess(orgAdmin, sg)); } public void testRemove() throws Exception { user.addPermanentRole(RoleFactory.SYSTEM_GROUP_ADMIN); ManagedServerGroup sg = manager.create(user, NAME, DESCRIPTION); sg = (ManagedServerGroup) reload(sg); User newUser = UserTestUtils.createUser("testDiffUser", user.getOrg().getId()); try { manager.remove(newUser, sg); fail("Permission error. Can't remove if you don't have access"); } catch (Exception e) { //passed } List admins = new ArrayList(); admins.add(newUser); manager.associateAdmins(sg, admins, user); try { manager.remove(newUser, sg); fail("Permission error. Can't remove if you are not Sys Group Admin"); } catch (Exception e) { //passed } manager.dissociateAdmins(sg, admins, user); user.addPermanentRole(RoleFactory.SYSTEM_GROUP_ADMIN); try { manager.remove(newUser, sg); fail("Permission error. Can't remove if you don't have access"); } catch (Exception e) { //passed } manager.remove(user, sg); try { manager.lookup(sg.getId(), user); fail("Group Not Found Exception not thrown"); } catch (Exception e) { //Group Not FOund exception thrown } } public void testListNoAssociatedAdmins() throws Exception { user.addPermanentRole(RoleFactory.SYSTEM_GROUP_ADMIN); ServerGroup sg = manager.create(user, NAME, DESCRIPTION); TestUtils.flushAndEvict(sg); try { manager.listNoAdminGroups(user); fail("ORG ADmin permission needed for this!"); } catch (Exception e) { //passed } user.addPermanentRole(RoleFactory.ORG_ADMIN); Collection groups = manager.listNoAdminGroups(user); int initSize = groups.size(); ServerGroup sg1 = ServerGroupFactory.create(NAME + "ALPHA", DESCRIPTION, user.getOrg()); TestUtils.flushAndEvict(sg1); Collection groups1 = manager.listNoAdminGroups(user); assertEquals(initSize + 1, groups1.size()); groups.add(sg1); assertEquals(new HashSet(groups), new HashSet(groups1)); } public void testAddRemoveAdmins() { user.addPermanentRole(RoleFactory.SYSTEM_GROUP_ADMIN); ManagedServerGroup sg = manager.create(user, NAME, DESCRIPTION); User newUser = UserTestUtils. createUser("testDiffUser", user.getOrg().getId()); List admins = new ArrayList(); admins.add(newUser); manager.associateAdmins(sg, admins, user); Set expected = new HashSet(admins); expected.add(user); assertEquals(expected, sg.getAssociatedAdminsFor(user)); User orgAdmin = UserTestUtils.createUser("testDiffUser", user.getOrg().getId()); orgAdmin.addPermanentRole(RoleFactory.ORG_ADMIN); List admins1 = new ArrayList(); admins1.add(orgAdmin); manager.associateAdmins(sg, admins1, user); //even though we asked the //Manager to associate an org admin // we expect that sg.getAssociatedAdminsFor(user) // to give us only the associated admins (No orgAdmin admins). assertEquals(expected, sg.getAssociatedAdminsFor(user)); manager.dissociateAdmins(sg, admins, user); expected.removeAll(admins); assertEquals(expected, sg.getAssociatedAdminsFor(user)); manager.dissociateAdmins(sg, admins1, user); assertEquals(expected, sg.getAssociatedAdminsFor(user)); } }