mirror of https://github.com/apache/jmeter.git
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:
parent
128812f7c3
commit
63eaf76bf3
|
|
@ -278,7 +278,7 @@ public class JMeter implements JMeterPlugin {
|
||||||
private static final CLOptionDescriptor D_FORCE_DELETE_RESULT_FILE =
|
private static final CLOptionDescriptor D_FORCE_DELETE_RESULT_FILE =
|
||||||
new CLOptionDescriptor("forceDeleteResultFile",
|
new CLOptionDescriptor("forceDeleteResultFile",
|
||||||
CLOptionDescriptor.ARGUMENT_DISALLOWED, FORCE_DELETE_RESULT_FILE,
|
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 = {
|
private static final String[][] DEFAULT_ICONS = {
|
||||||
{ "org.apache.jmeter.control.gui.TestPlanGui", "org/apache/jmeter/images/beaker.gif" }, //$NON-NLS-1$ $NON-NLS-2$
|
{ "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);
|
CLOption testReportOpt = parser.getArgumentById(REPORT_GENERATING_OPT);
|
||||||
if (testReportOpt != null) { // generate report from existing file
|
if (testReportOpt != null) { // generate report from existing file
|
||||||
String reportFile = testReportOpt.getArgument();
|
String reportFile = testReportOpt.getArgument();
|
||||||
extractAndSetReportOutputFolder(parser);
|
extractAndSetReportOutputFolder(parser, false);
|
||||||
ReportGenerator generator = new ReportGenerator(reportFile, null);
|
ReportGenerator generator = new ReportGenerator(reportFile, null);
|
||||||
generator.generate();
|
generator.generate();
|
||||||
} else if (parser.getArgumentById(NONGUI_OPT) == null) { // not non-GUI => GUI
|
} else if (parser.getArgumentById(NONGUI_OPT) == null) { // not non-GUI => GUI
|
||||||
startGui(testFile);
|
startGui(testFile);
|
||||||
startOptionalServers();
|
startOptionalServers();
|
||||||
} else { // NON-GUI must be true
|
} else { // NON-GUI must be true
|
||||||
extractAndSetReportOutputFolder(parser);
|
extractAndSetReportOutputFolder(parser, deleteResultFile);
|
||||||
|
|
||||||
CLOption rem = parser.getArgumentById(REMOTE_OPT_PARAM);
|
CLOption rem = parser.getArgumentById(REMOTE_OPT_PARAM);
|
||||||
if (rem == null) {
|
if (rem == null) {
|
||||||
|
|
@ -562,14 +562,14 @@ public class JMeter implements JMeterPlugin {
|
||||||
* @param parser {@link CLArgsParser}
|
* @param parser {@link CLArgsParser}
|
||||||
* @throws IllegalArgumentException
|
* @throws IllegalArgumentException
|
||||||
*/
|
*/
|
||||||
private void extractAndSetReportOutputFolder(CLArgsParser parser) {
|
private void extractAndSetReportOutputFolder(CLArgsParser parser, boolean deleteResultFile) {
|
||||||
CLOption reportOutputFolderOpt = parser
|
CLOption reportOutputFolderOpt = parser
|
||||||
.getArgumentById(REPORT_OUTPUT_FOLDER_OPT);
|
.getArgumentById(REPORT_OUTPUT_FOLDER_OPT);
|
||||||
if(reportOutputFolderOpt != null) {
|
if(reportOutputFolderOpt != null) {
|
||||||
String reportOutputFolder = parser.getArgumentById(REPORT_OUTPUT_FOLDER_OPT).getArgument();
|
String reportOutputFolder = parser.getArgumentById(REPORT_OUTPUT_FOLDER_OPT).getArgument();
|
||||||
File reportOutputFolderAsFile = new File(reportOutputFolder);
|
File reportOutputFolderAsFile = new File(reportOutputFolder);
|
||||||
|
|
||||||
JOrphanUtils.canSafelyWriteToFolder(reportOutputFolderAsFile);
|
JOrphanUtils.canSafelyWriteToFolder(reportOutputFolderAsFile, deleteResultFile);
|
||||||
final String reportOutputFolderAbsPath = reportOutputFolderAsFile.getAbsolutePath();
|
final String reportOutputFolderAbsPath = reportOutputFolderAsFile.getAbsolutePath();
|
||||||
log.info("Setting property '{}' to:'{}'", JMETER_REPORT_OUTPUT_DIR_PROPERTY, reportOutputFolderAbsPath);
|
log.info("Setting property '{}' to:'{}'", JMETER_REPORT_OUTPUT_DIR_PROPERTY, reportOutputFolderAbsPath);
|
||||||
JMeterUtils.setProperty(JMETER_REPORT_OUTPUT_DIR_PROPERTY, reportOutputFolderAbsPath);
|
JMeterUtils.setProperty(JMETER_REPORT_OUTPUT_DIR_PROPERTY, reportOutputFolderAbsPath);
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ import java.util.Map;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
|
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -43,7 +44,6 @@ import org.apache.commons.lang3.StringUtils;
|
||||||
public final class JOrphanUtils {
|
public final class JOrphanUtils {
|
||||||
|
|
||||||
private static final int DEFAULT_CHUNK_SIZE = 4096;
|
private static final int DEFAULT_CHUNK_SIZE = 4096;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Private constructor to prevent instantiation.
|
* 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 exists but is not empty</li>
|
||||||
* <li>Because it does not exist but cannot be created</li>
|
* <li>Because it does not exist but cannot be created</li>
|
||||||
* </ul>
|
* </ul>
|
||||||
* @param folder {@link File}
|
* @param folder {@link File}
|
||||||
|
*
|
||||||
* @throws IllegalArgumentException when folder can't be written to
|
* @throws IllegalArgumentException when folder can't be written to
|
||||||
*/
|
*/
|
||||||
public static void canSafelyWriteToFolder(File folder)
|
public static void canSafelyWriteToFolder(File folder) {
|
||||||
throws IllegalArgumentException {
|
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.exists()) {
|
||||||
if (folder.isFile()) {
|
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");
|
+folder.getAbsolutePath()+"' as it is an existing file");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
File[] listedFiles = folder.listFiles();
|
File[] listedFiles = folder.listFiles();
|
||||||
if(listedFiles != null && listedFiles.length > 0) {
|
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");
|
+folder.getAbsolutePath()+"' as folder is not empty");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -121,6 +121,7 @@ this behaviour, set <code>httpclient.reset_state_on_thread_group_iteration=false
|
||||||
|
|
||||||
<h3>Report / Dashboard</h3>
|
<h3>Report / Dashboard</h3>
|
||||||
<ul>
|
<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>
|
</ul>
|
||||||
|
|
||||||
<h3>General</h3>
|
<h3>General</h3>
|
||||||
|
|
|
||||||
|
|
@ -764,7 +764,7 @@ These are shown below.</p>
|
||||||
-S, --systemPropertyFile <argument>
|
-S, --systemPropertyFile <argument>
|
||||||
additional system property file(s)
|
additional system property file(s)
|
||||||
-f, --forceDeleteResultFile
|
-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 <argument>=<value>
|
-L, --loglevel <argument>=<value>
|
||||||
[category=]level e.g. jorphan=INFO, jmeter.util=DEBUG or com.example.foo=WARN
|
[category=]level e.g. jorphan=INFO, jmeter.util=DEBUG or com.example.foo=WARN
|
||||||
-r, --runremote
|
-r, --runremote
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue