/* * RHQ Management Platform * Copyright (C) 2005-2011 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.core.pc.upgrade; import static org.testng.Assert.assertEquals; import org.jmock.Expectations; import org.testng.Assert; import org.testng.annotations.Test; import org.rhq.core.domain.resource.Resource; import org.rhq.test.pc.PluginContainerSetup; /** * * * @author Lukas Krejci */ @Test public class ResourceUpgradeProgressHandlingTest extends AbstractResourceUpgradeHandlingTest { //test names private static final String DUPLICATE_RESOURCE_KEYS_HANDLED_CORRECTLY_TEST = "DuplicateResourceKeysHandledCorrectly"; private static final String PARENT_RESOURCE_STARTED_UPGRADED_WHEN_CHILD_RESOURCE_BEING_UPGRADED_TEST = "ParentResourceStartedUpgradedWhenChildResourceBeingUpgraded"; //plugin names private static final String BASE_PLUGIN_NAME = "classpath:///resource-upgrade-test-plugin-multi-base-1.0.0.jar"; private static final String PARENT_DEP_V1_PLUGIN_NAME = "classpath:///resource-upgrade-test-plugin-multi-parentdep-1.0.0.jar"; private static final String PARENT_DEP_V2_PLUGIN_NAME = "classpath:///resource-upgrade-test-plugin-multi-parentdep-2.0.0.jar"; private static final String ROOT_PLUGIN_NAME = "classpath:///resource-upgrade-test-plugin-multi-root-1.0.0.jar"; private static final String UPGRADE_PROGRESS_PLUGIN_V1_FILENAME = "classpath:///resource-upgrade-test-plugin-progress-test-1.0.0.jar"; private static final String UPGRADE_PROGRESS_PLUGIN_V2_FILENAME = "classpath:///resource-upgrade-test-plugin-progress-test-2.0.0.jar"; private static final String UPGRADE_DUPLICATE_PLUGIN_V1_FILENAME = "classpath:///resource-upgrade-test-plugin-duplicate-test-1.0.0.jar"; private static final String UPGRADE_DUPLICATE_PLUGIN_V2_FILENAME = "classpath:///resource-upgrade-test-plugin-duplicate-test-2.0.0.jar"; private static final ResType TEST_TYPE = new ResType("TestResource", "test"); private static final ResType PARENT_DEP_TYPE = new ResType("ParentDependency", "parentdep"); @Test(dependsOnMethods = "testDuplicateResourceKeysHandledCorrectly_V2") @PluginContainerSetup( // plugins = { UPGRADE_PROGRESS_PLUGIN_V1_FILENAME, BASE_PLUGIN_NAME, ROOT_PLUGIN_NAME, PARENT_DEP_V1_PLUGIN_NAME }, // sharedGroup = PARENT_RESOURCE_STARTED_UPGRADED_WHEN_CHILD_RESOURCE_BEING_UPGRADED_TEST, clearDataDir = true) public void testParentResourceStartedUpgradedWhenChildResourceBeingUpgraded_V1() throws Exception { final FakeServerInventory inventory = new FakeServerInventory(); setServerSideFake(PARENT_RESOURCE_STARTED_UPGRADED_WHEN_CHILD_RESOURCE_BEING_UPGRADED_TEST, inventory); context.checking(new Expectations() { { defineDefaultExpectations(inventory, this); } }); startConfiguredPluginContainer(); //in here we set up the failures that are going to happen when //the v2 plugins are run Resource parent = findResourceWithOrdinal(PARENT_DEP_TYPE, 0); Assert.assertNotNull(parent, "Failed to find the parent."); } @Test(dependsOnMethods = "testParentResourceStartedUpgradedWhenChildResourceBeingUpgraded_V1") @PluginContainerSetup( // plugins = { UPGRADE_PROGRESS_PLUGIN_V2_FILENAME, BASE_PLUGIN_NAME, ROOT_PLUGIN_NAME, PARENT_DEP_V2_PLUGIN_NAME }, // sharedGroup = PARENT_RESOURCE_STARTED_UPGRADED_WHEN_CHILD_RESOURCE_BEING_UPGRADED_TEST, clearInventoryDat = false) public void testParentResourceStartedUpgradedWhenChildResourceBeingUpgraded_V2() throws Exception { final FakeServerInventory inventory = (FakeServerInventory) getServerSideFake(PARENT_RESOURCE_STARTED_UPGRADED_WHEN_CHILD_RESOURCE_BEING_UPGRADED_TEST); context.checking(new Expectations() { { defineDefaultExpectations(inventory, this); } }); startConfiguredPluginContainer(); //the upgrade progress plugin is set to check that the parent resource key //has been upgraded during its upgrade method, so we just need to check here //that everything got upgraded. If it was not, it'd mean that the the progress //plugin failed the upgrade because it didn't see its parent upgraded. checkResourcesUpgraded(getTestingResources(inventory, PARENT_DEP_TYPE), 1); checkResourcesUpgraded(getTestingResources(inventory, TEST_TYPE), 2); } @Test @PluginContainerSetup( // plugins = { UPGRADE_DUPLICATE_PLUGIN_V1_FILENAME, BASE_PLUGIN_NAME, ROOT_PLUGIN_NAME, PARENT_DEP_V1_PLUGIN_NAME }, // sharedGroup = DUPLICATE_RESOURCE_KEYS_HANDLED_CORRECTLY_TEST, clearDataDir = true, numberOfInitialDiscoveries = 2) public void testDuplicateResourceKeysHandledCorrectly_V1() throws Exception { final FakeServerInventory inventory = new FakeServerInventory(); setServerSideFake(DUPLICATE_RESOURCE_KEYS_HANDLED_CORRECTLY_TEST, inventory); context.checking(new Expectations() { { defineDefaultExpectations(inventory, this); } }); startConfiguredPluginContainer(); //there's not much to check with the v1 plugins. let's just check all the //resources have been discovered assertEquals(getTestingResources(inventory, PARENT_DEP_TYPE).size(), 1, "The V1 inventory should have 1 parent."); assertEquals(getTestingResources(inventory, TEST_TYPE).size(), 2, "The V1 inventory should have 2 test resources."); int foo = 0; } @Test(dependsOnMethods = "testDuplicateResourceKeysHandledCorrectly_V1") @PluginContainerSetup( // plugins = { UPGRADE_DUPLICATE_PLUGIN_V2_FILENAME, BASE_PLUGIN_NAME, ROOT_PLUGIN_NAME, PARENT_DEP_V2_PLUGIN_NAME }, // sharedGroup = DUPLICATE_RESOURCE_KEYS_HANDLED_CORRECTLY_TEST, clearInventoryDat = false, numberOfInitialDiscoveries = 2) public void testDuplicateResourceKeysHandledCorrectly_V2() throws Exception { final FakeServerInventory inventory = (FakeServerInventory) getServerSideFake(DUPLICATE_RESOURCE_KEYS_HANDLED_CORRECTLY_TEST); context.checking(new Expectations() { { defineDefaultExpectations(inventory, this); } }); startConfiguredPluginContainer(); //now the V2 test resource is set to create 2 resources with the same resource keys. //the upgrade should therefore fail. checkResourcesUpgraded(getTestingResources(inventory, PARENT_DEP_TYPE), 1); checkResourcesNotUpgraded(getTestingResources(inventory, TEST_TYPE), 2); for (Resource r : getTestingResources(inventory, TEST_TYPE)) { checkResourceFailedUpgrade(r); } } }