Skip to content

Commit 7f23603

Browse files
Fix incorrect regex
The previous regex wasn't working for java version 8, because that's reported as e.g. 'openjdk version "1.8.0_412"' and the underscore doesn't match regex pattern '\d+'.
1 parent 1da31db commit 7f23603

1 file changed

Lines changed: 8 additions & 7 deletions

File tree

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import os
22
import re
33
import subprocess
4-
from typing import Optional
54

65
import pytest
76

@@ -11,7 +10,7 @@ def test_java_home_is_set() -> None:
1110
assert java_home is not None, "Environment variable 'JAVA_HOME' is not set but is required by pySpark to work."
1211

1312

14-
def test_java_version_minimum_requirement(expected_major_version:int =11) -> None:
13+
def test_java_version_minimum_requirement(expected_major_version: int = 11) -> None:
1514
version_line = __extract_version_line(__java_version_output())
1615
major_version = __parse_major_version(version_line)
1716
assert major_version >= expected_major_version, (f"Major version {major_version} is not recent enough, "
@@ -24,19 +23,21 @@ def __java_version_output() -> str:
2423
return java_version
2524

2625

27-
def __extract_version_line(java_version_output:str) -> str:
26+
def __extract_version_line(java_version_output: str) -> str:
2827
version_line = next((line for line in java_version_output.splitlines() if "version" in line), None)
2928
if not version_line:
3029
pytest.fail("Couldn't find version information in `java -version` output.")
3130
return version_line
3231

3332

34-
def __parse_major_version(version_line:str) -> int:
35-
version_regex = re.compile(r'version "(?P<major>\d+)\.(?P<minor>\d+)\.\d+"')
33+
def __parse_major_version(version_line: str) -> int:
34+
version_regex = re.compile(r'version "(?P<major>\d+)\.(?P<minor>\d+)\.\w+"')
3635
match = version_regex.search(version_line)
37-
if match:
36+
if match is not None:
3837
major_version = int(match.group("major"))
39-
if major_version == 1: # Java 8 reports version as 1.actual_major.actual_minor
38+
if major_version == 1:
39+
# we need to jump this hoop due to Java version naming conventions - it's fun:
40+
# https://softwareengineering.stackexchange.com/questions/175075/why-is-java-version-1-x-referred-to-as-java-x
4041
major_version = int(match.group("minor"))
4142
return major_version
4243
pytest.fail(f"Couldn't parse Java version from {version_line}.")

0 commit comments

Comments
 (0)