Skip to content

Commit

Permalink
Perform differnet checks in tests based on jdk version
Browse files Browse the repository at this point in the history
  • Loading branch information
dnestoro committed Aug 13, 2024
1 parent 7bb291c commit e5d055a
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,33 @@
package org.graalvm.buildtools.gradle

import org.graalvm.buildtools.gradle.fixtures.AbstractFunctionalTest
import org.graalvm.buildtools.gradle.fixtures.GraalVMSupport
import org.graalvm.buildtools.utils.NativeImageUtils
import spock.lang.Unroll

class JavaApplicationWithAgentFunctionalTest extends AbstractFunctionalTest {

def getCurrentJDKVersion() {
return NativeImageUtils.getMajorJDKVersion(GraalVMSupport.getGraalVMHomeVersionString())
}

def metadataInSingleConfigFile() {
return getCurrentJDKVersion() >= 23
}

def metadataExistsAt(String path) {
file("${path}/reachability-metadata.json").exists()
if (metadataInSingleConfigFile()) {
return file("${path}/reachability-metadata.json").exists()
}

boolean allFilesExist = true
['jni', 'proxy', 'reflect', 'resource', 'serialization'].each { name ->
if (!file("${path}/${name}-config.json").exists()) {
allFilesExist = false
}
}

return allFilesExist
}

@Unroll("agent is not passed and the application fails with JUnit Platform #junitVersion")
Expand Down Expand Up @@ -124,7 +145,11 @@ class JavaApplicationWithAgentFunctionalTest extends AbstractFunctionalTest {
}

and:
assert file("build/native/agent-output/test/reachability-metadata.json").text.contains("\"condition\"")
if (metadataInSingleConfigFile()) {
assert file("build/native/agent-output/test/reachability-metadata.json").text.contains("\"condition\"")
} else {
assert file("build/native/agent-output/test/reflect-config.json").text.contains("\"condition\"")
}

where:
junitVersion = System.getProperty('versions.junit')
Expand Down Expand Up @@ -156,12 +181,17 @@ class JavaApplicationWithAgentFunctionalTest extends AbstractFunctionalTest {
assert metadataExistsAt(metadata_dir)

and:
var reachabilityMetadata = file("${metadata_dir}/reachability-metadata.json")
var reachabilityMetadataContents = reachabilityMetadata.text
println reachabilityMetadataContents
assert reachabilityMetadataContents.contains("DummyClass"), reachabilityMetadataContents
assert reachabilityMetadataContents.contains("org.graalvm.demo.Message"), reachabilityMetadataContents

if (metadataInSingleConfigFile()) {
var reachabilityMetadata = file("${metadata_dir}/reachability-metadata.json")
var reachabilityMetadataContents = reachabilityMetadata.text
println reachabilityMetadataContents
assert reachabilityMetadataContents.contains("DummyClass"), reachabilityMetadataContents
assert reachabilityMetadataContents.contains("org.graalvm.demo.Message"), reachabilityMetadataContents
} else {
var reflect_config = file("${metadata_dir}/reflect-config.json")
var reflect_config_contents = reflect_config.text
assert reflect_config_contents.contains("DummyClass") && reflect_config_contents.contains("org.graalvm.demo.Message")
}

when:
run 'nativeRun'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@
import org.gradle.jvm.toolchain.JavaToolchainService;

import javax.inject.Inject;
import java.util.Arrays;

public abstract class DefaultGraalVmExtension implements GraalVMExtension {
private final transient NamedDomainObjectContainer<NativeImageOptions> nativeImages;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,26 @@ class GraalVMSupport {
(System.getProperty("java.vendor.version", "") - 'GraalVM' - 'CE' - 'EE').trim()
}

static String getJavaHomeVersionString() {
String javaHomeLocation = System.getenv("JAVA_HOME")
return extractVersionString(javaHomeLocation)
}

static String getGraalVMHomeVersionString() {
String graalvmHomeLocation = System.getenv("GRAALVM_HOME")
return extractVersionString(graalvmHomeLocation)
}

private static String extractVersionString(String location) {
def sout = new StringBuilder(), serr = new StringBuilder()
def proc = (location + '/bin/native-image --version').execute()
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
assert serr.toString().isEmpty()

return sout.toString()
}

static int getMajorVersion() {
String v = version
v.substring(0, v.indexOf('.')).toInteger()
Expand Down

0 comments on commit e5d055a

Please sign in to comment.