/** * 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.org.test; import com.redhat.rhn.common.hibernate.HibernateFactory; import com.redhat.rhn.common.security.PermissionException; import com.redhat.rhn.domain.config.ConfigChannel; import com.redhat.rhn.domain.org.Org; import com.redhat.rhn.domain.org.SystemMigration; import com.redhat.rhn.domain.org.SystemMigrationFactory; import com.redhat.rhn.domain.role.RoleFactory; import com.redhat.rhn.domain.server.ManagedServerGroup; import com.redhat.rhn.domain.server.Server; import com.redhat.rhn.domain.server.ServerFactory; import com.redhat.rhn.domain.server.ServerHistoryEvent; import com.redhat.rhn.domain.server.test.ServerFactoryTest; import com.redhat.rhn.domain.user.User; import com.redhat.rhn.domain.user.UserFactory; import com.redhat.rhn.manager.org.MigrationManager; import com.redhat.rhn.testing.ConfigTestUtils; import com.redhat.rhn.testing.RhnBaseTestCase; import com.redhat.rhn.testing.ServerTestUtils; import com.redhat.rhn.testing.UserTestUtils; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; /** * MigrationManagerTest * @version $Rev$ */ public class MigrationManagerTest extends RhnBaseTestCase { private Set<User> origOrgAdmins = new HashSet<User>(); private Set<User> destOrgAdmins = new HashSet<User>(); private Org origOrg; private Org destOrg; private Server server; // virt host w/guests private Server server2; // server w/provisioning ent public void setUp() throws Exception { super.setUp(); // Create 2 orgs, each with multiple org admins origOrgAdmins.add(UserTestUtils.findNewUser("origAdmin", "origOrg", true)); origOrg = origOrgAdmins.iterator().next().getOrg(); for (Integer i = 0; i < 2; i++) { User user = UserTestUtils.createUser("origAdmin", origOrg.getId()); user.addPermanentRole(RoleFactory.ORG_ADMIN); UserFactory.save(user); origOrgAdmins.add(user); } destOrgAdmins.add(UserTestUtils.findNewUser("destAdmin", "destOrg", true)); destOrg = destOrgAdmins.iterator().next().getOrg(); for (Integer i = 0; i < 2; i++) { User user = UserTestUtils.createUser("destAdmin", destOrg.getId()); user.addPermanentRole(RoleFactory.ORG_ADMIN); UserFactory.save(user); destOrgAdmins.add(user); } // Create a virtual host with guests and a server with provisioning entitlements // and associate the first org's admins with them both server = ServerTestUtils.createVirtHostWithGuests( origOrgAdmins.iterator().next(), 2); server2 = ServerFactoryTest.createTestServer(origOrgAdmins.iterator().next(), true); ServerFactory.save(server); ServerFactory.save(server2); HibernateFactory.getSession().flush(); } public void testMigrateSystemNotSatAdmin() throws Exception { User user = UserTestUtils.findNewUser("testUser", "testOrg" + this.getClass().getSimpleName()); try { MigrationManager.removeOrgRelationships(user, server); fail(); } catch (PermissionException e) { // expected } } public void testRemoveEntitlements() throws Exception { assertTrue(server.getEntitlements().size() > 0); MigrationManager.removeOrgRelationships(origOrgAdmins.iterator().next(), server); server = ServerFactory.lookupById(server.getId()); assertEquals(0, server.getEntitlements().size()); } public void testRemoveSystemGroups() throws Exception { assertTrue(server.getGuests().size() > 0); assertEquals(1, server.getManagedGroups().size()); ManagedServerGroup serverGroup1 = server.getManagedGroups().get(0); MigrationManager.removeOrgRelationships(origOrgAdmins.iterator().next(), server); server = ServerFactory.lookupById(server.getId()); //serverGroup1 = (ManagedServerGroup) reload(serverGroup1); assertEquals(0, serverGroup1.getCurrentMembers().intValue()); assertEquals(0, server.getManagedGroups().size()); } public void testRemoveChannels() throws Exception { // verify that server was initially created w/channels assertTrue(server.getChannels().size() > 0); MigrationManager.removeOrgRelationships(origOrgAdmins.iterator().next(), server); assertEquals(0, server.getChannels().size()); } public void testRemoveConfigChannels() throws Exception { ConfigChannel configChannel = ConfigTestUtils.createConfigChannel(origOrg); ConfigChannel configChannel2 = ConfigTestUtils.createConfigChannel(origOrg); server2.getConfigChannels().add(configChannel); server2.getConfigChannels().add(configChannel2); assertEquals(2, server2.getConfigChannelCount()); MigrationManager.removeOrgRelationships(origOrgAdmins.iterator().next(), server2); assertEquals(0, server2.getConfigChannelCount()); } public void testUpdateAdminRelationships() throws Exception { for (User origOrgAdmin : origOrgAdmins) { assertTrue(origOrgAdmin.getServers().contains(server)); } for (User destOrgAdmin : destOrgAdmins) { assertFalse(destOrgAdmin.getServers().contains(server)); } MigrationManager.updateAdminRelationships(origOrg, destOrg, server); for (User origOrgAdmin : origOrgAdmins) { assertFalse(origOrgAdmin.getServers().contains(server)); } for (User destOrgAdmin : destOrgAdmins) { assertTrue(destOrgAdmin.getServers().contains(server)); } } public void testMigrateServers() throws Exception { assertEquals(server.getOrg(), origOrg); assertEquals(server2.getOrg(), origOrg); List<Server> servers = new ArrayList<Server>(); servers.add(server); servers.add(server2); User origOrgAdmin = origOrgAdmins.iterator().next(); MigrationManager.migrateServers(origOrgAdmin, destOrg, servers); assertEquals(server.getOrg(), destOrg); assertEquals(server2.getOrg(), destOrg); assertNotNull(server.getHistory()); assertTrue(server.getHistory().size() > 0); boolean migrationRecorded = false; for (ServerHistoryEvent event : server.getHistory()) { if (event.getSummary().equals("System migration") && event.getDetails().contains("From organization: " + origOrg.getName()) && event.getDetails().contains("To organization: " + destOrg.getName()) && (event.getCreated() != null)) { migrationRecorded = true; } } assertTrue(migrationRecorded); List<SystemMigration> s1Migrations = SystemMigrationFactory.lookupByServer(server); List<SystemMigration> s2Migrations = SystemMigrationFactory.lookupByServer( server2); assertNotNull(s1Migrations); assertNotNull(s2Migrations); assertEquals(1, s1Migrations.size()); assertEquals(1, s2Migrations.size()); } }