RFC: Make test failed because of the locale LANG
Jing Tian
jingtian at loongson.cn
Thu Mar 28 05:22:24 UTC 2019
Hi,
When I am doing the 'make test'.If the local LANG is set as
'zh_CN.UTF-8', Test cases will have a lot of error messages.
==============================
Test summary
==============================
TEST TOTAL PASS FAIL
ERROR
>> jtreg:test/hotspot/jtreg:tier1 1373 1371
2 0 <<
>> jtreg:test/jdk:tier1 1867 1860
7 0 <<
>> jtreg:test/langtools:tier1 3922 2470
1450 2 <<
jtreg:test/nashorn:tier1 0 0 0 0
jtreg:test/jaxp:tier1 0 0 0 0
>> jtreg:test/jdk:tier2 3334 3305
29 0 <<
>> jtreg:test/langtools:tier2 11 9 2 0 <<
jtreg:test/nashorn:tier2 35 35 0 0
>> jtreg:test/jaxp:tier2 438 437
1 0 <<
>> jtreg:test/jdk:tier3 1104 1068
36 0 <<
jtreg:test/langtools:tier3 0 0 0 0
jtreg:test/nashorn:tier3 0 0 0 0
jtreg:test/jaxp:tier3 0 0 0 0
==============================
On the same machine,when i set LANG=en_US.UTF-8.
==============================
Test summary
==============================
TEST TOTAL PASS FAIL
ERROR
>> jtreg:test/hotspot/jtreg:tier1 1388 1386
2 0 <<
>> jtreg:test/jdk:tier1 1867 1843
19 5 <<
jtreg:test/langtools:tier1 3920 3920
0 0
jtreg:test/nashorn:tier1 0 0 0 0
jtreg:test/jaxp:tier1 0 0 0 0
>> jtreg:test/jdk:tier2 3328 3290
31 7 <<
jtreg:test/langtools:tier2 11 11 0 0
jtreg:test/nashorn:tier2 35 35 0 0
jtreg:test/jaxp:tier2 438 438 0 0
>> jtreg:test/jdk:tier3 1104 1067
37 0 <<
jtreg:test/langtools:tier3 0 0 0 0
jtreg:test/nashorn:tier3 0 0 0 0
jtreg:test/jaxp:tier3 0 0 0 0
By comparison we can find, lots of(1000+) langtools tests will get fail,
and other(about 30+, exclude some X11 and sanity that
result problem) test cases will also fail because of local LANG.
such as in the test/hotspot/jtreg/compiler/c2/Test8062950.java,
shouldContain("Error: Could not find or load main class " + CLASSNAME)
When in the zh_CN.UTF-8 environment, because some of the output
information is changed to Chinese by some properties file,
the English cannot be matched, which will result in an fail.
When I set LANG=en_US/LC_ALL=C, this test will pass.
I think there are some possible solutions.
1.we set LC_ALL=C/LANG=EN_us in the Runtests.gmk, but this modification
is more violent because he will affect all test cases.
2.We modify each individual test,E.g
test/hotspot/jtreg/compiler/c2/Test8062950.java
diff -r 0421d49b6217 test/hotspot/jtreg/compiler/c2/Test8062950.java
package compiler.c2;
import jdk.test.lib.process.ProcessTools;
+import java.util.Map;
+import jdk.test.lib.process.OutputAnalyzer;
public class Test8062950 {
private static final String CLASSNAME = "DoesNotExist";
public static void main(String[] args) throws Exception {
- ProcessTools.executeTestJvm("-Xcomp",
- "-XX:-TieredCompilation",
- "-XX:-UseOptoBiasInlining",
- CLASSNAME)
- .shouldHaveExitValue(1)
- .shouldContain("Error: Could not find or load main
class " + CLASSNAME)
- .shouldNotContain("A fatal error has been detected")
- .shouldNotContain("Internal Error")
- .shouldNotContain("HotSpot Virtual Machine Error");
+ final ProcessBuilder pb =
ProcessTools.createJavaProcessBuilder(true,
+ "-Xcomp",
+ "-XX:-TieredCompilation",
+ "-XX:-UseOptoBiasInlining",
+ CLASSNAME);
+ final Map<String, String> env = pb.environment();
+ env.put("LC_ALL", "en_US.UTF-8");
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldHaveExitValue(1);
+ output.shouldContain("Error: Could not find or load main class
" + CLASSNAME);
+ output.shouldNotContain("A fatal error has been detected");
+ output.shouldNotContain("Internal Error");
+ output.shouldNotContain("HotSpot Virtual Machine Error");
}
}
But I don't know if this will change the test program too much, because
the related problems are a lot in langtools tests.
3.And i find that there is a function can judge the locale
if (!isEnglishLocale()) { // only english version
return;
}
But in this case, I think in many test cases, we may not be able to
return so directly, because some test cases may have other test purposes.
So I don't know if you have any ideas or some suggestions to solve the
problem that the output information and English do not match in this
non-English environment.
Cheers,
Jing Tian
More information about the hotspot-dev
mailing list