ray/release/ray_release/tests/test_run_script.py
Kai Fricke da140a80e9
[ci/release] Legacy field should be optional (#23326)
#22749 broke release unit tests by not providing a legacy key - that key should be optional because we will b dealing with non-legacy tests soon.
Additionally, for some reason the unit tests pass on buildkite while they fail locally and in the release test pipeline. I'm investigating this now...
2022-03-18 11:34:05 +00:00

111 lines
3.1 KiB
Python

import json
import os
import shutil
import subprocess
import sys
import tempfile
import unittest
from ray_release.result import ExitCode
class RunScriptTest(unittest.TestCase):
def setUp(self) -> None:
self.tempdir = tempfile.mkdtemp()
self.state_file = os.path.join(self.tempdir, "state.txt")
self.test_script = os.path.join(
os.path.dirname(__file__), "..", "..", "run_release_test.sh"
)
os.environ["NO_INSTALL"] = "1"
os.environ["NO_CLONE"] = "1"
os.environ["NO_ARTIFACTS"] = "1"
os.environ["RAY_TEST_SCRIPT"] = "ray_release/tests/_test_run_release_test_sh.py"
os.environ["OVERRIDE_SLEEP_TIME"] = "0"
os.environ["MAX_RETRIES"] = "3"
def tearDown(self) -> None:
shutil.rmtree(self.tempdir)
def _read_state(self):
with open(self.state_file, "rt") as f:
return int(f.read())
def _run(self, *exits) -> int:
assert len(exits) == 3
if os.path.exists(self.state_file):
os.unlink(self.state_file)
try:
return subprocess.check_call(
f"{self.test_script} "
f"{self.state_file} "
f"{' '.join(str(e.value) for e in exits)}",
shell=True,
)
except subprocess.CalledProcessError as e:
return e.returncode
def testRepeat(self):
self.assertEquals(
self._run(ExitCode.SUCCESS, ExitCode.SUCCESS, ExitCode.SUCCESS),
ExitCode.SUCCESS.value,
)
self.assertEquals(self._read_state(), 1)
self.assertEquals(
self._run(ExitCode.RAY_WHEELS_TIMEOUT, ExitCode.SUCCESS, ExitCode.SUCCESS),
ExitCode.SUCCESS.value,
)
self.assertEquals(self._read_state(), 2)
self.assertEquals(
self._run(
ExitCode.RAY_WHEELS_TIMEOUT,
ExitCode.CLUSTER_ENV_BUILD_TIMEOUT,
ExitCode.SUCCESS,
),
ExitCode.SUCCESS.value,
)
self.assertEquals(self._read_state(), 3)
self.assertEquals(
self._run(
ExitCode.CLUSTER_STARTUP_TIMEOUT,
ExitCode.CLUSTER_WAIT_TIMEOUT,
ExitCode.RAY_WHEELS_TIMEOUT,
),
ExitCode.RAY_WHEELS_TIMEOUT.value,
)
self.assertEquals(self._read_state(), 3)
self.assertEquals(
self._run(
ExitCode.RAY_WHEELS_TIMEOUT, ExitCode.COMMAND_ALERT, ExitCode.SUCCESS
),
ExitCode.COMMAND_ALERT.value,
)
self.assertEquals(self._read_state(), 2)
def testParameters(self):
os.environ["RAY_TEST_SCRIPT"] = "ray_release/tests/_test_catch_args.py"
argv_file = tempfile.mktemp()
subprocess.check_call(
f"{self.test_script} " f"{argv_file} " f"--smoke-test",
shell=True,
)
with open(argv_file, "rt") as fp:
data = json.load(fp)
os.unlink(argv_file)
self.assertIn("--smoke-test", data)
if __name__ == "__main__":
import pytest
sys.exit(pytest.main(["-v", __file__]))