/** * 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.user.test; import com.redhat.rhn.common.ObjectCreateWrapperException; import com.redhat.rhn.common.db.datasource.DataResult; import com.redhat.rhn.common.hibernate.LookupException; import com.redhat.rhn.common.security.PermissionException; import com.redhat.rhn.common.security.user.StateChangeException; import com.redhat.rhn.domain.org.Org; import com.redhat.rhn.domain.rhnpackage.Package; import com.redhat.rhn.domain.rhnpackage.test.PackageTest; import com.redhat.rhn.domain.rhnset.RhnSet; import com.redhat.rhn.domain.rhnset.SetCleanup; import com.redhat.rhn.domain.role.Role; import com.redhat.rhn.domain.role.RoleFactory; import com.redhat.rhn.domain.server.Server; import com.redhat.rhn.domain.server.ServerConstants; import com.redhat.rhn.domain.server.test.ServerFactoryTest; import com.redhat.rhn.domain.user.RhnTimeZone; import com.redhat.rhn.domain.user.User; import com.redhat.rhn.domain.user.UserFactory; import com.redhat.rhn.domain.user.UserServerPreference; import com.redhat.rhn.domain.user.UserServerPreferenceId; import com.redhat.rhn.frontend.dto.SystemSearchResult; import com.redhat.rhn.frontend.dto.UserOverview; import com.redhat.rhn.frontend.listview.PageControl; import com.redhat.rhn.manager.rhnset.RhnSetManager; import com.redhat.rhn.manager.user.UserManager; import com.redhat.rhn.testing.RhnBaseTestCase; import com.redhat.rhn.testing.TestStatics; import com.redhat.rhn.testing.TestUtils; import com.redhat.rhn.testing.UserTestUtils; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; /** JUnit test case for the User * class. */ public class UserManagerTest extends RhnBaseTestCase { public void testListRolesAssignable() throws Exception { User user = UserTestUtils.findNewUser(); assertTrue(UserManager.listRolesAssignableBy(user).isEmpty()); user.addPermanentRole(RoleFactory.ORG_ADMIN); UserManager.storeUser(user); assertTrue(UserManager.listRolesAssignableBy(user). contains(RoleFactory.CONFIG_ADMIN)); assertFalse(UserManager.listRolesAssignableBy(user). contains(RoleFactory.SAT_ADMIN)); User sat = UserTestUtils.createSatAdminInOrgOne(); assertTrue(UserManager.listRolesAssignableBy(sat). contains(RoleFactory.SAT_ADMIN)); } public void testVerifyPackageAccess() throws Exception { User user = UserTestUtils.findNewUser("testuser", "testorg"); Package pkg = PackageTest.createTestPackage(user.getOrg()); assertTrue(UserManager.verifyPackageAccess(user.getOrg(), pkg.getId())); // Since we have only one org on a sat, all custom created packages will be // available to all users in that org. return; } public void testLookup() { User admin = UserTestUtils.findNewUser("testUser", "testOrg" + this.getClass().getSimpleName()); admin.addPermanentRole(RoleFactory.ORG_ADMIN); User regular = UserTestUtils.createUser("testUser2", admin.getOrg().getId()); regular.removePermanentRole(RoleFactory.ORG_ADMIN); assertTrue(admin.hasRole(RoleFactory.ORG_ADMIN)); assertFalse(regular.hasRole(RoleFactory.ORG_ADMIN)); // make sure admin can lookup regular by id and by login User test = UserManager.lookupUser(admin, regular.getId()); assertNotNull(test); assertEquals(regular.getLogin(), test.getLogin()); test = UserManager.lookupUser(admin, regular.getLogin()); assertNotNull(test); assertEquals(regular.getLogin(), test.getLogin()); // make sure regular user can't lookup users try { test = UserManager.lookupUser(regular, admin.getId()); fail(); } catch (PermissionException e) { //success } try { test = UserManager.lookupUser(regular, admin.getLogin()); fail(); } catch (PermissionException e) { //success } test = UserManager.lookupUser(regular, regular.getLogin()); assertNotNull(test); assertEquals(regular.getLogin(), test.getLogin()); test = UserManager.lookupUser(regular, regular.getId()); assertNotNull(test); assertEquals(regular.getLogin(), test.getLogin()); } public void testUserDisableEnable() { //Create test users User org1admin = UserTestUtils.createUser("orgAdmin1", UserTestUtils.createOrg("UMTOrg1")); org1admin.addPermanentRole(RoleFactory.ORG_ADMIN); UserManager.storeUser(org1admin); User org1admin2 = UserTestUtils.createUser("orgAdmin2", org1admin.getOrg().getId()); org1admin2.addPermanentRole(RoleFactory.ORG_ADMIN); UserManager.storeUser(org1admin2); User org1normal = UserTestUtils.createUser("normaluser1", org1admin.getOrg().getId()); User org1normal2 = UserTestUtils.createUser("normaluser2", org1admin.getOrg().getId()); User org2admin = UserTestUtils.createUser("orgAdmin2", UserTestUtils.createOrg("UMTOrg2")); org2admin.addPermanentRole(RoleFactory.ORG_ADMIN); UserManager.storeUser(org2admin); try { UserManager.disableUser(org1normal2, org1normal); fail("Normal user was allowed to disable an org admin"); } catch (StateChangeException e) { assertEquals("userdisable.error.otheruser", e.getMessage()); } //Can't disable other org admins try { UserManager.disableUser(org1admin2, org1admin); fail("Org admin was allowed to disable another org admin"); } catch (StateChangeException e) { assertEquals("userdisable.error.orgadmin", e.getMessage()); } //Make sure valid disables work //admin -> normal user UserManager.disableUser(org1admin, org1normal); assertTrue(org1normal.isDisabled()); //admin -> self UserManager.disableUser(org1admin, org1admin); //Normal users can only disable themselves //Normal users can only disable themselves assertTrue(org1admin.isDisabled()); //normal user -> self UserManager.disableUser(org1normal2, org1normal2); assertTrue(org1normal2.isDisabled()); //Try to disable a user who is already disabled. // changing test for changed requirement. Disabling a user // that was already disabled is a noop. Not an error condition. try { UserManager.disableUser(org1admin2, org1normal); assertTrue(true); } catch (StateChangeException e) { fail("Org Admin disallowed to disable an already disabled user"); } //Add a new user to org2 User org2normal = UserTestUtils.createUser("normaluser2", org2admin.getOrg().getId()); //Can't enable a user who isn't disabled try { UserManager.enableUser(org2admin, org2normal); } catch (StateChangeException e) { fail("Enabling an enabled user failed. Should've passed silently"); } //Enable org1normal2 for next test UserManager.enableUser(org1admin2, org1normal2); assertFalse(org1normal2.isDisabled()); //Normal users can't enable users try { UserManager.enableUser(org1normal2, org1normal); fail("Normal user was allowed to enable a user"); } catch (StateChangeException e) { assertEquals("userenable.error.orgadmin", e.getMessage()); } //Make sure valid enables work //admin -> normal user UserManager.enableUser(org1admin2, org1normal); assertFalse(org1normal.isDisabled()); } /** * Test to ensure functionality of translating * usergroup ids to Roles * @throws Exception */ public void aTestUpdateUserRolesFromRoleLabels() throws Exception { User usr = UserTestUtils.findNewUser("testUser", "testOrg" + this.getClass().getSimpleName()); ServerFactoryTest.createTestServer(usr); Org o1 = usr.getOrg(); Set<Role> oRoles = o1.getRoles(); List<String> roleLabels = new LinkedList<String>(); // We know that all newly created Orgs have the ORG_ADMIN // so if we add all the UserGroup IDs to the list then // the User should have the ORG_ADMIN assigned to it. for (Role role : oRoles) { roleLabels.add(role.getLabel()); } UserManager.addRemoveUserRoles(usr, roleLabels, new LinkedList<String>()); UserManager.storeUser(usr); UserTestUtils.assertOrgAdmin(usr); // Make sure we can take roles away from ourselves: int numRoles = usr.getRoles().size(); List<String> removeRoles = new LinkedList<String>(); removeRoles.add(RoleFactory.ORG_ADMIN.getLabel()); UserManager.addRemoveUserRoles(usr, new LinkedList<String>(), removeRoles); UserManager.storeUser(usr); assertEquals(numRoles - 1, usr.getRoles().size()); // Test that taking away org admin properly removes // permissions for the user (bz156752). Note that calling // UserManager.storeUser is absolutely vital for this to work UserTestUtils.assertNotOrgAdmin(usr); } public void testUsersInOrg() { int numTotal = 1; int numDisabled = 0; int numActive = 1; User user = UserTestUtils.findNewUser("testUser", "testOrg" + this.getClass().getSimpleName()); user.addPermanentRole(RoleFactory.ORG_ADMIN); PageControl pc = new PageControl(); pc.setStart(1); pc.setPageSize(5); numTotal = UserManager.usersInOrg(user, pc).getTotalSize(); numDisabled = UserManager.disabledInOrg(user, pc).getTotalSize(); numActive = UserManager.activeInOrg(user, pc).getTotalSize(); //make sure usersInOrg and usersInOrgAsMap return the same number int uio1 = UserManager.usersInOrg(user, pc).getTotalSize(); int uio2 = UserManager.usersInOrg(user, pc, Map.class).getTotalSize(); assertEquals(uio1, uio2); try { UserManager.usersInOrg(user, pc, Set.class); fail(); } catch (ObjectCreateWrapperException e) { //success } User peon = UserTestUtils.createUser("testBob", user.getOrg().getId()); DataResult users = UserManager.usersInOrg(user, pc); assertNotNull(users); assertEquals(numTotal + 1, users.getTotalSize()); users = UserManager.activeInOrg(user, pc); assertNotNull(users); assertEquals(numActive + 1, users.getTotalSize()); users = UserManager.disabledInOrg(user, pc); assertNotNull(users); assertEquals(numDisabled, users.getTotalSize()); UserFactory.getInstance().disable(peon, user); users = UserManager.usersInOrg(user, pc); assertNotNull(users); assertEquals(numTotal + 1, users.getTotalSize()); users = UserManager.activeInOrg(user, pc); assertNotNull(users); assertEquals(numActive, users.getTotalSize()); users = UserManager.disabledInOrg(user, pc); assertNotNull(users); assertEquals(numDisabled + 1, users.getTotalSize()); } public void testLookupUserOrgBoundaries() { User usr1 = UserTestUtils.findNewUser("testUser", "testOrg1", true); User usr2 = UserTestUtils.findNewUser("testUser", "testOrg2"); User usr3 = UserTestUtils.createUser("testUser123", usr1.getOrg().getId()); try { UserManager.lookupUser(usr1, usr2.getLogin()); String msg = "User1 of Org Id = %s should" + "not be able to access Usr2 of Org Id= %s"; fail(String.format(msg, usr1.getOrg().getId(), usr2.getOrg().getId())); } catch (LookupException e) { //Success } assertEquals(usr3, UserManager.lookupUser(usr1, usr3.getLogin())); } public void testStoreUser() { User usr = UserTestUtils.findNewUser("testUser", "testOrg" + this.getClass().getSimpleName()); Long id = usr.getId(); usr.setEmail("something@changed.redhat.com"); UserManager.storeUser(usr); User u2 = UserFactory.lookupById(id); assertEquals("something@changed.redhat.com", u2.getEmail()); } public void testGetSystemGroups() { User usr = UserTestUtils.findNewUser("testUser", "testOrg" + this.getClass().getSimpleName()); PageControl pc = new PageControl(); pc.setIndexData(false); pc.setFilterColumn("name"); pc.setStart(1); assertNotNull(UserManager.getSystemGroups(usr, pc)); } public void testGetTimeZoneId() { RhnTimeZone tz = UserManager.getTimeZone(UserManager .getTimeZone("Indian/Maldives").getTimeZoneId()); assertEquals(UserManager.getTimeZone("Indian/Maldives"), tz); assertEquals("Indian/Maldives", tz.getOlsonName()); RhnTimeZone tz2 = UserManager.getTimeZone(-23); assertNull(tz2); } public void testGetTimeZoneOlson() { RhnTimeZone tz = UserManager.getTimeZone("America/New_York"); assertNotNull(tz); assertEquals(tz.getOlsonName(), "America/New_York"); RhnTimeZone tz2 = UserManager.getTimeZone("foo"); assertNull(tz2); } public void testGetTimeZoneDefault() { RhnTimeZone tz = UserManager.getDefaultTimeZone(); assertNotNull(tz); assertEquals(tz.getTimeZone().getRawOffset(), UserFactory.getDefaultTimeZone() .getTimeZone().getRawOffset()); } public void testLookupTimeZoneAll() { List<RhnTimeZone> lst = UserManager.lookupAllTimeZones(); assertTrue(lst.size() > 30); assertTrue(lst.get(5) instanceof RhnTimeZone); assertTrue(lst.get(34) instanceof RhnTimeZone); assertEquals(UserManager.getTimeZone("GMT"), lst.get(0)); assertEquals("GMT", lst.get(0).getOlsonName()); assertEquals("Pacific/Auckland", lst.get(5).getOlsonName()); assertEquals(UserManager.getTimeZone("Pacific/Auckland"), lst.get(5)); } public void testUsersInSet() throws Exception { User user = UserTestUtils.findNewUser("testUser", "testOrg" + this.getClass().getSimpleName()); RhnSet set = RhnSetManager.createSet(user.getId(), "test_user_list", SetCleanup.NOOP); for (int i = 0; i < 5; i++) { User usr = UserTestUtils.createUser("testBob", user.getOrg().getId()); set.addElement(usr.getId()); } RhnSetManager.store(set); PageControl pc = new PageControl(); pc.setStart(1); pc.setPageSize(10); DataResult dr = UserManager.usersInSet(user, "test_user_list", pc); assertEquals(5, dr.size()); assertTrue(dr.iterator().hasNext()); assertTrue(dr.iterator().next() instanceof UserOverview); UserOverview m = (UserOverview)(dr.iterator().next()); assertNotNull(m.getUserLogin()); } public void testLookupServerPreferenceValue() throws Exception { User user = UserTestUtils.findNewUser(TestStatics.TESTUSER, TestStatics.TESTORG); Server s = ServerFactoryTest.createTestServer(user, true, ServerConstants.getServerGroupTypeEnterpriseEntitled()); assertTrue(UserManager.lookupUserServerPreferenceValue(user, s, UserServerPreferenceId .RECEIVE_NOTIFICATIONS)); UserServerPreferenceId id = new UserServerPreferenceId(user, s, UserServerPreferenceId .RECEIVE_NOTIFICATIONS); UserServerPreference usp = new UserServerPreference(); usp.setId(id); usp.setValue("0"); TestUtils.saveAndFlush(usp); assertFalse(UserManager.lookupUserServerPreferenceValue(user, s, UserServerPreferenceId .RECEIVE_NOTIFICATIONS)); } public void testVisibleSystemsAsDtoFromList() throws Exception { User user = UserTestUtils.findNewUser(TestStatics.TESTUSER, TestStatics.TESTORG); Server s = ServerFactoryTest.createTestServer(user, true, ServerConstants.getServerGroupTypeEnterpriseEntitled()); List<Long> ids = new ArrayList<Long>(); ids.add(s.getId()); List<SystemSearchResult> dr = UserManager.visibleSystemsAsDtoFromList(user, ids); assertTrue(dr.size() >= 1); } public void testSystemSearchResults() throws Exception { User user = UserTestUtils.findNewUser(TestStatics.TESTUSER, TestStatics.TESTORG); Server s = ServerFactoryTest.createTestServer(user, true, ServerConstants.getServerGroupTypeEnterpriseEntitled()); s.setDescription("Test Description Value"); List<Long> ids = new ArrayList<Long>(); ids.add(s.getId()); DataResult<SystemSearchResult> dr = UserManager.visibleSystemsAsDtoFromList(user, ids); assertTrue(dr.size() >= 1); dr.elaborate(Collections.EMPTY_MAP); SystemSearchResult sr = dr.get(0); System.err.println("sr.getDescription() = " + sr.getDescription()); System.err.println("sr.getHostname() = " + sr.getHostname()); assertNotNull(sr.getDescription()); //assertTrue(sr.getHostname() != null); } }