modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java | 2 modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java | 126 +++++----- modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml | 35 ++ modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml | 36 ++ 4 files changed, 141 insertions(+), 58 deletions(-)
New commits: commit 5e74d53f806d7d87fa769647a5be15827077806f Author: John Sanda jsanda@redhat.com Date: Mon Oct 4 16:02:31 2010 -0400
Adding more tests, and adding call to set type on updated property definition
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java index 04a3995..f46c7a4 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java @@ -367,6 +367,8 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa if (newProperty instanceof PropertyDefinitionSimple) { PropertyDefinitionSimple newPDS = (PropertyDefinitionSimple) newProperty;
+ existingPDS.setType(newPDS.getType()); + // handle <property-options>? List<PropertyDefinitionEnumeration> existingOptions = existingPDS.getEnumeratedValues(); List<PropertyDefinitionEnumeration> newOptions = newPDS.getEnumeratedValues(); diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java index 5e2913b..2324a43 100644 --- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java +++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java @@ -23,6 +23,8 @@
package org.rhq.enterprise.server.configuration.metadata;
+import java.util.List; + import javax.persistence.EntityManager; import javax.transaction.SystemException;
@@ -32,6 +34,9 @@ import org.testng.annotations.Test; import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor; import org.rhq.core.clientapi.descriptor.plugin.ServerDescriptor; import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; +import org.rhq.core.domain.configuration.definition.PropertyDefinition; +import org.rhq.core.domain.configuration.definition.PropertyDefinitionList; +import org.rhq.core.domain.configuration.definition.PropertyDefinitionMap; import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple; import org.rhq.core.domain.configuration.definition.PropertyGroupDefinition; import org.rhq.enterprise.server.test.AbstractEJB3Test; @@ -40,7 +45,17 @@ import org.rhq.test.AssertUtils;
import static org.rhq.enterprise.server.configuration.metadata.PluginDescriptorUtil.loadPluginConfigDefFor; import static org.rhq.enterprise.server.configuration.metadata.PluginDescriptorUtil.loadPluginDescriptor; - +import static java.util.Arrays.asList; + +/** + * These are data-driven tests that exercise the plugin upgrade functionality around configurations such as plugin + * configurations and resource configurations. The data sets that are used are defined in two plugin descriptors. One + * is the original version and the other is the upgraded version. In order to avoid inter-dependencies between test + * methods, a separate plugin configuration should be used for each test method. A separate resource type is declared + * for each test, further documenting and delinating where each configuration is used. In the test methods, the + * original and updated coniguration definitions are initialized with an xpath expression that specifies the owning + * resource type. + */ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
PluginDescriptor originalDescriptor; @@ -62,7 +77,7 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test { }
@Test - public void addNewUngroupedPropertyDef() { + public void addNewUngroupedSimplePropertyDef() { initConfigDefs("servers[name='MyServer1']", "test");
String propertyName = "newUngroupedProperty"; @@ -93,13 +108,7 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test { "not change", expected, actual); }
- // This test fails with, - // - // PersistentObjectException: detached entity passed to persist - // - // I get the exception with both PropertyGroupDefinition and PropertyDefinitionSimple when I have tried various - // approaches to get past the exception. - @Test(enabled = false) + @Test public void addNewGroup() { initConfigDefs("servers[name='GroupTests']", "GroupTests");
@@ -107,14 +116,50 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test { findGroup("newGroup", originalConfigDef)); }
-// void assertGroupDefinitionExists() { -// for (PropertyGroupDefinition groupDef : originalConfigurationDef.getGroupDefinitions()) { -// if (groupDef.getName().equals("groupToBeRemoved")) { -// assertTrue(groupDef.getId() != 0); -// assertNotNull(entityMgr.find(PropertyGroupDefinition.class, groupDef.getId())); -// } -// } -// } + @Test + public void replaceMemberDefinitionOfPropertyList() { + initConfigDefs("servers[name='UpdatedPropertyList']", "ReplaceMemberDefinitionOfPropertyList"); + + String propertyName = "myList"; + PropertyDefinitionList expectedList = updatedConfigDef.getPropertyDefinitionList(propertyName); + PropertyDefinitionList actualList = originalConfigDef.getPropertyDefinitionList(propertyName); + + assertPropertyDefinitionMatches("The member definition should be replaced with the new version", expectedList, actualList); + } + + // Test is currently failing with, + // + // IllegalArgumentException: Removing a detached instance org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple + // + // I beleive that this is a problem with the test environment and not with production code. + @Test(enabled = false) + public void updateMapWithRemovedProperty() { + initConfigDefs("servers[name='UpdatedMapWithRemovedProperty']", "UpdateMapWithRemovedProperty"); + + String propertyName = "myMap"; + PropertyDefinitionMap map = originalConfigDef.getPropertyDefinitionMap(propertyName); + assertEquals("Expected property to be removed when it is removed from parent map", 0, + map.getPropertyDefinitions().size()); + } + + @Test + public void updateMapWithUpdatedProperty() { + initConfigDefs("servers[name='UpdatedMapWithUpdatedProperty']", "UpdateMapWithUpdatedProperty"); + + String propertyName = "propertyToUpdate"; + String mapPropertyName = "myMap"; + + PropertyDefinitionMap expectedMap = updatedConfigDef.getPropertyDefinitionMap(mapPropertyName); + PropertyDefinitionSimple expected = expectedMap.getPropertyDefinitionSimple(propertyName); + + PropertyDefinitionMap actualMap = originalConfigDef.getPropertyDefinitionMap(mapPropertyName); + PropertyDefinitionSimple actual = actualMap.getPropertyDefinitionSimple(propertyName); + + List<String> ignoredProperties = asList("id", "parentPropertyMapDefinition"); + + assertPropertyDefinitionMatches("Expected property who is a child of map to get updated and remain in the map", + expected, actual, ignoredProperties); + }
private void initConfigDefs(String path, String configName) { loadAndPersistConfigDefs(path, configName); @@ -132,8 +177,6 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
EntityManager entityMgr = getEntityManager(); entityMgr.persist(originalConfigDef); - //entityMgr.persist(updatedConfigDef); - getTransactionManager().commit(); } catch (Exception e) { try { @@ -146,21 +189,8 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test { }
private void updateConfigDef() { - try { - getTransactionManager().begin(); - - ConfigurationMetadataManagerLocal configMetadataMgr = LookupUtil.getConfigurationMetadataManager(); - configMetadataMgr.updateConfigurationDefinition(updatedConfigDef, originalConfigDef); - - getTransactionManager().commit(); - } catch (Exception e) { - try { - getTransactionManager().rollback(); - } catch (SystemException e1) { - throw new RuntimeException(e1); - } - throw new RuntimeException(e); - } + ConfigurationMetadataManagerLocal configMetadataMgr = LookupUtil.getConfigurationMetadataManager(); + configMetadataMgr.updateConfigurationDefinition(updatedConfigDef, originalConfigDef); }
private String getPackagePath() { @@ -176,33 +206,13 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test { return null; }
- void assertPropertyDefinitionMatches(String msg, PropertyDefinitionSimple expected, - PropertyDefinitionSimple actual) { + void assertPropertyDefinitionMatches(String msg, PropertyDefinition expected, PropertyDefinition actual) { AssertUtils.assertPropertiesMatch(msg, expected, actual, "id", "configurationDefinition"); }
- @Test(enabled = false) - public void existingUngroupedPropertyDefShouldBeUpdated() throws Exception { - PropertyDefinitionSimple expected = updatedConfigDef.getPropertyDefinitionSimple("foo"); - PropertyDefinitionSimple actual = originalConfigDef.getPropertyDefinitionSimple("foo"); - - assertPropertyDefinitionMatches("Existing ungrouped property defs should be updated", expected, actual); - } - - @Test(enabled = false) - public void propertyDefNotInNewConfigurationDefShouldBeRemoved() throws Exception { - assertNull( - "A property def in the original configuration def that is removed in the new configuration def should be deleted", - originalConfigDef.getPropertyDefinitionSimple("propertyToBeRemoved") - ); + void assertPropertyDefinitionMatches(String msg, PropertyDefinition expected, PropertyDefinition actual, + List<String> ignoredProperties) { + AssertUtils.assertPropertiesMatch(msg, expected, actual, ignoredProperties); }
- @Test(enabled = false) - public void propertyGroupDefNotInNewConfigurationDefShouldBeRemoved() throws Exception { - for (PropertyGroupDefinition def : originalConfigDef.getGroupDefinitions()) { - if (def.getName().equals("groupToBeRemoved")) { - fail("Expected property group 'groupToBeRemoved' to be deleted since it is not in the new configuration def."); - } - } - } } diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml index dd8fcfa..23f3a1b 100644 --- a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml +++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml @@ -26,4 +26,39 @@ </c:group> </plugin-configuration> </server> + + <server name="UpdatedPropertyList"> + <plugin-configuration> + <c:list-property name="myList" + displayName="My Test List" + readOnly="false" + description="Update Property List Test" + required="true" + min="1" + max="5"> + <c:simple-property name="myListMember" + type="double" + default="3.14" + description="PI"/> + </c:list-property> + </plugin-configuration> + </server> + + <server name="UpdatedMapWithRemovedProperty"> + <plugin-configuration> + <c:map-property name="myMap"> + <c:simple-property name="propertyToRemove"/> + </c:map-property> + </plugin-configuration> + </server> + + <server name="UpdatedMapWithUpdatedProperty"> + <plugin-configuration> + <c:map-property name="myMap"> + <c:simple-property name="propertyToUpdate" + default="ten" + required="false"/> + </c:map-property> + </plugin-configuration> + </server> </plugin> diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml index d090e76..4c61512 100644 --- a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml +++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml @@ -42,4 +42,40 @@ </c:group> </plugin-configuration> </server> + + <server name="UpdatedPropertyList"> + <plugin-configuration> + <c:list-property name="myList" + displayName="My Test List" + readOnly="false" + description="Update Property List Test" + required="true" + min="1" + max="5"> + <c:map-property name="myMap"> + <c:simple-property name="myListMember" + type="double" + default="3.14" + description="PI"/> + </c:map-property> + </c:list-property> + </plugin-configuration> + </server> + + <server name="UpdatedMapWithRemovedProperty"> + <plugin-configuration> + <c:map-property name="myMap"/> + </plugin-configuration> + </server> + + <server name="UpdatedMapWithUpdatedProperty"> + <plugin-configuration> + <c:map-property name="myMap"> + <c:simple-property name="propertyToUpdate" + type="integer" + default="10" + required="true"/> + </c:map-property> + </plugin-configuration> + </server> </plugin>
rhq-commits@lists.fedorahosted.org