You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "Jiading Guo (Jira)" <ji...@apache.org> on 2022/05/14 02:53:00 UTC

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

Jiading Guo created TINKERPOP-2744:
--------------------------------------

             Summary: 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.3, 3.5.2, 3.6.0, 3.5.1, 3.5.0
         Environment: Windows 10
            Reporter: Jiading Guo


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)