/* * RHQ Management Platform * Copyright (C) 2005-2008 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 2 of the License. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.rhq.enterprise.server.resource.metadata.test; import java.util.Set; import javax.transaction.Status; import org.testng.annotations.Test; import org.rhq.core.domain.resource.ResourceType; /** * Note, plugins are registered in new transactions. for tests, this means * you can't do everything in a trans and roll back at the end. You must clean up manually. */ public class UpdateResourceSubsystemTest extends UpdatePluginMetadataTestBase { private static final boolean ENABLED = true; @Override protected String getSubsystemDirectory() { return "resource"; } @Test(enabled = ENABLED) public void testSubcategoryAddFromEmpty() throws Exception { try { registerPlugin("no-subcat.xml", "0.0"); registerPlugin("nested-subcat-services-v1_0.xml"); getTransactionManager().begin(); ResourceType service1 = getResourceType("testService1"); service1 = em.find(ResourceType.class, service1.getId()); assert service1.getSubCategory().equals("services"); ResourceType service2 = getResourceType("testService2"); service2 = em.find(ResourceType.class, service2.getId()); assert service2.getSubCategory().equals("services"); ResourceType app1 = getResourceType("testApp1"); app1 = em.find(ResourceType.class, app1.getId()); assert app1.getSubCategory().equals("applications"); } finally { if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) { getTransactionManager().rollback(); } } } @Test(enabled = ENABLED) public void testNoSubcategory() throws Exception { try { registerPlugin("no-subcat.xml"); getTransactionManager().begin(); ResourceType server1 = getResourceType("testServer1"); server1 = em.find(ResourceType.class, server1.getId()); assert server1.getSubCategory() == null; } finally { if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) { getTransactionManager().rollback(); } } } @Test(enabled = ENABLED) public void testOldSubcategory() throws Exception { try { registerPlugin("old-subcat.xml"); getTransactionManager().begin(); ResourceType server1 = getResourceType("testServer1"); server1 = em.find(ResourceType.class, server1.getId()); assert server1.getSubCategory() == null; } finally { if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) { getTransactionManager().rollback(); } } } @SuppressWarnings("deprecation") @Test(enabled = true) public void testNestedSubcategories() throws Exception { try { registerPlugin("nested-subcat-services-v2_0.xml"); getTransactionManager().begin(); ResourceType server1 = getResourceType("testServer1"); server1 = em.find(ResourceType.class, server1.getId()); assert server1.getSubCategory() == null; //test to make sure old remantants like subcategories are not populated anymore assert server1.getChildSubCategories() == null; Set<ResourceType> children = server1.getChildResourceTypes(); assert children.size() == 2; ResourceType service = getResourceType("testService2"); assert service.getSubCategory().equals("application|applications2"); ResourceType app = getResourceType("testApp1"); assert app.getSubCategory().equals("application|applications2"); } finally { if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) { getTransactionManager().rollback(); } } } @Test(enabled = ENABLED) public void testSubcategoryUpdate() throws Exception { try { registerPlugin("nested-subcat-services-v1_0.xml", "1.0"); // pretend to be an updated plugin registerPlugin("nested-subcat-services-v2_0.xml", "2.0"); getTransactionManager().begin(); // now test how the subcategories got updated ResourceType server1 = getResourceType("testServer1"); server1 = em.find(ResourceType.class, server1.getId()); Set<ResourceType> children = server1.getChildResourceTypes(); assert children.size() == 2; ResourceType service = getResourceType("testService2"); assert service.getSubCategory().equals("application|applications2"); ResourceType app = getResourceType("testApp1"); assert app.getSubCategory().equals("application|applications2"); ResourceType server2 = getResourceType("testServer2"); server2 = em.find(ResourceType.class, server2.getId()); assert server2.getSubCategory() == null; assert server2.getChildResourceTypes().size() == 0; } finally { if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) { getTransactionManager().rollback(); } } } @Test(enabled = ENABLED) public void testSubcategoryUpdateMore() throws Exception { try { registerPlugin("nested-subcat-services-v1_0.xml", "1.0"); registerPlugin("nested-subcat-services-v2_0.xml", "2.0"); registerPlugin("nested-subcat-services-v3_0.xml", "3.0"); getTransactionManager().begin(); // now test how the subcategories got updated ResourceType server1 = getResourceType("testServer1"); server1 = em.find(ResourceType.class, server1.getId()); Set<ResourceType> children = server1.getChildResourceTypes(); assert children.size() == 4; ResourceType service1 = getResourceType("testService1"); assert service1.getSubCategory().equals("resources|services"); ResourceType service2 = getResourceType("testService2"); assert service2.getSubCategory().equals("resources|services"); ResourceType app1 = getResourceType("testApp1"); assert app1.getSubCategory().equals("resources|applications"); ResourceType app2 = getResourceType("testApp2"); assert app2.getSubCategory().equals("resources|applications"); ResourceType server2 = getResourceType("testServer2"); server2 = em.find(ResourceType.class, server2.getId()); assert server2.getSubCategory() == null; assert server2.getChildResourceTypes().size() == 1; ResourceType app3 = getResourceType("testApp3"); assert app3.getSubCategory().equals("resources|applications"); } finally { if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) { getTransactionManager().rollback(); } } } @Test(enabled = ENABLED) public void testReferenceToUndefinedChildSubCategory() throws Exception { System.out.println("= testReferenceToUndefinedChildSubCategory"); try { try { registerPlugin("undefined-child-subcat-1.xml"); } catch (Exception ignored) { fail("Exception was thrown."); } } finally { if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) { getTransactionManager().rollback(); } } } }