diff --git a/launchable/commands/verify.py b/launchable/commands/verify.py index 3af7e37f3..7fcc1e69c 100644 --- a/launchable/commands/verify.py +++ b/launchable/commands/verify.py @@ -3,6 +3,7 @@ import re import subprocess import sys +from subprocess import CalledProcessError from typing import List import click @@ -49,9 +50,16 @@ def compare_java_version(output: str) -> int: def check_java_version(javacmd: str) -> int: - """Check if the Java version meets what we need. returns >=0 if we meet the requirement""" - v = subprocess.run([javacmd, "-version"], check=True, stderr=subprocess.PIPE, universal_newlines=True) - return compare_java_version(v.stderr) + """ + Check if the Java version meets what we need. + Returns >=0 if we meet the requirement + Returns -1 if 'java -version' command returns non-zero exit status + """ + try: + v = subprocess.run([javacmd, "-version"], check=True, stderr=subprocess.PIPE, universal_newlines=True) + return compare_java_version(v.stderr) + except CalledProcessError: + return -1 @click.command(name="verify") diff --git a/tests/commands/test_verify.py b/tests/commands/test_verify.py index 50ffa16db..879cee51c 100644 --- a/tests/commands/test_verify.py +++ b/tests/commands/test_verify.py @@ -1,6 +1,8 @@ +from subprocess import CalledProcessError from unittest import TestCase +from unittest.mock import patch -from launchable.commands.verify import compare_java_version, compare_version +from launchable.commands.verify import check_java_version, compare_java_version, compare_version class VersionTest(TestCase): @@ -37,3 +39,9 @@ def test_java_version(self): Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_22-b03, mixed mode) """ ) < 0) + + @patch('launchable.commands.verify.subprocess.run') + def test_check_java_version(self, mock_run): + mock_run.side_effect = CalledProcessError(1, 'java -version') + result = check_java_version('java') + self.assertEqual(result, -1)