modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ContentMetadataManagerBean.java | 12 + modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest.java | 61 ++++++++++ modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest/remove_bundle_drift_config_v1.xml | 20 +++ modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest/remove_bundle_drift_config_v2.xml | 7 + 4 files changed, 95 insertions(+), 5 deletions(-)
New commits: commit 184ac150b3357c133783e09204fdcfcc72cb591e Author: John Mazzitelli mazz@redhat.com Date: Wed Jul 6 15:35:15 2011 -0400
more unit tests to confirm when a type is removed or cleaned that both bundle and drift configs are removed this fixes a bug the tests found with bundle config removal
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ContentMetadataManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ContentMetadataManagerBean.java index 1831a3e..6fc58d6 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ContentMetadataManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ContentMetadataManagerBean.java @@ -75,9 +75,8 @@ public class ContentMetadataManagerBean implements ContentMetadataManagerLocal {
// set the bundle configuration if the new type is a potential bundle deployment target ResourceTypeBundleConfiguration newBundleConfiguration = newType.getResourceTypeBundleConfiguration(); + ResourceTypeBundleConfiguration existingBundleConfiguration = existingType.getResourceTypeBundleConfiguration(); if (newBundleConfiguration != null) { - ResourceTypeBundleConfiguration existingBundleConfiguration = existingType - .getResourceTypeBundleConfiguration(); if (existingBundleConfiguration == null) { // the new type has now become a bundle target where the old type was not existingType.setResourceTypeBundleConfiguration(newBundleConfiguration); @@ -90,10 +89,13 @@ public class ContentMetadataManagerBean implements ContentMetadataManagerLocal { } } } else { - if (log.isDebugEnabled()) { - log.debug("Removing bundle configuration"); + if (existingBundleConfiguration != null) { + if (log.isDebugEnabled()) { + log.debug("Removing bundle configuration"); + } + entityMgr.remove(existingBundleConfiguration.getBundleConfiguration()); + existingType.setResourceTypeBundleConfiguration(null); } - existingType.setResourceTypeBundleConfiguration(null); }
// Easy case: If there are no package definitions in the new type, null out any in the existing and return diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest.java index e2fdd96..c4268df 100644 --- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest.java +++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest.java @@ -5,6 +5,8 @@ import java.util.Collection; import java.util.List; import java.util.Set;
+import javax.persistence.Query; + import org.apache.commons.beanutils.MethodUtils; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.lang.WordUtils; @@ -19,6 +21,7 @@ import org.rhq.core.domain.bundle.BundleType; import org.rhq.core.domain.bundle.ResourceTypeBundleConfiguration; import org.rhq.core.domain.bundle.ResourceTypeBundleConfiguration.BundleDestinationBaseDirectory; import org.rhq.core.domain.bundle.ResourceTypeBundleConfiguration.BundleDestinationBaseDirectory.Context; +import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.configuration.definition.ConfigurationTemplate; import org.rhq.core.domain.content.PackageType; import org.rhq.core.domain.content.Package; @@ -38,6 +41,7 @@ import org.rhq.core.domain.shared.ResourceBuilder; import org.rhq.enterprise.server.alert.AlertTemplateManagerLocal; import org.rhq.enterprise.server.auth.SubjectManagerLocal; import org.rhq.enterprise.server.bundle.BundleManagerLocal; +import org.rhq.enterprise.server.configuration.ConfigurationManagerLocal; import org.rhq.enterprise.server.content.ContentManagerLocal; import org.rhq.enterprise.server.operation.OperationManagerLocal; import org.rhq.enterprise.server.resource.ResourceManagerLocal; @@ -49,6 +53,63 @@ import static java.util.Arrays.asList;
public class ResourceMetadataManagerBeanTest extends MetadataBeanTest {
+ @Test(groups = { "plugin.metadata", "NewPlugin" }) + public void testRemovalOfObsoleteBundleAndDriftConfig() throws Exception { + // create the initial type that has bundle and drift configs + createPlugin("test-plugin.jar", "1.0", "remove_bundle_drift_config_v1.xml"); + + // make sure the drift config was persisted, and remember the type + ResourceType type1 = assertResourceTypeAssociationEquals( + "ServerWithBundleAndDriftConfig", + "TestPlugin", + "driftConfigurationTemplates", + asList("drift1")); + + // sanity check, make sure our queries work and that we did persist these things + Query qTemplate; + Query qConfig; + String qTemplateString = "select ct from ConfigurationTemplate ct where ct.id = :id"; + String qConfigString = "select c from Configuration c where c.id = :id"; + ConfigurationTemplate driftTemplate = type1.getDriftConfigurationTemplates().iterator().next(); + Configuration bundleConfig = type1.getResourceTypeBundleConfiguration().getBundleConfiguration(); + Configuration driftConfig = driftTemplate.getConfiguration(); + + getTransactionManager().begin(); + try { + qTemplate = getEntityManager().createQuery(qTemplateString).setParameter("id", driftTemplate.getId()); + qConfig = getEntityManager().createQuery(qConfigString).setParameter("id", driftConfig.getId()); + assertEquals("drift template didn't get persisted", 1, qTemplate.getResultList().size()); + assertEquals("drift template config didn't get persisted", 1, qConfig.getResultList().size()); + + qConfig.setParameter("id", bundleConfig.getId()); + assertEquals("bundle config didn't get persisted", 1, qConfig.getResultList().size()); + } finally { + getTransactionManager().commit(); + } + + // make sure the bundle config was also persisted + // NOTE: WHY DOES THIS WORK? I DIDN'T ASK TO FETCH IT AND IT IS MARKED AS LAZY LOAD + assertNotNull(type1.getResourceTypeBundleConfiguration()); + assertEquals("destdir1", + type1.getResourceTypeBundleConfiguration().getBundleDestinationBaseDirectories().iterator().next().getName()); + + // upgrade the type which removes the bundle config and drift config + createPlugin("test-plugin.jar", "2.0", "remove_bundle_drift_config_v2.xml"); + + getTransactionManager().begin(); + try { + qTemplate = getEntityManager().createQuery(qTemplateString).setParameter("id", driftTemplate.getId()); + qConfig = getEntityManager().createQuery(qConfigString).setParameter("id", driftConfig.getId()); + assertEquals("drift template didn't get purged", 0, qTemplate.getResultList().size()); + assertEquals("drift template config didn't get purged", 0, qConfig.getResultList().size()); + + qConfig.setParameter("id", bundleConfig.getId()); + assertEquals("bundle config didn't get purged", 0, qConfig.getResultList().size()); + } finally { + getTransactionManager().commit(); + } + } + @Test(groups = {"plugin.metadata", "NewPlugin"}) public void registerPluginWithDuplicateDriftConfigurations() { try { diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest/remove_bundle_drift_config_v1.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest/remove_bundle_drift_config_v1.xml new file mode 100644 index 0000000..7ed29dd --- /dev/null +++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest/remove_bundle_drift_config_v1.xml @@ -0,0 +1,20 @@ +<plugin name="TestPlugin" displayName="Test Plugin" package="org.rhq.plugins.test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="urn:xmlns:rhq-plugin" + xmlns:c="urn:xmlns:rhq-configuration"> + <server name="ServerWithBundleAndDriftConfig"> + <drift-configuration name="drift1"> + <basedir> + <value-context>fileSystem</value-context> + <value-name>/dirA</value-name> + </basedir> + </drift-configuration> + + <bundle-target> + <destination-base-dir name="destdir1"> + <value-context>fileSystem</value-context> + <value-name>/dirB</value-name> + </destination-base-dir> + </bundle-target> + </server> +</plugin> \ No newline at end of file diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest/remove_bundle_drift_config_v2.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest/remove_bundle_drift_config_v2.xml new file mode 100644 index 0000000..c92919d --- /dev/null +++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest/remove_bundle_drift_config_v2.xml @@ -0,0 +1,7 @@ +<plugin name="TestPlugin" displayName="Test Plugin" package="org.rhq.plugins.test" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="urn:xmlns:rhq-plugin" + xmlns:c="urn:xmlns:rhq-configuration"> + <server name="ServerWithBundleAndDriftConfig"> + </server> +</plugin> \ No newline at end of file
rhq-commits@lists.fedorahosted.org