Karm / mandrel-integration-tests

Integration tests for GraalVM and its Mandrel distribution. Runs Quarkus, Helidon and Micronaut applications and small targeted reproducers. The focus is solely on native-image utility and compilation of Java applications into native executables.
Apache License 2.0
5 stars 3 forks source link

[23.1] imageioAWTTest integration test fails with experimental warning #186

Closed jerboaa closed 10 months ago

jerboaa commented 10 months ago

It fails with:

imageioAWTTest{TestInfo}  Time elapsed: 55.132 s  <<< FAILURE!
org.opentest4j.AssertionFailedError:
build-and-run.log log should not contain error or warning lines that are not whitelisted. See /disk/graal/upstream-sources/mandrel-integration-tests/testsuite/target/archived-logs/org.graalvm.tests.integration.AppReproducersTest/imageioAWTTest/build-and-run.log and check these offending lines:
Warning: The option '-H:IncludeResources=Grace_M._Hopper.jp2,MyFreeMono.ttf,MyFreeSerif.ttf' is experimental and must be enabled via '-H:+UnlockExperimentalVMOptions' in the future.
Warning: Please re-evaluate whether any experimental option is required, and either remove or unlock it. The build output lists all active experimental options, including where they come from and possible alternatives. If you think an experimental option should be considered as stable, please file an issue. ==> expected: <true> but was: <false>
        at org.graalvm.tests.integration.AppReproducersTest.imageioAWT(AppReproducersTest.java:643)
        at org.graalvm.tests.integration.AppReproducersTest.imageioAWTTest(AppReproducersTest.java:498)
jerboaa commented 10 months ago

Related #184

jerboaa commented 10 months ago

As per https://github.com/oracle/graal/issues/7354 -H:IncludeResources shouldn't be used. See https://github.com/oracle/graal/issues/7354#issuecomment-1707965060 for a replacement.

jerboaa commented 10 months ago

Reproducer:

export JAVA_HOME=/path/to/mandrel
export GRAALVM_HOME=$JAVA_HOME
export PATH=$JAVA_HOME/bin:$PATH
mvn clean verify -Dquarkus.version=999-SNAPSHOT -Ptestsuite -Dtest=AppReproducersTest#imageioAWTTest
jerboaa commented 10 months ago

Interestingly, the extra resources config is being generated by the agent run the test already does:

java -agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image -jar target/imageio.jar

That generates the appropriate resource-config.json that is then being picked up by the native-image build. So we don't need -H:IncludeResources at all with GraalVM 22.3+.

For example:

Apply jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/jni-config.json
Apply jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/reflect-config.json
Apply jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/resource-config.json
Apply jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/proxy-config.json
Apply jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/serialization-config.json
Apply jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/predefined-classes-config.json
Apply jar:file:///disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/svm/library-support.jar!/META-INF/native-image/com.oracle.svm/thirdparty/native-image.properties
Executing [
/disk/graal/builds/mandrel-java17-22.3.2.0-Final/bin/java \
-XX:+UseParallelGC \
-XX:+UnlockExperimentalVMOptions \
-XX:+EnableJVMCI \
-Dtruffle.TrustAllTruffleRuntimeProviders=true \
-Dtruffle.TruffleRuntime=com.oracle.truffle.api.impl.DefaultTruffleRuntime \
-Dgraalvm.ForcePolyglotInvalid=true \
-Dgraalvm.locatorDisabled=true \
-Dsubstratevm.IgnoreGraalVersionCheck=true \
--add-exports=java.base/com.sun.crypto.provider=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.access.foreign=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.event=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.loader=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.logger=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.misc=org.graalvm.nativeimage.builder,org.graalvm.nativeimage.objectfile,org.graalvm.nativeimage.pointsto \
--add-exports=java.base/jdk.internal.module=jdk.internal.vm.compiler,org.graalvm.nativeimage.base,org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.org.objectweb.asm=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.perf=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.platform=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.ref=org.graalvm.nativeimage.builder,org.graalvm.nativeimage.objectfile \
--add-exports=java.base/jdk.internal.reflect=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.util=org.graalvm.nativeimage.builder \
--add-exports=java.base/jdk.internal.vm.annotation=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.invoke.util=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.net=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.nio.ch=org.graalvm.nativeimage.builder,org.graalvm.nativeimage.objectfile \
--add-exports=java.base/sun.reflect.annotation=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.reflect.generics.factory=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.reflect.generics.reflectiveObjects=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.reflect.generics.repository=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.reflect.generics.scope=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.reflect.generics.tree=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.security.jca=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.security.provider=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.security.ssl=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.security.util=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.security.x509=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.text.spi=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.util.calendar=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.util.cldr=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.util.locale.provider=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.util.locale=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.util.resources=org.graalvm.nativeimage.builder \
--add-exports=java.base/sun.util=org.graalvm.nativeimage.builder \
--add-exports=java.desktop/sun.java2d.pipe=org.graalvm.nativeimage.builder \
--add-exports=java.desktop/sun.java2d=org.graalvm.nativeimage.builder \
--add-exports=java.management/com.sun.jmx.mbeanserver=org.graalvm.nativeimage.builder \
--add-exports=java.management/sun.management=org.graalvm.nativeimage.builder,org.graalvm.nativeimage.pointsto \
--add-exports=java.xml.crypto/org.jcp.xml.dsig.internal.dom=org.graalvm.nativeimage.builder \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.aarch64=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder,org.graalvm.nativeimage.objectfile \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.amd64=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder,org.graalvm.nativeimage.objectfile \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.code.site=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.code.stack=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.code=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder,org.graalvm.nativeimage.objectfile,org.graalvm.nativeimage.pointsto \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.common=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder,org.graalvm.nativeimage.pointsto \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.aarch64=jdk.internal.vm.compiler \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.amd64=jdk.internal.vm.compiler \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.meta=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder,org.graalvm.nativeimage.objectfile,org.graalvm.nativeimage.pointsto \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.runtime=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder,org.graalvm.nativeimage.pointsto \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.services=jdk.internal.vm.compiler,org.graalvm.nativeimage.builder \
--add-exports=jdk.jfr/jdk.jfr.events=org.graalvm.nativeimage.builder \
--add-exports=jdk.jfr/jdk.jfr.internal.handlers=org.graalvm.nativeimage.builder \
--add-exports=jdk.jfr/jdk.jfr.internal.jfc=org.graalvm.nativeimage.builder \
--add-exports=jdk.jfr/jdk.jfr.internal=org.graalvm.nativeimage.builder \
--add-exports=jdk.management/com.sun.management.internal=org.graalvm.nativeimage.builder \
-XX:-UseJVMCICompiler \
-Xss10m \
-Xms1g \
-Xmx14g \
-Djava.awt.headless=true \
-Dorg.graalvm.version=22.3.2.0-Final \
'-Dorg.graalvm.config=Mandrel Distribution' \
-Dcom.oracle.graalvm.isaot=true \
-Djava.system.class.loader=com.oracle.svm.hosted.NativeImageSystemClassLoader \
-Xshare:off \
--upgrade-module-path \
/disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/jvmci/graal.jar \
-Djdk.internal.lambda.disableEagerInitialization=true \
-Djdk.internal.lambda.eagerlyInitialize=false \
-Djava.lang.invoke.InnerClassLambdaMetafactory.initializeLambdas=false \
--add-exports=jdk.internal.vm.ci/jdk.vm.ci.code=jdk.internal.vm.compiler \
--add-modules=ALL-DEFAULT \
--module-path \
/disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/jvmci/graal-sdk.jar:/disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/svm/builder/native-image-base.jar:/disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/svm/builder/pointsto.jar:/disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/svm/builder/objectfile.jar:/disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/svm/builder/svm.jar \
--module \
org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner \
-imagecp \
/disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar \
-imagemp \
/disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/svm/library-support.jar \
-H:CLibraryPath=/disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/svm/clibraries/linux-amd64 \
-H:Path=/disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio \
-H:FallbackThreshold=0 \
-H:Log=registerResource:3 \
'-H:Class@manifest from file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar=imageio.Main' \
'-H:Name@manifest from file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar=imageio' \
'-H:JNIConfigurationResources@jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/jni-config.json=META-INF/native-image/jni-config.json' \
'-H:ReflectionConfigurationResources@jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/reflect-config.json=META-INF/native-image/reflect-config.json' \
'-H:ResourceConfigurationResources@jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/resource-config.json=META-INF/native-image/resource-config.json' \
'-H:DynamicProxyConfigurationResources@jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/proxy-config.json=META-INF/native-image/proxy-config.json' \
'-H:SerializationConfigurationResources@jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/serialization-config.json=META-INF/native-image/serialization-config.json' \
'-H:PredefinedClassesConfigurationResources@jar:file:///disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.jar!/META-INF/native-image/predefined-classes-config.json=META-INF/native-image/predefined-classes-config.json' \
'-H:Name@explicit image name=target/imageio' \
'-H:Features@jar:file:///disk/graal/builds/mandrel-java17-22.3.2.0-Final/lib/svm/library-support.jar!/META-INF/native-image/com.oracle.svm/thirdparty/native-image.properties=com.oracle.svm.thirdparty.gson.GsonFeature'
]
========================================================================================================================
GraalVM Native Image: Generating 'target/imageio' (executable)...
========================================================================================================================
[1/7] Initializing...                                                                                    (2.8s @ 0.21GB)
 Version info: 'GraalVM 22.3.2.0-Final Java 17 Mandrel Distribution'
 Java version info: '17.0.7+7'
 C compiler: gcc (redhat, x86_64, 12.3.1)
 Garbage collector: Serial GC
[Use -Dgraal.LogFile=<path> to redirect Graal log output to a file.]
[thread:1] scope: main
  [thread:1] scope: main.registerResource
  ResourcesFeature: registerResource: java.desktop:sun/java2d/cmm/profiles/CIEXYZ.pf
  [thread:1] scope: main.registerResource
  ResourcesFeature: registerResource: java.desktop:sun/java2d/cmm/profiles/GRAY.pf
  [thread:1] scope: main.registerResource
  ResourcesFeature: registerResource: java.desktop:sun/java2d/cmm/profiles/LINEAR_RGB.pf
  [thread:1] scope: main.registerResource
  ResourcesFeature: registerResource: java.desktop:sun/java2d/cmm/profiles/PYCC.pf
  [thread:1] scope: main.registerResource
  ResourcesFeature: registerResource: java.desktop:sun/java2d/cmm/profiles/sRGB.pf
  [thread:1] scope: main.registerResource
  ResourcesFeature: registerResource: MyFreeMono.ttf
  [thread:1] scope: main.registerResource
  ResourcesFeature: registerResource: Grace_M._Hopper.jp2
  [thread:1] scope: main.registerResource
  ResourcesFeature: registerResource: MyFreeSerif.ttf
  [thread:1] scope: main.registerResource
  ServiceLoaderFeature: registerResource: META-INF/services/java.nio.file.spi.FileSystemProvider
  [thread:1] scope: main.registerResource
  ServiceLoaderFeature: registerResource: META-INF/services/sun.util.resources.LocaleData$CommonResourceBundleProvider
  [thread:1] scope: main.registerResource
  ServiceLoaderFeature: registerResource: META-INF/services/jdk.internal.logger.DefaultLoggerFinder
  [thread:1] scope: main.registerResource
  ServiceLoaderFeature: registerResource: META-INF/services/sun.util.resources.LocaleData$SupplementaryResourceBundleProvider
  [thread:1] scope: main.registerResource
  Resources have been added by ServiceLoaderFeature. Automatic registration can be disabled with -H:-UseServiceLoaderFeature
  [thread:1] scope: main.registerResource
  ResourcesFeature: registerResource: java.base:java/lang/uniName.dat
[2/7] Performing analysis...  [******]                                                                  (14.8s @ 2.39GB)
   4,787 (77.72%) of  6,159 classes reachable
   8,122 (59.10%) of 13,742 fields reachable
  22,489 (49.07%) of 45,833 methods reachable
     176 classes,     2 fields, and   601 methods registered for reflection
     140 classes,   222 fields, and   128 methods registered for JNI access
       7 native libraries: dl, freetype, m, pthread, rt, stdc++, z
[3/7] Building universe...                                                                               (2.6s @ 3.60GB)
[4/7] Parsing methods...      [*]                                                                        (1.7s @ 2.00GB)
[5/7] Inlining methods...     [***]                                                                      (0.8s @ 3.21GB)
[6/7] Compiling methods...    [****]                                                                    (12.0s @ 3.33GB)
[7/7] Creating image...                                                                                  (2.5s @ 4.19GB)
  10.28MB (40.32%) for code area:    13,933 compilation units
  12.66MB (49.64%) for image heap:  149,535 objects and 13 resources
   2.56MB (10.04%) for other data
  25.50MB in total
------------------------------------------------------------------------------------------------------------------------
Top 10 packages in code area:                               Top 10 object types in image heap:
 782.57KB java.util                                            2.13MB byte[] for code metadata
 760.44KB sun.font                                             1.44MB java.lang.String
 461.84KB com.sun.imageio.plugins.tiff                         1.41MB byte[] for embedded resources
 407.47KB com.sun.crypto.provider                              1.17MB byte[] for general heap data
 389.59KB java.awt.image                                       1.05MB java.lang.Class
 362.51KB java.lang                                          895.73KB byte[] for java.lang.String
 334.04KB com.sun.imageio.plugins.jpeg                       480.19KB java.util.HashMap$Node
 321.23KB sun.java2d.marlin                                  373.98KB com.oracle.svm.core.hub.DynamicHubCompanion
 279.66KB java.text                                          268.50KB java.lang.String[]
 277.27KB com.sun.imageio.plugins.png                        265.59KB java.util.concurrent.ConcurrentHashMap$Node
   5.91MB for 175 more packages                                2.29MB for 983 more object types
------------------------------------------------------------------------------------------------------------------------
                        0.6s (1.5% of total time) in 21 GCs | Peak RSS: 5.39GB | CPU load: 8.92
------------------------------------------------------------------------------------------------------------------------
Produced artifacts:
 /disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio (executable)
 /disk/graal/upstream-sources/mandrel-integration-tests/apps/imageio/target/imageio.build_artifacts.txt (txt)
========================================================================================================================
Finished generating 'target/imageio' in 39.9s.