You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "Alexey Temnikov (Jira)" <ji...@apache.org> on 2022/06/16 01:06:00 UTC

[jira] [Commented] (TINKERPOP-2744) TestSupport:::getRootOfBuildDirectory is broken on Windows

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

Alexey Temnikov commented on TINKERPOP-2744:
--------------------------------------------

Hi [~zingdle], thank you for suggesting the fix. Please feel free to submit a PR and we will help to support it.

[~zingdle], could you please also clarify how you execute tests on Windows? Are you running all tests using maven or trying to execute individual tests from IDE? If you can share steps to reproduce, that will be helpful. We implemented several improvements specifically around Windows build; however, we haven't seen the same error when building a project using mvn command. 

> TestSupport:::getRootOfBuildDirectory is broken on Windows
> ----------------------------------------------------------
>
>                 Key: TINKERPOP-2744
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2744
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: test-suite
>    Affects Versions: 3.5.0, 3.5.1, 3.6.0, 3.5.2, 3.5.3
>         Environment: Windows 10
>            Reporter: Jiading Guo
>            Priority: Blocker
>
> Inital discussion is in mailing list [1], I propose the solution but only reply to Simon accidentally. I'll post it here since Jira seems to be the palce for bug and fix.
>  
> When calling `TestSupport:::generateTempFile`, the code goes to `TestSupport.java:L122`:
>  
> ```
> final String clsUri = clazz.getName().replace(".", "/") + ".class";
> final URL url = clazz.getClassLoader().getResource(clsUri);
> final String clsPath = url.getPath();
> final String computePath = clsPath.substring(0, clsPath.length() - clsUri.length());
> ```
>  
> on Windows the `clsPath` is something like:
>  
> `file:/C:/Users/user/.m2/repository/org/apache/tinkerpop/gremlin-test/3.5.4-SNAPSHOT/gremlin-test-3.5.4-SNAPSHOT.jar!/org/apache/tinkerpop/gremlin/process/traversal/step/map/WriteTest.class`
>  
> and it then failed on `File.createTempFile(fileName, fileNameSuffix, path)` with
>  
> `java.io.IOException: The filename, directory name, or volume label syntax is incorrect`
>  
> In Linux this works fine as `clsPath` is resolved to:
>  
> `file:/home/user/.m2/repository/org/apache/tinkerpop/gremlin-test/3.5.4-SNAPSHOT/gremlin-test-3.5.4-SNAPSHOT.jar!/org/apache/tinkerpop/gremlin/process/traversal/step/map/WriteTest.class`
>  
> After some searching[2], maybe we could use URI or use substring like this?
> ```
> // getRootOfBuildDirectory
> final String clsUri = clazz.getName().replace(".", "/") + ".class";
> final URL url = clazz.getClassLoader().getResource(clsUri);
> final String FILE_PREFIX = "file:";
> final String clsPath = url.getPath().substring(FILE_PREFIX.length());
> final String computePath = clsPath.substring(0, clsPath.length() -
> clsUri.length());
> ```
> The code worked on both Linux and Windows in my test. If needed I
> could submit a PR.
>  
> [1] [https://lists.apache.org/thread/lny64h5yjfoongwm1gtsydwc9pcvk6xj]
> [2] [https://stackoverflow.com/questions/45782535/classloader-getresource-returns-odd-path-maybe]



--
This message was sent by Atlassian Jira
(v8.20.7#820007)