[prev in list] [next in list] [prev in thread] [next in thread] 

List:       rhq-commits
Subject:    [rhq] Branch 'release-3.0.0' - modules/common modules/plugins
From:       ips () fedoraproject ! org (ips)
Date:       2010-06-30 14:55:06
Message-ID: 20100630145506.C91A9120267 () lists ! fedorahosted ! org
[Download RAW message or body]

 modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/AntLauncher.java          \
|    8   modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/BundleAntProject.java \
|   16   modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/task/BundleTask.java \
|    9   modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/type/InputPropertyType.java \
|   78 ++-  modules/plugins/ant-bundle/src/test/java/org/rhq/plugins/ant/AntBundlePluginComponentTest.java \
|  249 +++++-----  modules/plugins/ant-bundle/src/test/resources/test-bundle.xml      \
|    7   6 files changed, 218 insertions(+), 149 deletions(-)

New commits:
commit 85bdf62f88f1e99bcef1184d57b3121020cd0e18
Author: Ian Springer <ian.springer at redhat.com>
Date:   Wed Jun 30 10:54:56 2010 -0400

    make sure that the rhq:inputProperty element sets the default value on the \
corresponding project property during the configuration, and not the execution, of \
the rhq:bundle task; that way, the other child elements of the rhq:bundle task can \
reference the input property via ${inputProp} and know that it will be initialized to \
its default value, if it had one; add validation of input properties according to \
their specified type

diff --git a/modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/AntLauncher.java \
b/modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/AntLauncher.java index \
                03b58df..bfc8d2e 100644
--- a/modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/AntLauncher.java
+++ b/modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/AntLauncher.java
@@ -88,7 +88,7 @@ public class AntLauncher {
         // Parse and validate the build file before even attempting to execute it.
         parseBundleDeployFile(buildFile);
 
-        BundleAntProject project = createProject(buildFile);
+        BundleAntProject project = createProject(buildFile, false);
 
         try {
             if (buildProperties != null) {
@@ -127,7 +127,7 @@ public class AntLauncher {
     }
 
     public BundleAntProject parseBundleDeployFile(File buildFile) throws \
                InvalidBuildFileException {
-        BundleAntProject project = createProject(buildFile);
+        BundleAntProject project = createProject(buildFile, true);
 
         ProjectHelper2 projectHelper = new ProjectHelper2();
         try {
@@ -153,10 +153,10 @@ public class AntLauncher {
         return project;
     }
 
-    private BundleAntProject createProject(File buildFile) {
+    private BundleAntProject createProject(File buildFile, boolean parseOnly) {
         ClassLoader classLoader = getClass().getClassLoader();
 
-        BundleAntProject project = new BundleAntProject();
+        BundleAntProject project = new BundleAntProject(parseOnly);
         project.setCoreLoader(classLoader);
         project.init();
         project.setBaseDir(buildFile.getParentFile());
diff --git a/modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/BundleAntProject.java \
b/modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/BundleAntProject.java \
                index 412b22c..a80e61e 100644
--- a/modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/BundleAntProject.java
                
+++ b/modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/BundleAntProject.java
 @@ -48,12 +48,14 @@ import org.rhq.core.util.updater.DeployDifferences;
  */
 public class BundleAntProject extends Project {
     // Bundle-level attributes
+    private boolean parseOnly;
+
     private String bundleName;
     private String bundleVersion;
     private String bundleDescription;
-    private ConfigurationDefinition configDef;
 
     // Deployment-level attributes
+    private ConfigurationDefinition configDef;
     private Configuration config;
     private File deployDir;
     private final Set<String> bundleFileNames = new HashSet<String>();
@@ -62,6 +64,18 @@ public class BundleAntProject extends Project {
     private DeployDifferences deployDiffs = new DeployDifferences();
     private boolean dryRun;
 
+    public BundleAntProject() {
+        this(false);
+    }
+
+    public BundleAntProject(boolean parseOnly) {
+        this.parseOnly = parseOnly;
+    }
+
+    public boolean isParseOnly() {
+        return parseOnly;
+    }
+
     public Set<String> getBundleFileNames() {
         return bundleFileNames;
     }
diff --git a/modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/task/BundleTask.java \
b/modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/task/BundleTask.java \
                index fe20433..c67cdc8 100644
--- a/modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/task/BundleTask.java
+++ b/modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/task/BundleTask.java
@@ -132,11 +132,6 @@ public class BundleTask extends AbstractBundleTask {
         }
         getProject().setDeploymentPhase(deploymentPhase);
 
-        // Initialize the deployment configuration.
-        for (InputPropertyType inputProperty : this.inputProperties) {
-            inputProperty.execute();
-        }
-
         String dryRunString = (String) \
projectProps.get(DeployPropertyNames.DEPLOY_DRY_RUN);  boolean dryRun = \
Boolean.valueOf(dryRunString);  getProject().setDryRun(dryRun);
@@ -196,10 +191,10 @@ public class BundleTask extends AbstractBundleTask {
 
     public void addConfigured(InputPropertyType inputProperty) {
         this.inputProperties.add(inputProperty);
-        inputProperty.init();
+        inputProperty.init();        
     }
 
-    public void addConfigured(DeploymentUnitType deployment) {
+    public void add(DeploymentUnitType deployment) {
         this.deploymentUnits.put(deployment.getName(), deployment);
     }
 
diff --git a/modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/type/InputPropertyType.java \
b/modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/type/InputPropertyType.java
 index 35aca70..2b44a3a 100644
--- a/modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/type/InputPropertyType.java
                
+++ b/modules/common/ant-bundle/src/main/java/org/rhq/bundle/ant/type/InputPropertyType.java
 @@ -26,11 +26,11 @@ import \
org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple;  import \
org.rhq.core.domain.configuration.definition.PropertySimpleType;  
 /**
- * An Ant task that defines a basic property that the user provides as input for \
deployment of a bundle. Typically, the + * An Ant type that defines a basic property \
                that the user provides as input for deployment of a bundle. \
                Typically, the
  * property will be substituted into configuration files from the bundle during \
                deployment - see ReplaceTask.
  *
  * If the deployment script is invoked from the GUI, the user will be prompted for \
                values for any input properties that
- * are defined via this task. If the script is invoked from the command line, the \
properties must be passed using the -D + * are defined via this type. If the script \
                is invoked from the command line, the properties must be passed using \
                the -D
  * and/or -propertyfile options.
  *
  * @author Ian Springer
@@ -42,36 +42,39 @@ public class InputPropertyType extends AbstractBundleType {
     private String defaultValue;
     private String type = PropertySimpleType.STRING.xmlName();
 
-    public void init() {
+    public void init() throws BuildException {
         validateAttributes();
 
         ConfigurationDefinition configDef = \
                getProject().getConfigurationDefinition();
-        PropertySimpleType propSimpleType = \
PropertySimpleType.fromXmlName(this.type); +        PropertySimpleType propType = \
                PropertySimpleType.fromXmlName(this.type);
         PropertyDefinitionSimple propDef = new PropertyDefinitionSimple(this.name, \
                this.description, this.required,
-                propSimpleType);
+                propType);
         configDef.put(propDef);
-    }
-    
-    public void execute() throws BuildException {
+
         String value = getProject().getProperty(this.name);
         if (value == null) {
             value = this.defaultValue;
+            getProject().setProperty(this.name, value);
         }
-        if (value == null && this.required) {
-            throw new BuildException("No value was specified for required input \
                property '" + this.name
-                      + "', and no default is defined for the property.");
+
+        boolean parseOnly = getProject().isParseOnly();
+        if (!parseOnly) {
+            if (value == null && this.required) {
+                throw new BuildException("No value was specified for required input \
property '" + this.name +                          + "', and no default is defined \
for the property."); +            }
+            validateValue(value, propType);
+            String valueString = (value != null) ? "'" + value + "'" : "<null>";
+            log("Initializing input property '" + this.name + "' with value " + \
valueString + "...");  }
-        String valueString = (value != null) ? "'" + value + "'" : "<null>";
-        log("Initializing input property '" + this.name + "' with value " + \
valueString + "...");  
-        PropertySimple prop = new PropertySimple(this.name, value);
-        ConfigurationDefinition configDef = \
getProject().getConfigurationDefinition();  Configuration config = \
                getProject().getConfiguration();
-        // TODO: validate the config
+        PropertySimple prop = new PropertySimple(this.name, value);
         config.put(prop);
+
         return;
     }
-
+    
     public String getDescription() {
         return description;
     }
@@ -126,8 +129,9 @@ public class InputPropertyType extends AbstractBundleType {
         if (this.name.length() == 0) {
             throw new BuildException("The 'name' attribute must have a non-empty \
value.");  }
+        PropertySimpleType propType;
         try {
-            PropertySimpleType.fromXmlName(this.type);
+            propType = PropertySimpleType.fromXmlName(this.type);
         } catch (IllegalArgumentException e) {
             throw new BuildException("Illegal value for 'type' attribute: " + \
this.type);  }
@@ -135,6 +139,44 @@ public class InputPropertyType extends AbstractBundleType {
             if (!this.required) {
                 log("No default value was specified for optional input property '" + \
this.name + "'.", Project.MSG_WARN);  }
+        } else {
+            // Make sure the default value is valid according to the property's \
type. +            try {
+                validateValue(this.defaultValue, propType);
+            } catch (RuntimeException e) {
+                throw new BuildException("Default value '" + this.defaultValue
+                        + "' is not valid according to 'type' attribute: " + \
this.type, e); +            }
+        }
+    }
+
+    private void validateValue(String value, PropertySimpleType propType) {
+        if (value != null) {
+            try {
+                switch (propType) {
+                    case BOOLEAN:
+                        if (!value.equals(Boolean.TRUE.toString()) && \
!value.equals(Boolean.FALSE.toString())) { +                            throw new \
RuntimeException("Illegal value for boolean property - value must be 'true' or \
'false'."  +                                    + value);
+                        }
+                        break;
+                    case DOUBLE:
+                        Double.valueOf(value);
+                        break;
+                    case FLOAT:
+                        Float.valueOf(value);
+                        break;
+                    case INTEGER:
+                        Integer.valueOf(value);
+                        break;
+                    case LONG:
+                        Long.valueOf(value);
+                        break;
+                }
+            } catch (RuntimeException e) {
+                throw new BuildException("'" + value + "' is not a legal value for \
input property '" + this.name +                        + "', which has type '" + \
this.type + "'.", e); +            }
         }
     }
 }
\ No newline at end of file
diff --git a/modules/plugins/ant-bundle/src/test/java/org/rhq/plugins/ant/AntBundlePluginComponentTest.java \
b/modules/plugins/ant-bundle/src/test/java/org/rhq/plugins/ant/AntBundlePluginComponentTest.java
 index aae419c..ae06f0d 100644
--- a/modules/plugins/ant-bundle/src/test/java/org/rhq/plugins/ant/AntBundlePluginComponentTest.java
                
+++ b/modules/plugins/ant-bundle/src/test/java/org/rhq/plugins/ant/AntBundlePluginComponentTest.java
 @@ -107,6 +107,7 @@ public class AntBundlePluginComponentTest {
         FileUtil.purge(this.destDir, true);
     }
 
+    @Test(enabled = true)
     public void testAntBundleRevert() throws Exception {
         // install then upgrade a bundle first
         testAntBundleUpgrade();
@@ -214,136 +215,20 @@ public class AntBundlePluginComponentTest {
         assert previousProps.getBundleVersion().equals("3.0"); // \
testAntBundleUpgrade deployed version 3.0  }
 
+    @Test(enabled = true)
     public void testAntBundleUpgrade() throws Exception {
         upgrade(false);
     }
 
+    @Test(enabled = true)
     public void testAntBundleCleanUpgrade() throws Exception {
         upgrade(true);
     }
 
-    private void upgrade(boolean clean) throws Exception {
-        testAntBundleInitialInstall(); // install a bundle first
-        cleanPluginDirs(); // clean everything but the dest dir - we want to upgrade \
                the destination
-        prepareBeforeTestMethod(); // prepare for our new test
-
-        // deploy upgrade and test it
-        ResourceType resourceType = new ResourceType("testSimpleBundle2Type", \
                "plugin", ResourceCategory.SERVER, null);
-        BundleType bundleType = new BundleType("testSimpleBundle2BType", \
                resourceType);
-        Repo repo = new Repo("test-bundle-two");
-        PackageType packageType = new PackageType("test-bundle-two", resourceType);
-        Bundle bundle = new Bundle("test-bundle-two", bundleType, repo, \
                packageType);
-        BundleVersion bundleVersion = new BundleVersion("test-bundle-two", "3.0", \
                bundle,
-            getRecipeFromFile("test-bundle-three.xml"));
-        BundleDestination destination = new BundleDestination(bundle, \
                "testSimpleBundle2Dest", new ResourceGroup(
-            "testSimpleBundle2Group"), this.destDir.getAbsolutePath());
-
-        Configuration config = new Configuration();
-        String customPropName = "custom.prop";
-        String customPropValue = "DEF";
-        String onePropName = "one.prop";
-        String onePropValue = "one-one-one";
-        String threePropName = "three.prop";
-        String threePropValue = "333";
-        config.put(new PropertySimple(customPropName, customPropValue));
-        config.put(new PropertySimple(onePropName, onePropValue));
-        config.put(new PropertySimple(threePropName, threePropValue));
-
-        BundleDeployment deployment = new BundleDeployment();
-        deployment.setId(456);
-        deployment.setName("test bundle 3 deployment name - upgrades test bundle \
                2");
-        deployment.setBundleVersion(bundleVersion);
-        deployment.setConfiguration(config);
-        deployment.setDestination(destination);
-
-        // copy the test archive file to the bundle files dir
-        FileUtil.copyFile(new \
File("src/test/resources/test-bundle-three-archive.zip"), new \
                File(this.bundleFilesDir,
-            "test-bundle-three-archive.zip"));
-
-        // create test.properties file in the bundle files dir
-        File file1 = new File(this.bundleFilesDir, "test.properties");
-        Properties props = new Properties();
-        props.setProperty(customPropName, "@@" + customPropName + "@@");
-        FileOutputStream outputStream = new FileOutputStream(file1);
-        props.store(outputStream, "test.properties comment");
-        outputStream.close();
-
-        // create some additional files - note: receipe says to ignore "ignore/**"
-        File ignoreDir = new File(this.destDir, "ignore");
-        File extraDir = new File(this.destDir, "extra");
-        ignoreDir.mkdirs();
-        extraDir.mkdirs();
-        File ignoredFile = new File(ignoreDir, "ignore-file.txt");
-        File extraFile = new File(extraDir, "extra-file.txt");
-        FileUtil.writeFile(new ByteArrayInputStream("ignore".getBytes()), \
                ignoredFile);
-        FileUtil.writeFile(new ByteArrayInputStream("extra".getBytes()), extraFile);
-
-        BundleDeployRequest request = new BundleDeployRequest();
-        request.setBundleFilesLocation(this.bundleFilesDir);
-        request.setResourceDeployment(new BundleResourceDeployment(deployment, \
                null));
-        request.setBundleManagerProvider(new MockBundleManagerProvider());
-        request.setCleanDeployment(clean);
-
-        BundleDeployResult results = plugin.deployBundle(request);
-
-        assertResultsSuccess(results);
-
-        // test that the prop was replaced in raw file test.properties
-        Properties realizedProps = new Properties();
-        realizedProps.load(new FileInputStream(new File(this.destDir, \
                "config/test.properties")));
-        assert customPropValue.equals(realizedProps.getProperty(customPropName)) : \
                "didn't replace prop";
-
-        // test that the archive was extracted properly. These are the files in the \
                archive or removed from original:
-        // REMOVED: zero-file.txt
-        // one/one-file.txt (content: "@@one.prop@@") <-- recipe says this is to be \
                replaced
-        // two/two-file.txt (content: "@@two.prop@@") <-- recipe does not say to \
                replace this
-        // three/three-file.txt (content: "@@three.prop@@") <-- recipe says this is \
                to be replaced
-        File zeroFile = new File(this.destDir, "zero-file.txt");
-        File oneFile = new File(this.destDir, "one/one-file.txt");
-        File twoFile = new File(this.destDir, "two/two-file.txt");
-        File threeFile = new File(this.destDir, "three/three-file.txt");
-        assert !zeroFile.exists() : "zero file should have been removed during \
                upgrade";
-        assert oneFile.exists() : "one file missing";
-        assert twoFile.exists() : "two file missing";
-        assert threeFile.exists() : "three file missing";
-        if (clean) {
-            assert !ignoredFile.exists() : "ignored file should have been deleted \
                due to clean deployment request";
-            assert !extraFile.exists() : "extra file should have been deleted due to \
                clean deployment request";
-        } else {
-            assert ignoredFile.exists() : "ignored file wasn't ignored, it was \
                deleted";
-            assert !extraFile.exists() : "extra file ignored, but it should have \
                been deleted/backed up";
-        }
-        assert readFile(oneFile).startsWith(onePropValue);
-        assert readFile(twoFile).startsWith("@@two.prop@@");
-        assert readFile(threeFile).startsWith(threePropValue);
-
-        DeploymentsMetadata metadata = new DeploymentsMetadata(this.destDir);
-        DeploymentProperties deploymentProps = \
                metadata.getDeploymentProperties(deployment.getId());
-        assert deploymentProps.getDeploymentId() == deployment.getId();
-        assert deploymentProps.getBundleName().equals(bundle.getName());
-        assert deploymentProps.getBundleVersion().equals(bundleVersion.getVersion());
                
-
-        DeploymentProperties currentProps = \
                metadata.getCurrentDeploymentProperties();
-        assert deploymentProps.equals(currentProps);
-
-        // check the backup directory - note, clean flag is irrelevent when \
                determining what should be backed up 
-        File backupDir = metadata.getDeploymentBackupDirectory(deployment.getId());
-        File extraBackupFile = new File(backupDir, extraDir.getName() + \
                File.separatorChar + extraFile.getName());
-        File ignoredBackupFile = new File(backupDir, ignoreDir.getName() + \
                File.separatorChar + ignoredFile.getName());
-        assert !ignoredBackupFile.exists() : "ignored file was backed up but it \
                should not have been";
-        assert extraBackupFile.exists() : "extra file was not backed up";
-        assert "extra".equals(new String(StreamUtil.slurp(new \
                FileInputStream(extraBackupFile)))) : "bad backup of extra";
-
-        DeploymentProperties previousProps = \
                metadata.getPreviousDeploymentProperties(456);
-        assert previousProps != null : "There should be previous deployment \
                metadata";
-        assert previousProps.getDeploymentId() == 123 : "bad previous deployment \
                metadata"; // testAntBundleInitialInstall used 123
-        assert previousProps.getBundleName().equals(deploymentProps.getBundleName());
                
-        assert previousProps.getBundleVersion().equals("2.5"); // \
                testAntBundleInitialInstall deployed version 2.5
-    }
-
     /**
      * Test deployment of an RHQ bundle recipe with archive file and raw file
      */
+    @Test(enabled = true)
     public void testAntBundleInitialInstall() throws Exception {
         ResourceType resourceType = new ResourceType("testSimpleBundle2Type", \
                "plugin", ResourceCategory.SERVER, null);
         BundleType bundleType = new BundleType("testSimpleBundle2BType", \
resourceType); @@ -424,6 +309,7 @@ public class AntBundlePluginComponentTest {
     /**
      * Test deployment of an RHQ bundle recipe.
      */
+    @Test(enabled = true)
     public void testAntBundle() throws Exception {
         ResourceType resourceType = new ResourceType("testSimpleBundle", "plugin", \
                ResourceCategory.SERVER, null);
         BundleType bundleType = new BundleType("testSimpleBundle", resourceType);
@@ -459,6 +345,12 @@ public class AntBundlePluginComponentTest {
         props.store(outputStream, "noreplace");
         outputStream.close();
 
+        // create foo test file
+        File foofile = new File(this.bundleFilesDir, "foo.properties");
+        outputStream = new FileOutputStream(foofile);
+        props.store(outputStream, "foo");
+        outputStream.close();
+
         BundleDeployRequest request = new BundleDeployRequest();
         request.setBundleFilesLocation(this.bundleFilesDir);
         request.setResourceDeployment(new BundleResourceDeployment(deployment, \
null)); @@ -479,6 +371,125 @@ public class AntBundlePluginComponentTest {
         assert "@@custom.prop1@@".equals(notrealizedProps.getProperty("custom.prop1")) \
: "replaced prop when it shouldn't";  }
 
+    private void upgrade(boolean clean) throws Exception {
+        testAntBundleInitialInstall(); // install a bundle first
+        cleanPluginDirs(); // clean everything but the dest dir - we want to upgrade \
the destination +        prepareBeforeTestMethod(); // prepare for our new test
+
+        // deploy upgrade and test it
+        ResourceType resourceType = new ResourceType("testSimpleBundle2Type", \
"plugin", ResourceCategory.SERVER, null); +        BundleType bundleType = new \
BundleType("testSimpleBundle2BType", resourceType); +        Repo repo = new \
Repo("test-bundle-two"); +        PackageType packageType = new \
PackageType("test-bundle-two", resourceType); +        Bundle bundle = new \
Bundle("test-bundle-two", bundleType, repo, packageType); +        BundleVersion \
bundleVersion = new BundleVersion("test-bundle-two", "3.0", bundle, +            \
getRecipeFromFile("test-bundle-three.xml")); +        BundleDestination destination = \
new BundleDestination(bundle, "testSimpleBundle2Dest", new ResourceGroup( +           \
"testSimpleBundle2Group"), this.destDir.getAbsolutePath()); +
+        Configuration config = new Configuration();
+        String customPropName = "custom.prop";
+        String customPropValue = "DEF";
+        String onePropName = "one.prop";
+        String onePropValue = "one-one-one";
+        String threePropName = "three.prop";
+        String threePropValue = "333";
+        config.put(new PropertySimple(customPropName, customPropValue));
+        config.put(new PropertySimple(onePropName, onePropValue));
+        config.put(new PropertySimple(threePropName, threePropValue));
+
+        BundleDeployment deployment = new BundleDeployment();
+        deployment.setId(456);
+        deployment.setName("test bundle 3 deployment name - upgrades test bundle \
2"); +        deployment.setBundleVersion(bundleVersion);
+        deployment.setConfiguration(config);
+        deployment.setDestination(destination);
+
+        // copy the test archive file to the bundle files dir
+        FileUtil.copyFile(new \
File("src/test/resources/test-bundle-three-archive.zip"), new \
File(this.bundleFilesDir, +            "test-bundle-three-archive.zip"));
+
+        // create test.properties file in the bundle files dir
+        File file1 = new File(this.bundleFilesDir, "test.properties");
+        Properties props = new Properties();
+        props.setProperty(customPropName, "@@" + customPropName + "@@");
+        FileOutputStream outputStream = new FileOutputStream(file1);
+        props.store(outputStream, "test.properties comment");
+        outputStream.close();
+
+        // create some additional files - note: recipe says to ignore "ignore/**"
+        File ignoreDir = new File(this.destDir, "ignore");
+        File extraDir = new File(this.destDir, "extra");
+        ignoreDir.mkdirs();
+        extraDir.mkdirs();
+        File ignoredFile = new File(ignoreDir, "ignore-file.txt");
+        File extraFile = new File(extraDir, "extra-file.txt");
+        FileUtil.writeFile(new ByteArrayInputStream("ignore".getBytes()), \
ignoredFile); +        FileUtil.writeFile(new \
ByteArrayInputStream("extra".getBytes()), extraFile); +
+        BundleDeployRequest request = new BundleDeployRequest();
+        request.setBundleFilesLocation(this.bundleFilesDir);
+        request.setResourceDeployment(new BundleResourceDeployment(deployment, \
null)); +        request.setBundleManagerProvider(new MockBundleManagerProvider());
+        request.setCleanDeployment(clean);
+
+        BundleDeployResult results = plugin.deployBundle(request);
+
+        assertResultsSuccess(results);
+
+        // test that the prop was replaced in raw file test.properties
+        Properties realizedProps = new Properties();
+        realizedProps.load(new FileInputStream(new File(this.destDir, \
"config/test.properties"))); +        assert \
customPropValue.equals(realizedProps.getProperty(customPropName)) : "didn't replace \
prop"; +
+        // test that the archive was extracted properly. These are the files in the \
archive or removed from original: +        // REMOVED: zero-file.txt
+        // one/one-file.txt (content: "@@one.prop@@") <-- recipe says this is to be \
replaced +        // two/two-file.txt (content: "@@two.prop@@") <-- recipe does not \
say to replace this +        // three/three-file.txt (content: "@@three.prop@@") <-- \
recipe says this is to be replaced +        File zeroFile = new File(this.destDir, \
"zero-file.txt"); +        File oneFile = new File(this.destDir, "one/one-file.txt");
+        File twoFile = new File(this.destDir, "two/two-file.txt");
+        File threeFile = new File(this.destDir, "three/three-file.txt");
+        assert !zeroFile.exists() : "zero file should have been removed during \
upgrade"; +        assert oneFile.exists() : "one file missing";
+        assert twoFile.exists() : "two file missing";
+        assert threeFile.exists() : "three file missing";
+        if (clean) {
+            assert !ignoredFile.exists() : "ignored file should have been deleted \
due to clean deployment request"; +            assert !extraFile.exists() : "extra \
file should have been deleted due to clean deployment request"; +        } else {
+            assert ignoredFile.exists() : "ignored file wasn't ignored, it was \
deleted"; +            assert !extraFile.exists() : "extra file ignored, but it \
should have been deleted/backed up"; +        }
+        assert readFile(oneFile).startsWith(onePropValue);
+        assert readFile(twoFile).startsWith("@@two.prop@@");
+        assert readFile(threeFile).startsWith(threePropValue);
+
+        DeploymentsMetadata metadata = new DeploymentsMetadata(this.destDir);
+        DeploymentProperties deploymentProps = \
metadata.getDeploymentProperties(deployment.getId()); +        assert \
deploymentProps.getDeploymentId() == deployment.getId(); +        assert \
deploymentProps.getBundleName().equals(bundle.getName()); +        assert \
deploymentProps.getBundleVersion().equals(bundleVersion.getVersion()); +
+        DeploymentProperties currentProps = \
metadata.getCurrentDeploymentProperties(); +        assert \
deploymentProps.equals(currentProps); +
+        // check the backup directory - note, clean flag is irrelevent when \
determining what should be backed up +        File backupDir = \
metadata.getDeploymentBackupDirectory(deployment.getId()); +        File \
extraBackupFile = new File(backupDir, extraDir.getName() + File.separatorChar + \
extraFile.getName()); +        File ignoredBackupFile = new File(backupDir, \
ignoreDir.getName() + File.separatorChar + ignoredFile.getName()); +        assert \
!ignoredBackupFile.exists() : "ignored file was backed up but it should not have \
been"; +        assert extraBackupFile.exists() : "extra file was not backed up";
+        assert "extra".equals(new String(StreamUtil.slurp(new \
FileInputStream(extraBackupFile)))) : "bad backup of extra"; +
+        DeploymentProperties previousProps = \
metadata.getPreviousDeploymentProperties(456); +        assert previousProps != null \
: "There should be previous deployment metadata"; +        assert \
previousProps.getDeploymentId() == 123 : "bad previous deployment metadata"; // \
testAntBundleInitialInstall used 123 +        assert \
previousProps.getBundleName().equals(deploymentProps.getBundleName()); +        \
assert previousProps.getBundleVersion().equals("2.5"); // testAntBundleInitialInstall \
deployed version 2.5 +    }
+
     private void assertResultsSuccess(BundleDeployResult results) {
         assert (results.getErrorMessage() == null) : "Failed to process bundle: [" + \
                results.getErrorMessage() + "]";
         assert results.isSuccess() : "Failed to process bundle!: [" + \
                results.getErrorMessage() + "]";
diff --git a/modules/plugins/ant-bundle/src/test/resources/test-bundle.xml \
b/modules/plugins/ant-bundle/src/test/resources/test-bundle.xml index \
                96e7a14..a828dff 100644
--- a/modules/plugins/ant-bundle/src/test/resources/test-bundle.xml
+++ b/modules/plugins/ant-bundle/src/test/resources/test-bundle.xml
@@ -22,9 +22,16 @@
            required="true"
            defaultValue="default 2"/>
 
+        <rhq:input-property
+           name="custom.prop3"
+           description="my prop 3"
+           required="true"
+           defaultValue="foo.properties"/>
+
         <rhq:deployment-unit name="doodibittydoo">
             <rhq:file name="test.properties" \
                destinationFile="config/test.properties" replace="true"/>
             <rhq:file name="noreplace.properties" \
destinationFile="config/noreplace.properties"/> +            <rhq:file \
name="${custom.prop3}" destinationDir="config"/>              </rhq:deployment-unit>
 
     </rhq:bundle>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic