/*
* RHQ Management Platform
* Copyright (C) 2005-2008 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, version 2, as
* published by the Free Software Foundation, and/or the GNU Lesser
* General Public License, version 2.1, also as published by the Free
* Software Foundation.
*
* 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 and the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License
* and the GNU Lesser General Public License along with this program;
* if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.rhq.core.pluginapi.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.HashSet;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertyList;
import org.rhq.core.domain.configuration.PropertyMap;
import org.rhq.core.domain.configuration.PropertySimple;
@Test
public class SnapshotReportTest {
private final File baseDir = new File(System.getProperty("java.io.tmpdir"), "test-snapshot");
private final File configDir = new File(baseDir, "configdir");
private final File logDir = new File(baseDir, "logdir");
private final File dataDir = new File(baseDir, "datadir");
private final File additionalDir1 = new File(baseDir, "additional1");
private final File additionalDir2 = new File(baseDir, "additional2");
@BeforeMethod
public void prepareTest() {
configDir.mkdirs();
logDir.mkdirs();
dataDir.mkdirs();
additionalDir1.mkdirs();
additionalDir2.mkdirs();
}
@AfterMethod
public void cleanupTest() throws Exception {
deleteRecursive(baseDir);
}
private void deleteRecursive(File doomed) {
if (doomed.isDirectory()) {
for (File deleteFile : doomed.listFiles()) {
deleteRecursive(deleteFile);
}
}
doomed.delete();
}
public void testSnapshotReportRecursive() throws Exception {
writeFile(configDir, "one.config", "config 1 file");
writeFile(logDir, "first.log", "log 1 file");
writeFile(dataDir, "data.dat", "this is data file 1");
writeFile(additionalDir1, "adddir1-custom-file1.txt", "1. custom file #1");
File subconfigDir = writeDirectory(configDir, "subconfig");
File sublogDir = writeDirectory(logDir, "sublog");
File subdataDir = writeDirectory(dataDir, "subdata");
File subadditionalDir = writeDirectory(additionalDir1, "subadddir");
writeFile(subconfigDir, "subone.config", "subconfig 1 file");
writeFile(sublogDir, "subfirst.log", "sublog 1 file");
writeFile(subdataDir, "subdata.dat", "this is subdata file 1");
writeFile(subadditionalDir, "subadddir1-custom-file1.txt", "1. sub custom file #1");
File subsubconfigDir = writeDirectory(subconfigDir, "subsubconfig");
writeFile(subsubconfigDir, "subsubone.config", "subsubconfig 1 file");
Configuration config = new Configuration();
config.put(new PropertySimple(SnapshotReport.PROP_BASE_DIRECTORY, baseDir.getAbsolutePath()));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_CONFIG_FILES, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_LOG_FILES, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_DATA_FILES, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_ADDITIONAL_FILES, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_CONFIG_DIRECTORY, configDir.getName())); // relative path
config.put(new PropertySimple(SnapshotReport.PROP_LOG_DIRECTORY, logDir.getName())); // relative path
config.put(new PropertySimple(SnapshotReport.PROP_DATA_DIRECTORY, dataDir.getName())); // relative path
config.put(new PropertySimple(SnapshotReport.PROP_CONFIG_REGEX, ".*\\.config"));
config.put(new PropertySimple(SnapshotReport.PROP_LOG_REGEX, ".*\\.log"));
config.put(new PropertySimple(SnapshotReport.PROP_DATA_REGEX, ".*\\.dat"));
config.put(new PropertySimple(SnapshotReport.PROP_CONFIG_RECURSIVE, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_LOG_RECURSIVE, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_DATA_RECURSIVE, "true"));
String dir1 = additionalDir1.getName();
PropertyList additionalList = new PropertyList(SnapshotReport.PROP_ADDITIONAL_FILES_LIST);
PropertyMap additionalFiles1 = new PropertyMap("map");
additionalFiles1.put(new PropertySimple(SnapshotReport.PROP_ADDITIONAL_FILES_DIRECTORY, dir1));
additionalFiles1.put(new PropertySimple(SnapshotReport.PROP_ADDITIONAL_FILES_REGEX, ".*\\.txt"));
additionalFiles1.put(new PropertySimple(SnapshotReport.PROP_ADDITIONAL_FILES_RECURSIVE, "true"));
additionalFiles1.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_ADDITIONAL_FILES, "true"));
config.put(additionalList);
additionalList.add(additionalFiles1);
SnapshotReport report = new SnapshotReport("test-snapshot", "some desc", config);
File snapshot = report.generate();
try {
FileInputStream fis = new FileInputStream(snapshot);
ZipInputStream zip = new ZipInputStream(fis);
ZipEntry zipEntry;
Set<String> entryNames = new HashSet<String>();
try {
for (zipEntry = zip.getNextEntry(); zipEntry != null; zipEntry = zip.getNextEntry()) {
entryNames.add(zipEntry.getName());
}
} finally {
zip.close();
}
// there should be the following files in the snapshot report:
// snapshot.properties
// config/one.config
// log/first.log
// data/data.dat
// additional1/adddir1-custom-file1.txt
// config/subconfig/subone.config
// log/sublog/subfirst.log
// data/subdata/subdata.dat
// additional1/subadddir/subadddir1-custom-file1.txt
// config/subconfig/subsubconfig/subsubone.config
assert entryNames.contains("snapshot.properties") : entryNames;
assert entryNames.contains("config/one.config") : entryNames;
assert entryNames.contains("log/first.log") : entryNames;
assert entryNames.contains("data/data.dat") : entryNames;
assert entryNames.contains("additional1/adddir1-custom-file1.txt") : entryNames;
assert entryNames.contains("config/subconfig/subone.config") : entryNames;
assert entryNames.contains("log/sublog/subfirst.log") : entryNames;
assert entryNames.contains("data/subdata/subdata.dat") : entryNames;
assert entryNames.contains("additional1/subadddir/subadddir1-custom-file1.txt") : entryNames;
assert entryNames.contains("config/subconfig/subsubconfig/subsubone.config") : entryNames;
assert entryNames.size() == 10 : entryNames;
} finally {
snapshot.delete();
}
}
public void testSnapshotReportNotRecursive() throws Exception {
writeFile(configDir, "one.config", "config 1 file");
writeFile(logDir, "first.log", "log 1 file");
writeFile(dataDir, "data.dat", "this is data file 1");
writeFile(additionalDir1, "adddir1-custom-file1.txt", "1. custom file #1");
File subconfigDir = writeDirectory(configDir, "subconfig");
File sublogDir = writeDirectory(logDir, "sublog");
File subdataDir = writeDirectory(dataDir, "subdata");
File subadditionalDir = writeDirectory(additionalDir1, "subadddir");
writeFile(subconfigDir, "subone.config", "subconfig 1 file");
writeFile(sublogDir, "subfirst.log", "sublog 1 file");
writeFile(subdataDir, "subdata.dat", "this is subdata file 1");
writeFile(subadditionalDir, "subadddir1-custom-file1.txt", "1. sub custom file #1");
File subsubconfigDir = writeDirectory(subconfigDir, "subsubconfig");
writeFile(subsubconfigDir, "subsubone.config", "subsubconfig 1 file");
Configuration config = new Configuration();
config.put(new PropertySimple(SnapshotReport.PROP_BASE_DIRECTORY, baseDir.getAbsolutePath()));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_CONFIG_FILES, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_LOG_FILES, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_DATA_FILES, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_ADDITIONAL_FILES, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_CONFIG_DIRECTORY, configDir.getName())); // relative path
config.put(new PropertySimple(SnapshotReport.PROP_LOG_DIRECTORY, logDir.getName())); // relative path
config.put(new PropertySimple(SnapshotReport.PROP_DATA_DIRECTORY, dataDir.getName())); // relative path
config.put(new PropertySimple(SnapshotReport.PROP_CONFIG_REGEX, ".*\\.config"));
config.put(new PropertySimple(SnapshotReport.PROP_LOG_REGEX, ".*\\.log"));
config.put(new PropertySimple(SnapshotReport.PROP_DATA_REGEX, ".*\\.dat"));
config.put(new PropertySimple(SnapshotReport.PROP_CONFIG_RECURSIVE, "false"));
config.put(new PropertySimple(SnapshotReport.PROP_LOG_RECURSIVE, "false"));
config.put(new PropertySimple(SnapshotReport.PROP_DATA_RECURSIVE, "false"));
String dir1 = additionalDir1.getName();
PropertyList additionalList = new PropertyList(SnapshotReport.PROP_ADDITIONAL_FILES_LIST);
PropertyMap additionalFiles1 = new PropertyMap("map");
additionalFiles1.put(new PropertySimple(SnapshotReport.PROP_ADDITIONAL_FILES_DIRECTORY, dir1));
additionalFiles1.put(new PropertySimple(SnapshotReport.PROP_ADDITIONAL_FILES_REGEX, ".*\\.txt"));
additionalFiles1.put(new PropertySimple(SnapshotReport.PROP_ADDITIONAL_FILES_RECURSIVE, "false"));
additionalFiles1.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_ADDITIONAL_FILES, "true"));
config.put(additionalList);
additionalList.add(additionalFiles1);
SnapshotReport report = new SnapshotReport("test-snapshot", "some desc", config);
File snapshot = report.generate();
try {
FileInputStream fis = new FileInputStream(snapshot);
ZipInputStream zip = new ZipInputStream(fis);
ZipEntry zipEntry;
Set<String> entryNames = new HashSet<String>();
try {
for (zipEntry = zip.getNextEntry(); zipEntry != null; zipEntry = zip.getNextEntry()) {
entryNames.add(zipEntry.getName());
}
} finally {
zip.close();
}
// there should be the following files in the snapshot report:
// snapshot.properties
// config/one.config
// log/first.log
// data/data.dat
// additional1/adddir1-custom-file1.txt
assert entryNames.contains("snapshot.properties") : entryNames;
assert entryNames.contains("config/one.config") : entryNames;
assert entryNames.contains("log/first.log") : entryNames;
assert entryNames.contains("data/data.dat") : entryNames;
assert entryNames.contains("additional1/adddir1-custom-file1.txt") : entryNames;
assert entryNames.size() == 5 : entryNames;
} finally {
snapshot.delete();
}
}
public void testSnapshotReportOutputDir() throws Exception {
File tmpDir = new File(System.getProperty("java.io.tmpdir"), "SNAPSHOT_TMP");
tmpDir.mkdirs();
try {
Configuration config = new Configuration();
config.put(new PropertySimple(SnapshotReport.PROP_REPORT_OUTPUT_DIRECTORY, tmpDir.getAbsolutePath()));
SnapshotReport report = new SnapshotReport("test-snapshot", "some desc", config);
File snapshot = report.generate();
try {
assert snapshot.getParentFile().equals(tmpDir);
} finally {
snapshot.delete();
}
} finally {
tmpDir.delete();
}
}
public void testSnapshotReportOnlyDataFiles() throws Exception {
writeFile(configDir, "one.config", "config 1 file");
writeFile(logDir, "first.log", "log 1 file");
writeFile(dataDir, "data.dat", "this is a data file");
Configuration config = new Configuration();
config.put(new PropertySimple(SnapshotReport.PROP_BASE_DIRECTORY, baseDir.getAbsolutePath()));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_CONFIG_FILES, "false"));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_LOG_FILES, "false"));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_DATA_FILES, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_DATA_DIRECTORY, dataDir.getName())); // relative path
SnapshotReport report = new SnapshotReport("test-snapshot", "some desc", config);
File snapshot = report.generate();
try {
FileInputStream fis = new FileInputStream(snapshot);
ZipInputStream zip = new ZipInputStream(fis);
ZipEntry zipEntry;
Set<String> entryNames = new HashSet<String>();
try {
for (zipEntry = zip.getNextEntry(); zipEntry != null; zipEntry = zip.getNextEntry()) {
entryNames.add(zipEntry.getName());
}
} finally {
zip.close();
}
// there should be the following files in the snapshot report:
// snapshot.properties
// data/data.dat
assert entryNames.contains("snapshot.properties") : entryNames;
assert entryNames.contains("data/data.dat") : entryNames;
assert entryNames.size() == 2 : entryNames;
} finally {
snapshot.delete();
}
}
public void testSnapshotReportNoRegex() throws Exception {
writeFile(configDir, "one.config", "config 1 file");
writeFile(configDir, "two.config", "config 2 file");
writeFile(logDir, "first.log", "log 1 file");
writeFile(logDir, "second.log", "log 2 file");
writeFile(configDir, "not.a.config.file.txt", "this is not a config file");
writeFile(logDir, "not.a.log.file.txt", "this is not a log file");
Configuration config = new Configuration();
config.put(new PropertySimple(SnapshotReport.PROP_BASE_DIRECTORY, baseDir.getAbsolutePath()));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_CONFIG_FILES, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_LOG_FILES, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_CONFIG_DIRECTORY, configDir.getName())); // relative path
config.put(new PropertySimple(SnapshotReport.PROP_LOG_DIRECTORY, logDir.getName())); // relative path
//config.put(new PropertySimple(SnapshotReport.PROP_CONFIG_REGEX, ".*\\.config"));
//config.put(new PropertySimple(SnapshotReport.PROP_LOG_REGEX, ".*\\.log"));
SnapshotReport report = new SnapshotReport("test-snapshot", "some desc", config);
File snapshot = report.generate();
try {
FileInputStream fis = new FileInputStream(snapshot);
ZipInputStream zip = new ZipInputStream(fis);
ZipEntry zipEntry;
Set<String> entryNames = new HashSet<String>();
try {
for (zipEntry = zip.getNextEntry(); zipEntry != null; zipEntry = zip.getNextEntry()) {
entryNames.add(zipEntry.getName());
}
} finally {
zip.close();
}
// there should be the following files in the snapshot report:
// snapshot.properties
// config/one.config
// config/two.config
// config/not.a.config.file.txt (this should be here because there was no regex filtering)
// log/first.log
// log/second.log
// log/not.a.log.file.txt (this should be here because there was no regex filtering)
assert entryNames.contains("snapshot.properties") : entryNames;
assert entryNames.contains("config/one.config") : entryNames;
assert entryNames.contains("config/two.config") : entryNames;
assert entryNames.contains("config/not.a.config.file.txt") : entryNames;
assert entryNames.contains("log/first.log") : entryNames;
assert entryNames.contains("log/second.log") : entryNames;
assert entryNames.contains("log/not.a.log.file.txt") : entryNames;
assert entryNames.size() == 7 : entryNames;
} finally {
snapshot.delete();
}
}
public void testSnapshotReportWithRegex() throws Exception {
writeFile(configDir, "one.config", "config 1 file");
writeFile(configDir, "two.config", "config 2 file");
writeFile(logDir, "first.log", "log 1 file");
writeFile(logDir, "second.log", "log 2 file");
writeFile(configDir, "not.a.config.file.txt", "this is not a config file");
writeFile(logDir, "not.a.log.file.txt", "this is not a log file");
Configuration config = new Configuration();
config.put(new PropertySimple(SnapshotReport.PROP_BASE_DIRECTORY, baseDir.getAbsolutePath()));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_CONFIG_FILES, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_LOG_FILES, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_CONFIG_DIRECTORY, configDir.getName())); // relative path
config.put(new PropertySimple(SnapshotReport.PROP_LOG_DIRECTORY, logDir.getName())); // relative path
config.put(new PropertySimple(SnapshotReport.PROP_CONFIG_REGEX, ".*\\.config"));
config.put(new PropertySimple(SnapshotReport.PROP_LOG_REGEX, ".*\\.log"));
SnapshotReport report = new SnapshotReport("test-snapshot", "some desc", config);
File snapshot = report.generate();
try {
FileInputStream fis = new FileInputStream(snapshot);
ZipInputStream zip = new ZipInputStream(fis);
ZipEntry zipEntry;
Set<String> entryNames = new HashSet<String>();
try {
for (zipEntry = zip.getNextEntry(); zipEntry != null; zipEntry = zip.getNextEntry()) {
entryNames.add(zipEntry.getName());
}
} finally {
zip.close();
}
// there should be the following files in the snapshot report:
// snapshot.properties
// config/one.config
// config/two.config
// log/first.log
// log/second.log
assert entryNames.contains("snapshot.properties") : entryNames;
assert entryNames.contains("config/one.config") : entryNames;
assert entryNames.contains("config/two.config") : entryNames;
assert entryNames.contains("log/first.log") : entryNames;
assert entryNames.contains("log/second.log") : entryNames;
assert entryNames.size() == 5 : entryNames;
} finally {
snapshot.delete();
}
}
public void testSnapshotReportDisableConfig() throws Exception {
writeFile(configDir, "one.config", "config 1 file");
writeFile(configDir, "two.config", "config 2 file");
writeFile(logDir, "first.log", "log 1 file");
writeFile(logDir, "second.log", "log 2 file");
writeFile(configDir, "not.a.config.file.txt", "this is not a config file");
writeFile(logDir, "not.a.log.file.txt", "this is not a log file");
Configuration config = new Configuration();
config.put(new PropertySimple(SnapshotReport.PROP_BASE_DIRECTORY, baseDir.getAbsolutePath()));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_CONFIG_FILES, "false"));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_LOG_FILES, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_CONFIG_DIRECTORY, configDir.getName())); // relative path
config.put(new PropertySimple(SnapshotReport.PROP_LOG_DIRECTORY, logDir.getName())); // relative path
config.put(new PropertySimple(SnapshotReport.PROP_CONFIG_REGEX, ".*\\.config"));
config.put(new PropertySimple(SnapshotReport.PROP_LOG_REGEX, ".*\\.log"));
SnapshotReport report = new SnapshotReport("test-snapshot", "some desc", config);
File snapshot = report.generate();
try {
FileInputStream fis = new FileInputStream(snapshot);
ZipInputStream zip = new ZipInputStream(fis);
ZipEntry zipEntry;
Set<String> entryNames = new HashSet<String>();
try {
for (zipEntry = zip.getNextEntry(); zipEntry != null; zipEntry = zip.getNextEntry()) {
entryNames.add(zipEntry.getName());
}
} finally {
zip.close();
}
// there should be the following files in the snapshot report:
// snapshot.properties
// log/first.log
// log/second.log
assert entryNames.contains("snapshot.properties") : entryNames;
assert entryNames.contains("log/first.log") : entryNames;
assert entryNames.contains("log/second.log") : entryNames;
assert entryNames.size() == 3 : entryNames;
} finally {
snapshot.delete();
}
}
public void testSnapshotReportDisableAll() throws Exception {
writeFile(configDir, "one.config", "config 1 file");
writeFile(configDir, "two.config", "config 2 file");
writeFile(logDir, "first.log", "log 1 file");
writeFile(logDir, "second.log", "log 2 file");
writeFile(configDir, "not.a.config.file.txt", "this is not a config file");
writeFile(logDir, "not.a.log.file.txt", "this is not a log file");
Configuration config = new Configuration();
config.put(new PropertySimple(SnapshotReport.PROP_BASE_DIRECTORY, baseDir.getAbsolutePath()));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_CONFIG_FILES, "false"));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_LOG_FILES, "false"));
config.put(new PropertySimple(SnapshotReport.PROP_CONFIG_DIRECTORY, configDir.getName())); // relative path
config.put(new PropertySimple(SnapshotReport.PROP_LOG_DIRECTORY, logDir.getName())); // relative path
config.put(new PropertySimple(SnapshotReport.PROP_CONFIG_REGEX, ".*\\.config"));
config.put(new PropertySimple(SnapshotReport.PROP_LOG_REGEX, ".*\\.log"));
SnapshotReport report = new SnapshotReport("test-snapshot", "some desc", config);
File snapshot = report.generate();
try {
FileInputStream fis = new FileInputStream(snapshot);
ZipInputStream zip = new ZipInputStream(fis);
ZipEntry zipEntry;
Set<String> entryNames = new HashSet<String>();
try {
for (zipEntry = zip.getNextEntry(); zipEntry != null; zipEntry = zip.getNextEntry()) {
entryNames.add(zipEntry.getName());
}
} finally {
zip.close();
}
// there should be the following files in the snapshot report:
// snapshot.properties
assert entryNames.contains("snapshot.properties") : entryNames;
assert entryNames.size() == 1 : entryNames;
} finally {
snapshot.delete();
}
}
public void testSnapshotReportWithAdditionalFiles() throws Exception {
writeFile(configDir, "one.config", "config 1 file");
writeFile(logDir, "first.log", "log 1 file");
writeFile(additionalDir1, "adddir1-custom-file1.txt", "1. custom file #1");
writeFile(additionalDir1, "adddir1-custom-file2.txt", "1. custom file #2");
writeFile(additionalDir1, "adddir1-custom-file3.xml", "1. custom file #3 XML");
writeFile(additionalDir2, "adddir2-custom-file1.txt", "2. custom file #1");
writeFile(additionalDir2, "adddir2-custom-file2.txt", "2. custom file #2");
writeFile(additionalDir2, "adddir2-custom-file3.xml", "2. custom file #3 XML");
Configuration config = new Configuration();
config.put(new PropertySimple(SnapshotReport.PROP_BASE_DIRECTORY, baseDir.getAbsolutePath()));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_CONFIG_FILES, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_LOG_FILES, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_ADDITIONAL_FILES, "true"));
config.put(new PropertySimple(SnapshotReport.PROP_CONFIG_DIRECTORY, configDir.getName())); // relative path
config.put(new PropertySimple(SnapshotReport.PROP_LOG_DIRECTORY, logDir.getName())); // relative path
config.put(new PropertySimple(SnapshotReport.PROP_CONFIG_REGEX, ".*\\.config"));
config.put(new PropertySimple(SnapshotReport.PROP_LOG_REGEX, ".*\\.log"));
String dir1 = additionalDir1.getName();
String dir2 = additionalDir2.getName();
PropertyList additionalList = new PropertyList(SnapshotReport.PROP_ADDITIONAL_FILES_LIST);
PropertyMap additionalFiles1 = new PropertyMap("map");
PropertyMap additionalFiles2 = new PropertyMap("map");
PropertyMap additionalFiles3 = new PropertyMap("map");
PropertyMap additionalFiles4 = new PropertyMap("map");
additionalFiles1.put(new PropertySimple(SnapshotReport.PROP_ADDITIONAL_FILES_DIRECTORY, dir1));
additionalFiles1.put(new PropertySimple(SnapshotReport.PROP_ADDITIONAL_FILES_REGEX, ".*\\.txt"));
additionalFiles1.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_ADDITIONAL_FILES, "true"));
additionalFiles2.put(new PropertySimple(SnapshotReport.PROP_ADDITIONAL_FILES_DIRECTORY, dir2));
additionalFiles2.put(new PropertySimple(SnapshotReport.PROP_ADDITIONAL_FILES_REGEX, ".*\\.txt"));
//additionalFiles2.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_ADDITIONAL_FILES, "true")); // default should be true
additionalFiles3.put(new PropertySimple(SnapshotReport.PROP_ADDITIONAL_FILES_DIRECTORY, dir1));
additionalFiles3.put(new PropertySimple(SnapshotReport.PROP_ADDITIONAL_FILES_REGEX, ".*\\.xml"));
additionalFiles3.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_ADDITIONAL_FILES, "true"));
additionalFiles4.put(new PropertySimple(SnapshotReport.PROP_ADDITIONAL_FILES_DIRECTORY, dir2));
additionalFiles4.put(new PropertySimple(SnapshotReport.PROP_ADDITIONAL_FILES_REGEX, ".*\\.xml"));
additionalFiles4.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_ADDITIONAL_FILES, "false"));
config.put(additionalList);
additionalList.add(additionalFiles1);
additionalList.add(additionalFiles2);
additionalList.add(additionalFiles3);
additionalList.add(additionalFiles4);
SnapshotReport report = new SnapshotReport("test-snapshot", "some desc", config);
File snapshot = report.generate();
try {
FileInputStream fis = new FileInputStream(snapshot);
ZipInputStream zip = new ZipInputStream(fis);
ZipEntry zipEntry;
Set<String> entryNames = new HashSet<String>();
try {
for (zipEntry = zip.getNextEntry(); zipEntry != null; zipEntry = zip.getNextEntry()) {
entryNames.add(zipEntry.getName());
}
} finally {
zip.close();
}
// there should be the following files in the snapshot report:
// snapshot.properties
// config/one.config
// log/first.log
// additional1/adddir1-custom-file1.txt
// additional1/adddir1-custom-file2.txt
// additional2/adddir2-custom-file1.txt
// additional2/adddir2-custom-file2.txt
// additional1/adddir1-custom-file3.xml
assert entryNames.contains("snapshot.properties") : entryNames;
assert entryNames.contains("config/one.config") : entryNames;
assert entryNames.contains("log/first.log") : entryNames;
assert entryNames.contains("additional1/adddir1-custom-file1.txt") : entryNames;
assert entryNames.contains("additional1/adddir1-custom-file2.txt") : entryNames;
assert entryNames.contains("additional2/adddir2-custom-file1.txt") : entryNames;
assert entryNames.contains("additional2/adddir2-custom-file2.txt") : entryNames;
assert entryNames.contains("additional1/adddir1-custom-file3.xml") : entryNames;
assert entryNames.size() == 8 : entryNames;
} finally {
snapshot.delete();
}
}
private void writeFile(File dir, String filename, String content) throws Exception {
File newFile = new File(dir, filename);
FileOutputStream fos = new FileOutputStream(newFile);
try {
fos.write(content.getBytes());
} finally {
fos.close();
}
}
private File writeDirectory(File parent, String dirName) throws Exception {
File newDir = new File(parent, dirName);
newDir.mkdirs();
if (!newDir.isDirectory()) {
throw new Exception("Cannot create test directory: " + newDir);
}
return newDir;
}
}