Right, the failure seems to be that when we do:
if (uri.getScheme() == null) {
try {
uri = new File(uri.getPath()).toURI();
the URI contains a % encoded value for a space. When that is turned into a
String:
String fileName = uri.toURL().getFile();
and the string is tested for existence:
if (new File(fileName).exists()) { // LOG4J2-466
it fails of course, but it should not.
So the logic is wrong... yikes.
We need to account for encoded strings before File test...
Gary
On Sun, May 3, 2015 at 12:26 PM, Ralph Goers <[email protected]>
wrote:
> I’ve added some system.out calls. What I am seeing on OS/X is that
> FileUtils.fileFromURI tests for the files existence. If it exists it uses
> that file name. If it does not exist it calls URLDecoder.decode(fileName,
> “UTF-8”) and uses that to create the file object. The decode method
> replaces “+” characters with spaces, which is precisely what causes the
> assertion failure.
>
> I suspect the reason it is failing is because of the workspace name “Log4j
> 2.x”, which contains a URI encoded blank character. It seems to me there is
> something not quite right with the fix for LOG4J2-466. It appears to
> appending a non-URL-encoded relative path to a URL encoded path. It would
> seem that neither the “new uri” or “Decoded fileName” would actually exist.
>
> Here is the OS/X output:
>
> Running org.apache.logging.log4j.core.util.FileUtilsTest
>
> new uri:
> file:/Users/rgoers/projects/apache/logging/log4j/log4j2/master/log4j-core/NON-EXISTING-PATH/this+file+does+not+exist.xml
>
> Decoded fileName:
> /Users/rgoers/projects/apache/logging/log4j/log4j2/master/log4j-core/NON-EXISTING-PATH/this
> file does not exist.xml
>
> new uri:
> file:/Users/rgoers/projects/apache/logging/log4j/log4j2/master/log4j-core/target/test-classes/log4j+config+with+plus+characters.xml
>
> FileName:
> /Users/rgoers/projects/apache/logging/log4j/log4j2/master/log4j-core/target/test-classes/log4j+config+with+plus+characters.xml
>
> Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.014 sec
> - in org.apache.logging.log4j.core.util.FileUtilsTest
>
> and the output from Jenkins:
>
> Running org.apache.logging.log4j.core.util.FileUtilsTest
> new uri:
> file:/home/jenkins/jenkins-slave/workspace/Log4j%202.x/log4j-core/NON-EXISTING-PATH/this+file+does+not+exist.xml
> Decoded fileName: /home/jenkins/jenkins-slave/workspace/Log4j
> 2.x/log4j-core/NON-EXISTING-PATH/this file does not exist.xml
> new uri:
> file:/home/jenkins/jenkins-slave/workspace/Log4j%202.x/log4j-core/target/test-classes/log4j+config+with+plus+characters.xml
> Decoded fileName: /home/jenkins/jenkins-slave/workspace/Log4j
> 2.x/log4j-core/target/test-classes/log4j config with plus characters.xml
> Tests run: 5, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.038 sec <<<
> FAILURE! - in org.apache.logging.log4j.core.util.FileUtilsTest
> testFileFromUriWithPlusCharactersInName(org.apache.logging.log4j.core.util.FileUtilsTest)
> Time elapsed: 0.008 sec <<< FAILURE!
> org.junit.ComparisonFailure:
> expected:<log4j[+config+with+plus+]characters.xml> but was:<log4j[ config
> with plus ]characters.xml>
> at org.junit.Assert.assertEquals(Assert.java:115)
> at org.junit.Assert.assertEquals(Assert.java:144)
> at
> org.apache.logging.log4j.core.util.FileUtilsTest.testFileFromUriWithPlusCharactersInName(FileUtilsTest.java:44)
>
>
> Ralph
>
> On May 3, 2015, at 10:56 AM, Gary Gregory <[email protected]> wrote:
>
> I've added more asserts
> to
> org.apache.logging.log4j.core.util.FileUtilsTest.testFileExistsWithPlusCharactersInName().
>
> It all works for me on Oracle Java 6 and 7 (all 64 bit) on Windows.
>
> Must some Linux vs Windows thing?
>
> Gary
>
> On Sun, May 3, 2015 at 1:59 AM, Gary Gregory <[email protected]>
> wrote:
>
>> I added this test to help
>> debug:
>> org.apache.logging.log4j.core.util.FileUtilsTest.testFileExistsWithPlusCharactersInName()
>>
>> Going to bed now... 2am :-( Sorry I cannot help more ATM.
>>
>> Gary
>>
>> On Sun, May 3, 2015 at 12:13 AM, Ralph Goers <[email protected]>
>> wrote:
>>
>>> I modified the configuration to use Java 7. These are the results.
>>>
>>> Ralph
>>>
>>> > On May 3, 2015, at 12:11 AM, Apache Jenkins Server <
>>> [email protected]> wrote:
>>> >
>>> > See <https://builds.apache.org/job/Log4j%202.x/changes>
>>> >
>>> >
>>> > ---------------------------------------------------------------------
>>> > To unsubscribe, e-mail: [email protected]
>>> > For additional commands, e-mail: [email protected]
>>> >
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [email protected]
>>> For additional commands, e-mail: [email protected]
>>>
>>>
>>
>>
>> --
>> E-Mail: [email protected] | [email protected]
>> Java Persistence with Hibernate, Second Edition
>> <http://www.manning.com/bauer3/>
>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>> Spring Batch in Action <http://www.manning.com/templier/>
>> Blog: http://garygregory.wordpress.com
>> Home: http://garygregory.com/
>> Tweet! http://twitter.com/GaryGregory
>>
>
>
>
> --
> E-Mail: [email protected] | [email protected]
> Java Persistence with Hibernate, Second Edition
> <http://www.manning.com/bauer3/>
> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
> Spring Batch in Action <http://www.manning.com/templier/>
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory
>
>
>
--
E-Mail: [email protected] | [email protected]
Java Persistence with Hibernate, Second Edition
<http://www.manning.com/bauer3/>
JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
Spring Batch in Action <http://www.manning.com/templier/>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory