def test_kubernetes_command_runner(): fail_cmd = "fail command" process_runner = MockProcessRunner([fail_cmd]) provider = MockProvider() provider.create_node({}, {}, 1) args = { "log_prefix": "prefix", "namespace": "namespace", "node_id": 0, "auth_config": auth_config, "process_runner": process_runner, } cmd_runner = KubernetesCommandRunner(**args) env_vars = {"var1": "quote between this \" and this", "var2": "123"} cmd_runner.run("echo helloo", environment_variables=env_vars) expected = [ "kubectl", "-n", "namespace", "exec", "-it", "0", "--", "bash", "--login", "-c", "-i", """\'true && source ~/.bashrc && export OMP_NUM_THREADS=1 PYTHONWARNINGS=ignore && (export var1=\'"\'"\'"quote between this \\" and this"\'"\'"\';export var2=\'"\'"\'"123"\'"\'"\';echo helloo)\'""" # noqa: E501 ] assert process_runner.calls[0] == " ".join(expected)
def test_kubernetes_command_runner(): fail_cmd = "fail command" process_runner = MockProcessRunner([fail_cmd]) provider = MockProvider() provider.create_node({}, {}, 1) args = { "log_prefix": "prefix", "namespace": "namespace", "node_id": 0, "auth_config": auth_config, "process_runner": process_runner, } cmd_runner = KubernetesCommandRunner(**args) env_vars = {"var1": "quote between this \" and this", "var2": "123"} cmd_runner.run("echo helloo", environment_variables=env_vars) expected = [ "kubectl", "-n", "namespace", "exec", "-it", "0", "--", "bash", "--login", "-c", "-i", """\'true && source ~/.bashrc && export OMP_NUM_THREADS=1 PYTHONWARNINGS=ignore && (export var1=\'"\'"\'"quote between this \\" and this"\'"\'"\';export var2=\'"\'"\'"123"\'"\'"\';echo helloo)\'""" # noqa: E501 ] assert process_runner.calls[0] == " ".join(expected) logger = logging.getLogger("ray.autoscaler._private.command_runner") with pytest.raises(SystemExit) as pytest_wrapped_e, patch.object( logger, "error") as mock_logger_error: cmd_runner.run(fail_cmd, exit_on_fail=True) failed_cmd_expected = f'prefixCommand failed: \n\n kubectl -n namespace exec -it 0 --\'bash --login -c -i \'"\'"\'true && source ~/.bashrc && export OMP_NUM_THREADS=1 PYTHONWARNINGS=ignore && ({fail_cmd})\'"\'"\'\'\n' # noqa: E501 mock_logger_error.assert_called_once_with(failed_cmd_expected) assert pytest_wrapped_e.type == SystemExit assert pytest_wrapped_e.value.code == 1