You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "Martin Häusler (JIRA)" <ji...@apache.org> on 2015/12/15 11:28:46 UTC

[jira] [Comment Edited] (TINKERPOP-1041) StructureStandardTestSuite has file I/O issues on Windows

    [ https://issues.apache.org/jira/browse/TINKERPOP-1041?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15057806#comment-15057806 ] 

Martin Häusler edited comment on TINKERPOP-1041 at 12/15/15 10:28 AM:
----------------------------------------------------------------------

I've localized the error in {{TestHelper.java}}, in the method "computePath":

{code}
private static String computePath(final Class clazz) {
    final String clsUri = clazz.getName().replace('.', '/') + ".class";
    final URL url = clazz.getClassLoader().getResource(clsUri);
    final String clsPath = url.getPath();
    return clsPath.substring(0, clsPath.length() - clsUri.length());
}
{code}

The problem is that {{url.getPath()}} still contains the protocol (in this case {{file:/}}). This is then used as input later into {{new File(...)}}, and some concatenation operations. Windows apparently isn't able to decode that. I'm actually surprised that this works under linux. The solution should be to simply strip the protocol part from "clsPath".

I will try to checkout the repository and provide a commit request later this week (or early next week).


was (Author: martin_haeusler):
I've localized the error in TestHelper.java, in the method "computePath":

{code}
private static String computePath(final Class clazz) {
    final String clsUri = clazz.getName().replace('.', '/') + ".class";
    final URL url = clazz.getClassLoader().getResource(clsUri);
    final String clsPath = url.getPath();
    return clsPath.substring(0, clsPath.length() - clsUri.length());
}
{code}

The problem is that {{url.getPath()}} still contains the protocol (in this case {{file:/}}). This is then used as input later into {{new File(...)}}, and some concatenation operations. Windows apparently isn't able to decode that. I'm actually surprised that this works under linux. The solution should be to simply strip the protocol part from "clsPath".

> StructureStandardTestSuite has file I/O issues on Windows
> ---------------------------------------------------------
>
>                 Key: TINKERPOP-1041
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1041
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: test-suite
>    Affects Versions: 3.0.2-incubating
>         Environment: Windows 10, Java 8, TinkerPop version "3.0.2-incubating"
>            Reporter: Martin Häusler
>             Fix For: 3.1.1-incubating
>
>   Original Estimate: 3h
>  Remaining Estimate: 3h
>
> Most of the tests in StructureStandardTestSuite/IoGraphTest cause an unexpected java.io.IOException. The stack trace looks like this:
> {panel:title=Stack Trace}
> java.io.IOException: The the file name, directory name or volume label syntax is incorrect.
> 	at java.io.WinNTFileSystem.createFileExclusively(Native Method)
> 	at java.io.File.createTempFile(Unknown Source)
> 	at org.apache.tinkerpop.gremlin.TestHelper.generateTempFile(TestHelper.java:74)
> 	at org.apache.tinkerpop.gremlin.structure.io.IoGraphTest.shouldReadWriteModernToFileWithHelpers(IoGraphTest.java:164)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> 	at java.lang.reflect.Method.invoke(Unknown Source)
> {panel}
> I'm running the test suite from Eclipse under Java 8, on a Windows 10 x64 machine. The dependencies in my project are managed with gradle. Investigating the offinsive line (org.apache.tinkerpop.gremlin.TestHelper.java@74) in the debugger reveals the following parameters of "File.createTempFile(...)":
> {noformat}
> fileName = "shouldReadWriteModernToFileWithHelpers[graphml]"
> fileNameSuffix = ".xml"
> path = "file:\D:\guh\caches\modules-2\files-2.1\org.apache.tinkerpop\gremlin-test\3.0.2-incubating\345ec87b74923b76374111f2e4040d4d105f256\temp"
> {noformat}
> The offensive part is the "path" variable, because it contains the prefix "file:\". I tried the same thing in a dedicated JUnit test without the prefix and it works fine.
> I would be very happy to see this issue fixed, as this considerably reduces the amount of tests in the suite that I can run against my graph implementation.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)