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");
+            }
+        }
+    }
 }


Reply via email to