Bug 62243 - Dashboard : make option "--forceDeleteResultFile"/"-f" option delete folder referenced by "-o" option

Bugzilla Id: 62243

git-svn-id: https://svn.apache.org/repos/asf/jmeter/trunk@1828168 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Philippe Mouawad 2018-04-02 13:38:08 +00:00
parent 128812f7c3
commit 63eaf76bf3
4 changed files with 45 additions and 12 deletions

View File

@ -278,7 +278,7 @@ public class JMeter implements JMeterPlugin {
private static final CLOptionDescriptor D_FORCE_DELETE_RESULT_FILE =
new CLOptionDescriptor("forceDeleteResultFile",
CLOptionDescriptor.ARGUMENT_DISALLOWED, FORCE_DELETE_RESULT_FILE,
"force delete existing results files before start the test");
"force delete existing results files and web report folder if present before starting the test");
private static final String[][] DEFAULT_ICONS = {
{ "org.apache.jmeter.control.gui.TestPlanGui", "org/apache/jmeter/images/beaker.gif" }, //$NON-NLS-1$ $NON-NLS-2$
@ -517,14 +517,14 @@ public class JMeter implements JMeterPlugin {
CLOption testReportOpt = parser.getArgumentById(REPORT_GENERATING_OPT);
if (testReportOpt != null) { // generate report from existing file
String reportFile = testReportOpt.getArgument();
extractAndSetReportOutputFolder(parser);
extractAndSetReportOutputFolder(parser, false);
ReportGenerator generator = new ReportGenerator(reportFile, null);
generator.generate();
} else if (parser.getArgumentById(NONGUI_OPT) == null) { // not non-GUI => GUI
startGui(testFile);
startOptionalServers();
} else { // NON-GUI must be true
extractAndSetReportOutputFolder(parser);
extractAndSetReportOutputFolder(parser, deleteResultFile);
CLOption rem = parser.getArgumentById(REMOTE_OPT_PARAM);
if (rem == null) {
@ -562,14 +562,14 @@ public class JMeter implements JMeterPlugin {
* @param parser {@link CLArgsParser}
* @throws IllegalArgumentException
*/
private void extractAndSetReportOutputFolder(CLArgsParser parser) {
private void extractAndSetReportOutputFolder(CLArgsParser parser, boolean deleteResultFile) {
CLOption reportOutputFolderOpt = parser
.getArgumentById(REPORT_OUTPUT_FOLDER_OPT);
if(reportOutputFolderOpt != null) {
String reportOutputFolder = parser.getArgumentById(REPORT_OUTPUT_FOLDER_OPT).getArgument();
File reportOutputFolderAsFile = new File(reportOutputFolder);
JOrphanUtils.canSafelyWriteToFolder(reportOutputFolderAsFile);
JOrphanUtils.canSafelyWriteToFolder(reportOutputFolderAsFile, deleteResultFile);
final String reportOutputFolderAbsPath = reportOutputFolderAsFile.getAbsolutePath();
log.info("Setting property '{}' to:'{}'", JMETER_REPORT_OUTPUT_DIR_PROPERTY, reportOutputFolderAbsPath);
JMeterUtils.setProperty(JMETER_REPORT_OUTPUT_DIR_PROPERTY, reportOutputFolderAbsPath);

View File

@ -31,6 +31,7 @@ import java.util.Map;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
/**
@ -43,7 +44,6 @@ import org.apache.commons.lang3.StringUtils;
public final class JOrphanUtils {
private static final int DEFAULT_CHUNK_SIZE = 4096;
/**
* Private constructor to prevent instantiation.
*/
@ -593,20 +593,52 @@ public final class JOrphanUtils {
* <li>Because it exists but is not empty</li>
* <li>Because it does not exist but cannot be created</li>
* </ul>
* @param folder {@link File}
* @param folder {@link File}
*
* @throws IllegalArgumentException when folder can't be written to
*/
public static void canSafelyWriteToFolder(File folder)
throws IllegalArgumentException {
public static void canSafelyWriteToFolder(File folder) {
canSafelyWriteToFolder(folder, false);
}
/**
* Throw {@link IllegalArgumentException} if folder cannot be written to either:
* <ul>
* <li>Because it exists but is not a folder</li>
* <li>Because it exists but is not empty</li>
* <li>Because it does not exist but cannot be created</li>
* </ul>
* @param folder {@link File}
* @param deleteFolderIfExists
*
* @throws IllegalArgumentException when folder can't be written to
*/
public static void canSafelyWriteToFolder(File folder, boolean deleteFolderIfExists) {
if(folder.exists()) {
if (folder.isFile()) {
throw new IllegalArgumentException("Cannot write to '"
if(deleteFolderIfExists) {
if(!folder.delete()) {
throw new IllegalArgumentException("Cannot write to '"
+folder.getAbsolutePath()+"' as it is an existing file and delete failed");
}
} else {
throw new IllegalArgumentException("Cannot write to '"
+folder.getAbsolutePath()+"' as it is an existing file");
}
} else {
File[] listedFiles = folder.listFiles();
if(listedFiles != null && listedFiles.length > 0) {
throw new IllegalArgumentException("Cannot write to '"
if(deleteFolderIfExists) {
try {
FileUtils.deleteDirectory(folder);
folder.mkdir();
} catch(IOException ex) {
throw new IllegalArgumentException("Cannot write to '"
+folder.getAbsolutePath()+"' as folder is not empty and cleanup failed with error:"+ex.getMessage(), ex);
}
} else {
throw new IllegalArgumentException("Cannot write to '"
+folder.getAbsolutePath()+"' as folder is not empty");
}
}
}
} else {

View File

@ -121,6 +121,7 @@ this behaviour, set <code>httpclient.reset_state_on_thread_group_iteration=false
<h3>Report / Dashboard</h3>
<ul>
<li><bug>62243</bug>Dashboard : make option "<code>--forceDeleteResultFile</code>"/"<code>-f</code>" option delete folder referenced by "<code>-o</code>" option</li>
</ul>
<h3>General</h3>

View File

@ -764,7 +764,7 @@ These are shown below.</p>
-S, --systemPropertyFile &lt;argument&gt;
additional system property file(s)
-f, --forceDeleteResultFile
force delete existing results files before start the test
force delete existing results files and web report folder if present before starting the test
-L, --loglevel &lt;argument&gt;=&lt;value&gt;
[category=]level e.g. jorphan=INFO, jmeter.util=DEBUG or com.example.foo=WARN
-r, --runremote