Skip to content

Commit e7f49cc

Browse files
committed
[GR-58523] Improve and refactor test_standalone - split gates.
PullRequest: graalpython/3558
2 parents 8f603da + e087803 commit e7f49cc

File tree

2 files changed

+114
-16
lines changed

2 files changed

+114
-16
lines changed

ci.jsonnet

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{ "overlay": "95c740e3e3b11c3f64a88005aa64e46e46e7caec" }
1+
{ "overlay": "4b12b552845acf0e50bdebdebf46df25aaf93a6d" }

mx.graalpython/mx_graalpython.py

Lines changed: 113 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,8 @@ class GraalPythonTags(object):
680680
unittest_hpy_sandboxed = 'python-unittest-hpy-sandboxed'
681681
unittest_posix = 'python-unittest-posix'
682682
unittest_standalone = 'python-unittest-standalone'
683+
unittest_gradle_plugin = 'python-unittest-gradle-plugin'
684+
unittest_maven_plugin = 'python-unittest-maven-plugin'
683685
ginstall = 'python-ginstall'
684686
tagged = 'python-tagged-unittest'
685687
svmunit = 'python-svm-unittest'
@@ -764,7 +766,7 @@ def graalpy_standalone_home(standalone_type, enterprise=False, dev=False, build=
764766
python_home = os.path.abspath(glob.glob(python_home)[0])
765767
mx.log("Using GraalPy standalone from GRAALPY_HOME: " + python_home)
766768
# Try to verify that we're getting what we expect:
767-
has_java = os.path.exists(os.path.join(python_home, 'jvm', 'bin', 'java'))
769+
has_java = os.path.exists(os.path.join(python_home, 'jvm', 'bin', 'java.exe' if WIN32 else 'java'))
768770
if has_java != (standalone_type == 'jvm'):
769771
mx.abort(f"GRAALPY_HOME is not compatible with the requested distribution type.\n"
770772
f"jvm/bin/java exists?: {has_java}, requested type={standalone_type}.")
@@ -855,6 +857,48 @@ def graalpy_standalone_native_enterprise():
855857

856858

857859
def graalvm_jdk():
860+
jdk_version = mx.get_jdk().version
861+
862+
# Check if GRAAL_JDK_HOME points to some compatible pre-built gvm
863+
graal_jdk_home = os.environ.get("GRAAL_JDK_HOME", None)
864+
if graal_jdk_home and "*" in graal_jdk_home:
865+
graal_jdk_home = os.path.abspath(glob.glob(graal_jdk_home)[0])
866+
if sys.platform == "darwin":
867+
graal_jdk_home = os.path.join(graal_jdk_home, 'Contents', 'Home')
868+
mx.log("Using GraalPy standalone from GRAAL_JDK_HOME: " + graal_jdk_home)
869+
870+
# Try to verify that we're getting what we expect:
871+
has_java = os.path.exists(os.path.join(graal_jdk_home, 'bin', 'java.exe' if WIN32 else 'java'))
872+
if not has_java:
873+
mx.abort(f"GRAAL_JDK_HOME does not contain java executable.")
874+
875+
release = os.path.join(graal_jdk_home, 'release')
876+
if not os.path.exists(release):
877+
mx.abort(f"No 'release' file in GRAAL_JDK_HOME.")
878+
879+
java_version = None
880+
implementor = None
881+
with open(release, 'r') as f:
882+
while not (java_version and implementor):
883+
line = f.readline()
884+
if 'JAVA_VERSION=' in line:
885+
java_version = line
886+
if 'IMPLEMENTOR=' in line:
887+
implementor = line
888+
889+
if not java_version:
890+
mx.abort(f"Could not check Java version in GRAAL_JDK_HOME 'release' file.")
891+
actual_jdk_version = mx.VersionSpec(java_version.strip('JAVA_VERSION=').strip(' "\n\r'))
892+
if actual_jdk_version != jdk_version:
893+
mx.abort(f"GRAAL_JDK_HOME is not compatible with the requested JDK version.\n"
894+
f"actual version: '{actual_jdk_version}', version string: {java_version}, requested version: {jdk_version}.")
895+
896+
if not implementor:
897+
mx.abort(f"Could not check implementor in GRAAL_JDK_HOME 'release' file.")
898+
if 'GraalVM' not in implementor:
899+
mx.abort(f"GRAAL_JDK_HOME 'releases' has an unexpected implementor: '{implementor}'.")
900+
return graal_jdk_home
901+
858902
jdk_major_version = mx.get_jdk().version.parts[0]
859903
mx_args = ['-p', os.path.join(mx.suite('truffle').dir, '..', 'vm'), '--env', 'ce']
860904
if not DISABLE_REBUILD:
@@ -1379,12 +1423,7 @@ def graalpython_gate_runner(args, tasks):
13791423
standalone_home = graalpy_standalone_home('jvm')
13801424
mvn_repo_path, version, env = deploy_local_maven_repo()
13811425

1382-
# in order to run gradle we need a jdk <= 22
1383-
env['GRADLE_JAVA_HOME'] = env.get('JAVA_HOME')
1384-
13851426
env['ENABLE_STANDALONE_UNITTESTS'] = 'true'
1386-
env['ENABLE_GRADLE_PLUGIN_UNITTESTS'] = 'true'
1387-
env['ENABLE_MAVEN_PLUGIN_UNITTESTS'] = 'true'
13881427
env['ENABLE_JBANG_INTEGRATION_UNITTESTS'] ='true'
13891428
env['JAVA_HOME'] = gvm_jdk
13901429
env['PYTHON_STANDALONE_HOME'] = standalone_home
@@ -1395,14 +1434,6 @@ def graalpython_gate_runner(args, tasks):
13951434
mx_urlrewrites.rewriteurl('https://repo1.maven.org/maven2/'),
13961435
])
13971436

1398-
urls = get_wrapper_urls("graalpython/com.oracle.graal.python.test/src/tests/standalone/mvnw/.mvn/wrapper/maven-wrapper.properties", ["distributionUrl"])
1399-
if "distributionUrl" in urls:
1400-
env["MAVEN_DISTRIBUTION_URL_OVERRIDE"] = mx_urlrewrites.rewriteurl(urls["distributionUrl"])
1401-
1402-
urls = get_wrapper_urls("graalpython/com.oracle.graal.python.test/src/tests/standalone/gradle/gradle-test-project/gradle/wrapper/gradle-wrapper.properties", ["distributionUrl"])
1403-
if "distributionUrl" in urls:
1404-
env["GRADLE_DISTRIBUTION_URL_OVERRIDE"] = mx_urlrewrites.rewriteurl(urls["distributionUrl"])
1405-
14061437
env["org.graalvm.maven.downloader.version"] = version
14071438
env["org.graalvm.maven.downloader.repository"] = f"{pathlib.Path(mvn_repo_path).as_uri()}/"
14081439

@@ -1416,7 +1447,74 @@ def graalpython_gate_runner(args, tasks):
14161447
mx.logv(f"running with os.environ extended with: {env=}")
14171448
run_python_unittests(
14181449
os.path.join(standalone_home, 'bin', _graalpy_launcher()),
1419-
paths=["graalpython/com.oracle.graal.python.test/src/tests/standalone"],
1450+
paths=["graalpython/com.oracle.graal.python.test/src/tests/standalone/test_jbang_integration.py",
1451+
"graalpython/com.oracle.graal.python.test/src/tests/standalone/test_standalone.py"],
1452+
env=env,
1453+
parallel=3,
1454+
)
1455+
1456+
with Task('GraalPython gradle plugin tests', tasks, tags=[GraalPythonTags.unittest_gradle_plugin]) as task:
1457+
if task:
1458+
gvm_jdk = graalvm_jdk()
1459+
standalone_home = graalpy_standalone_home('jvm')
1460+
mvn_repo_path, version, env = deploy_local_maven_repo()
1461+
1462+
env['ENABLE_GRADLE_PLUGIN_UNITTESTS'] = 'true'
1463+
env['JAVA_HOME'] = gvm_jdk
1464+
env['PYTHON_STANDALONE_HOME'] = standalone_home
1465+
1466+
# setup maven downloader overrides
1467+
env['MAVEN_REPO_OVERRIDE'] = ",".join([
1468+
f"{pathlib.Path(mvn_repo_path).as_uri()}/",
1469+
mx_urlrewrites.rewriteurl('https://repo1.maven.org/maven2/'),
1470+
])
1471+
1472+
urls = get_wrapper_urls("graalpython/com.oracle.graal.python.test/src/tests/standalone/gradle/gradle-test-project/gradle/wrapper/gradle-wrapper.properties", ["distributionUrl"])
1473+
if "distributionUrl" in urls:
1474+
env["GRADLE_DISTRIBUTION_URL_OVERRIDE"] = mx_urlrewrites.rewriteurl(urls["distributionUrl"])
1475+
1476+
env["org.graalvm.maven.downloader.version"] = version
1477+
env["org.graalvm.maven.downloader.repository"] = f"{pathlib.Path(mvn_repo_path).as_uri()}/"
1478+
1479+
# run the test
1480+
mx.logv(f"running with os.environ extended with: {env=}")
1481+
1482+
run_python_unittests(
1483+
os.path.join(standalone_home, 'bin', _graalpy_launcher()),
1484+
paths=["graalpython/com.oracle.graal.python.test/src/tests/standalone/test_gradle_plugin.py"],
1485+
env=env,
1486+
parallel=3,
1487+
)
1488+
1489+
with Task('GraalPython maven plugin tests', tasks, tags=[GraalPythonTags.unittest_maven_plugin]) as task:
1490+
if task:
1491+
gvm_jdk = graalvm_jdk()
1492+
standalone_home = graalpy_standalone_home('jvm')
1493+
mvn_repo_path, version, env = deploy_local_maven_repo()
1494+
1495+
env['ENABLE_MAVEN_PLUGIN_UNITTESTS'] = 'true'
1496+
env['JAVA_HOME'] = gvm_jdk
1497+
env['PYTHON_STANDALONE_HOME'] = standalone_home
1498+
1499+
# setup maven downloader overrides
1500+
env['MAVEN_REPO_OVERRIDE'] = ",".join([
1501+
f"{pathlib.Path(mvn_repo_path).as_uri()}/",
1502+
mx_urlrewrites.rewriteurl('https://repo1.maven.org/maven2/'),
1503+
])
1504+
1505+
urls = get_wrapper_urls("graalpython/com.oracle.graal.python.test/src/tests/standalone/mvnw/.mvn/wrapper/maven-wrapper.properties", ["distributionUrl"])
1506+
if "distributionUrl" in urls:
1507+
env["MAVEN_DISTRIBUTION_URL_OVERRIDE"] = mx_urlrewrites.rewriteurl(urls["distributionUrl"])
1508+
1509+
env["org.graalvm.maven.downloader.version"] = version
1510+
env["org.graalvm.maven.downloader.repository"] = f"{pathlib.Path(mvn_repo_path).as_uri()}/"
1511+
1512+
# run the test
1513+
mx.logv(f"running with os.environ extended with: {env=}")
1514+
1515+
run_python_unittests(
1516+
os.path.join(standalone_home, 'bin', _graalpy_launcher()),
1517+
paths=["graalpython/com.oracle.graal.python.test/src/tests/standalone/test_maven_plugin.py"],
14201518
env=env,
14211519
parallel=3,
14221520
)

0 commit comments

Comments
 (0)