Details
Description
Found two test (TestContainerMapping and TestBlockManager) ran failed in Windows caused by invalid test path generated. The stack info of one failed test:
java.nio.file.InvalidPathException: Illegal char <:> at index 4: file:/D:/Users/yiqun01.lin/.m2/repository/org/apache/hadoop/hadoop-common/3.0.0-alpha3-SNAPSHOT/hadoop-common-3.0.0-alpha3-SNAPSHOT.jar!/org/apache/hadoop/conf/TestContainerMapping at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182) at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153) at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77) at sun.nio.fs.WindowsPath.parse(WindowsPath.java:94) at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:255) at java.nio.file.Paths.get(Paths.java:84) at org.apache.hadoop.ozone.scm.block.TestBlockManager.setUp(TestBlockManager.java:68)
The similar issue HDFS-11619.
The related codes:
URL p = conf.getClass().getResource(""); String path = p.getPath().concat(...));
We would be better not to use the this way to get a test path since it will get a incorrect path when the OS env is Windows. Although sometimes the wrong path can be corrected by normalize method in File class. But in some other cases, example in Paths.get(path).toFile(), the wrong path will lead the failure.
Actually in COMMON, it has already provided some utility methods to help us get the valid test file/path in unit testing. We could use this to replace the old way.