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(createNewBundleDeployment(deployment));
request.setBundleManagerProvider(new MockBundleManagerProvider());
request.setAbsoluteDestinationDirectory(this.destDir);
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();
loadProperties(realizedProps, 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());
assert deploymentProps.getManageRootDir() == true;
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";