You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2016/03/20 14:24:14 UTC

svn commit: r1735879 - in /jmeter/trunk/src: core/org/apache/jmeter/JMeter.java core/org/apache/jmeter/report/dashboard/HtmlTemplateExporter.java jorphan/org/apache/jorphan/util/JOrphanUtils.java

Author: pmouawad
Date: Sun Mar 20 13:24:14 2016
New Revision: 1735879

URL: http://svn.apache.org/viewvc?rev=1735879&view=rev
Log:
Bug 58986 - Report/Dashboard reuses the same output directory
Factor in JOrphanUtils the check for output folder and make it more readable and complete
Add the check in both HtmlTemplateExporter and JMeter as per sebb request
Bugzilla Id: 58986

Modified:
    jmeter/trunk/src/core/org/apache/jmeter/JMeter.java
    jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/HtmlTemplateExporter.java
    jmeter/trunk/src/jorphan/org/apache/jorphan/util/JOrphanUtils.java

Modified: jmeter/trunk/src/core/org/apache/jmeter/JMeter.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/JMeter.java?rev=1735879&r1=1735878&r2=1735879&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/JMeter.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/JMeter.java Sun Mar 20 13:24:14 2016
@@ -477,24 +477,11 @@ public class JMeter implements JMeterPlu
                     if(reportOutputFolderOpt != null) {
                         String reportOutputFolder = parser.getArgumentById(REPORT_OUTPUT_FOLDER_OPT).getArgument();
                         File reportOutputFolderAsFile = new File(reportOutputFolder);
-                        // We check folder does not exist or it is empty
-                        if(!reportOutputFolderAsFile.exists() || 
-                                // folder exists but is empty
-                                (reportOutputFolderAsFile.isDirectory() && reportOutputFolderAsFile.listFiles().length == 0)) {
-                            if(!reportOutputFolderAsFile.exists()) {
-                                // Report folder does not exist, we check we can create it 
-                                if(!reportOutputFolderAsFile.mkdirs()) {
-                                    throw new IllegalArgumentException("Cannot create output report to:'"
-                                            +reportOutputFolderAsFile.getAbsolutePath()+"' as I was not able to create it");
-                                }
-                            }
-                            log.info("Setting property '"+JMETER_REPORT_OUTPUT_DIR_PROPERTY+"' to:'"+reportOutputFolderAsFile.getAbsolutePath()+"'");
-                            JMeterUtils.setProperty(JMETER_REPORT_OUTPUT_DIR_PROPERTY, 
-                                    reportOutputFolderAsFile.getAbsolutePath());                        
-                        } else {
-                            throw new IllegalArgumentException("Cannot output report to:'"
-                                    +reportOutputFolderAsFile.getAbsolutePath()+"' as it would overwrite existing non empty folder");
-                        }
+
+                        JOrphanUtils.canSafelyWriteToFolder(reportOutputFolderAsFile);
+                        log.info("Setting property '"+JMETER_REPORT_OUTPUT_DIR_PROPERTY+"' to:'"+reportOutputFolderAsFile.getAbsolutePath()+"'");
+                        JMeterUtils.setProperty(JMETER_REPORT_OUTPUT_DIR_PROPERTY, 
+                                reportOutputFolderAsFile.getAbsolutePath());                        
                     }
                     
                     CLOption testReportOpt = parser

Modified: jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/HtmlTemplateExporter.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/HtmlTemplateExporter.java?rev=1735879&r1=1735878&r2=1735879&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/HtmlTemplateExporter.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/report/dashboard/HtmlTemplateExporter.java Sun Mar 20 13:24:14 2016
@@ -45,6 +45,7 @@ import org.apache.jmeter.report.processo
 import org.apache.jmeter.report.processor.graph.AbstractGraphConsumer;
 import org.apache.jmeter.util.JMeterUtils;
 import org.apache.jorphan.logging.LoggingManager;
+import org.apache.jorphan.util.JOrphanUtils;
 import org.apache.log.Logger;
 
 import freemarker.template.Configuration;
@@ -354,6 +355,8 @@ public class HtmlTemplateExporter extend
         if(!StringUtils.isEmpty(globallyDefinedOutputDir)) {
             outputDir = new File(globallyDefinedOutputDir);
         }
+        
+        JOrphanUtils.canSafelyWriteToFolder(outputDir);
 
         LOG.info("Will generate dashboard in folder:" + outputDir.getAbsolutePath());
 

Modified: jmeter/trunk/src/jorphan/org/apache/jorphan/util/JOrphanUtils.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/jorphan/org/apache/jorphan/util/JOrphanUtils.java?rev=1735879&r1=1735878&r2=1735879&view=diff
==============================================================================
--- jmeter/trunk/src/jorphan/org/apache/jorphan/util/JOrphanUtils.java (original)
+++ jmeter/trunk/src/jorphan/org/apache/jorphan/util/JOrphanUtils.java Sun Mar 20 13:24:14 2016
@@ -19,6 +19,7 @@
 package org.apache.jorphan.util;
 
 import java.io.Closeable;
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -577,4 +578,35 @@ public final class JOrphanUtils {
         return String.format("%02d:%02d:%02d",
                 elapsedSec / 3600, (elapsedSec % 3600) / 60, elapsedSec % 60);
     }
+
+    /**
+     * 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}
+     * @throws IllegalArgumentException
+     */
+    public static void canSafelyWriteToFolder(File folder)
+            throws IllegalArgumentException {
+        if(folder.exists()) {
+            if (folder.isFile()) {
+                throw new IllegalArgumentException("Cannot write to '"
+                        +folder.getAbsolutePath()+"' as it is an existing file");
+            } else {
+                if(folder.listFiles().length > 0) {
+                    throw new IllegalArgumentException("Cannot write to '"
+                            +folder.getAbsolutePath()+"' as folder is not empty");
+                }
+            }
+        } else {
+            // check we can create it
+            if(!folder.getParentFile().canWrite()) {
+                throw new IllegalArgumentException("Cannot write to '"
+                        +folder.getAbsolutePath()+"' as folder does not exist and parent folder is not writable");
+            }
+        }
+    }
 }