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)