On 2 April 2016 at 13:06, Philippe Mouawad <[email protected]> wrote:
> Hi Vladimir,
> Congrats for your first Commit !
Ditto.
Please also update the changes.xml file to document the enhancement - thanks!
> Just wondering, I see this part of code has been dropped at line 290, is
> this regular ?:
> if (fileEntry.exception != null) {
> Throwable exception = fileEntry.exception;
> if (exception instanceof RuntimeException) {
> throw (RuntimeException) exception;
> }
> // Note: previous exception message should be clear enough, so
> // no additional information like "file name" needs to be added
> here
> throw new IllegalStateException(exception.getMessage(),
> exception);
> }
>
>
> Thanks
>
> On Sat, Apr 2, 2016 at 1:33 PM, <[email protected]> wrote:
>
>> Author: vladimirsitnikov
>> Date: Sat Apr 2 11:33:48 2016
>> New Revision: 1737490
>>
>> URL: http://svn.apache.org/viewvc?rev=1737490&view=rev
>> Log:
>> Bug 59153 - stop test if accessing non-existing file (e.g. empty filename
>> in CSVDataSet)
>>
>> If accessing empty or non-existing file, throw an exception so user can
>> correct the test plan.
>>
>> Bugzilla Id: 59153
>> closes #167
>>
>> Modified:
>> jmeter/trunk/src/core/org/apache/jmeter/services/FileServer.java
>> jmeter/trunk/test/src/org/apache/jmeter/config/TestCVSDataSet.java
>> jmeter/trunk/test/src/org/apache/jmeter/services/TestFileServer.java
>>
>> Modified: jmeter/trunk/src/core/org/apache/jmeter/services/FileServer.java
>> URL:
>> http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/services/FileServer.java?rev=1737490&r1=1737489&r2=1737490&view=diff
>>
>> ==============================================================================
>> --- jmeter/trunk/src/core/org/apache/jmeter/services/FileServer.java
>> (original)
>> +++ jmeter/trunk/src/core/org/apache/jmeter/services/FileServer.java Sat
>> Apr 2 11:33:48 2016
>> @@ -250,17 +250,17 @@ public class FileServer {
>> * Creates an association between a filename and a File
>> inputOutputObject,
>> * and stores it for later use - unless it is already stored.
>> *
>> - * @param filename - relative (to base) or absolute file name (must
>> not be null)
>> + * @param filename - relative (to base) or absolute file name (must
>> not be null or empty)
>> * @param charsetName - the character set encoding to use for the
>> file (may be null)
>> * @param alias - the name to be used to access the object (must not
>> be null)
>> * @param hasHeader true if the file has a header line describing the
>> contents
>> * @return the header line; may be null
>> * @throws EOFException if eof reached
>> - * @throws IllegalArgumentException if header could not be read
>> + * @throws IllegalArgumentException if header could not be read or
>> filename is null or empty
>> */
>> public synchronized String reserveFile(String filename, String
>> charsetName, String alias, boolean hasHeader) {
>> - if (filename == null){
>> - throw new IllegalArgumentException("Filename must not be
>> null");
>> + if (filename == null || filename.isEmpty()){
>> + throw new IllegalArgumentException("Filename must not be null
>> or empty");
>> }
>> if (alias == null){
>> throw new IllegalArgumentException("Alias must not be null");
>> @@ -274,20 +274,29 @@ public class FileServer {
>> log.info("Stored: "+filename+" Alias: "+alias);
>> }
>> files.put(alias, fileEntry);
>> - if (hasHeader){
>> + if (hasHeader) {
>> try {
>> - fileEntry.headerLine=readLine(alias, false);
>> - } catch (IOException e) {
>> + fileEntry.headerLine = readLine(alias, false);
>> + if (fileEntry.headerLine == null) {
>> + fileEntry.exception = new EOFException("File is
>> empty: " + fileEntry.file);
>> + }
>> + } catch (IOException | IllegalArgumentException e) {
>> fileEntry.exception = e;
>> - throw new IllegalArgumentException("Could not read
>> file header line",e);
>> - }
>> - if (fileEntry.headerLine == null) {
>> - fileEntry.exception = new EOFException("File is
>> empty: " + fileEntry.file);
>> }
>> }
>> }
>> if (hasHeader && fileEntry.headerLine == null) {
>> - throw new IllegalArgumentException("Could not read file
>> header line", fileEntry.exception);
>> + throw new IllegalArgumentException("Could not read file
>> header line for file " + filename,
>> + fileEntry.exception);
>> + }
>> + if (fileEntry.exception != null) {
>> + Throwable exception = fileEntry.exception;
>> + if (exception instanceof RuntimeException) {
>> + throw (RuntimeException) exception;
>> + }
>> + // Note: previous exception message should be clear enough, so
>> + // no additional information like "file name" needs to be
>> added here
>> + throw new IllegalStateException(exception.getMessage(),
>> exception);
>> }
>> return fileEntry.headerLine;
>> }
>> @@ -418,6 +427,9 @@ public class FileServer {
>> }
>>
>> private BufferedReader createBufferedReader(FileEntry fileEntry)
>> throws IOException {
>> + if (!fileEntry.file.canRead() || !fileEntry.file.isFile()) {
>> + throw new IllegalArgumentException("File "+
>> fileEntry.file.getName()+ " must exist and be readable");
>> + }
>> FileInputStream fis = new FileInputStream(fileEntry.file);
>> InputStreamReader isr = null;
>> // If file encoding is specified, read using that encoding,
>> otherwise use default platform encoding
>>
>> Modified:
>> jmeter/trunk/test/src/org/apache/jmeter/config/TestCVSDataSet.java
>> URL:
>> http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/apache/jmeter/config/TestCVSDataSet.java?rev=1737490&r1=1737489&r2=1737490&view=diff
>>
>> ==============================================================================
>> --- jmeter/trunk/test/src/org/apache/jmeter/config/TestCVSDataSet.java
>> (original)
>> +++ jmeter/trunk/test/src/org/apache/jmeter/config/TestCVSDataSet.java Sat
>> Apr 2 11:33:48 2016
>> @@ -62,10 +62,15 @@ public class TestCVSDataSet extends JMet
>> csv.setFilename("No.such.filename");
>> csv.setVariableNames("a,b,c");
>> csv.setDelimiter(",");
>> - csv.iterationStart(null);
>> - assertEquals("<EOF>",threadVars.get("a"));
>> - assertEquals("<EOF>",threadVars.get("b"));
>> - assertEquals("<EOF>",threadVars.get("c"));
>> + try {
>> + csv.iterationStart(null);
>> + fail("Bad filename in CSVDataSet -> IllegalArgumentException:
>> File No.such.filename must exist and be readable");
>> + } catch (IllegalArgumentException ignored) {
>> + assertEquals("Bad filename in CSVDataSet -> exception",
>> + "File No.such.filename must exist and be readable",
>> + ignored.getMessage());
>> + }
>> +
>>
>> csv = new CSVDataSet();
>> csv.setFilename(findTestPath("testfiles/testempty.csv"));
>>
>> Modified:
>> jmeter/trunk/test/src/org/apache/jmeter/services/TestFileServer.java
>> URL:
>> http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/apache/jmeter/services/TestFileServer.java?rev=1737490&r1=1737489&r2=1737490&view=diff
>>
>> ==============================================================================
>> --- jmeter/trunk/test/src/org/apache/jmeter/services/TestFileServer.java
>> (original)
>> +++ jmeter/trunk/test/src/org/apache/jmeter/services/TestFileServer.java
>> Sat Apr 2 11:33:48 2016
>> @@ -129,16 +129,24 @@ public class TestFileServer extends JMet
>>
>> try {
>> FS.reserveFile(missing,charsetName,alias,true);
>> - fail("Expected IllegalArgumentException");
>> - } catch (IllegalArgumentException e) {
>> - assertTrue("Expected FNF", e.getCause() instanceof
>> java.io.FileNotFoundException);
>> + fail("Bad filename passed to FileService.reserveFile ->
>> IllegalArgumentException: Could not read file header line for file
>> no-such-file");
>> + } catch (IllegalArgumentException ignored) {
>> + assertEquals("Bad filename passed to FileService.reserveFile
>> -> exception",
>> + "Could not read file header line for file
>> no-such-file",
>> + ignored.getMessage());
>> + assertEquals("Bad filename passed to FileService.reserveFile
>> -> exception",
>> + "File no-such-file must exist and be readable",
>> ignored.getCause().getMessage());
>> }
>> // Ensure second invocation gets same behaviour
>> try {
>> FS.reserveFile(missing,charsetName,alias,true);
>> - fail("Expected IllegalArgumentException");
>> - } catch (IllegalArgumentException e) {
>> - assertTrue("Expected FNF", e.getCause() instanceof
>> java.io.FileNotFoundException);
>> + fail("Bad filename passed to FileService.reserveFile ->
>> IllegalArgumentException: Could not read file header line for file
>> no-such-file");
>> + } catch (IllegalArgumentException ignored) {
>> + assertEquals("Bad filename passed to FileService.reserveFile
>> -> exception",
>> + "Could not read file header line for file
>> no-such-file",
>> + ignored.getMessage());
>> + assertEquals("Bad filename passed to FileService.reserveFile
>> -> exception",
>> + "File no-such-file must exist and be readable",
>> ignored.getCause().getMessage());
>> }
>> }
>>
>>
>>
>>
>
>
> --
> Cordialement.
> Philippe Mouawad.