def test_run_architecture_check_failure(mocker): def results(cmd, *args, **kwargs): if cmd == ["arch"]: return "aarch64\n" elif cmd == ["docker", "run", "--rm", "myimage", "arch"]: return "x86_64\n" else: raise RuntimeError(f"Unexpected mock call: {cmd}") check_output = mocker.patch("subprocess.check_output", side_effect=results) check_call = mocker.patch("subprocess.check_call") getLogger = mocker.patch("logging.getLogger") logger = getLogger.return_value docker = DockerRun("myimage") docker.run("date") check_output.assert_any_call(["arch"], text=True) check_output.assert_any_call( ["docker", "run", "--rm", "myimage", "arch"], text=True ) check_call.assert_called() getLogger.assert_called_with("dispatcher") logger.warning.assert_called()
def test_run_architecture_check_success(mocker): check_output = mocker.patch("subprocess.check_output", return_value="xyz\n") check_call = mocker.patch("subprocess.check_call") getLogger = mocker.patch("logging.getLogger") docker = DockerRun("myimage") docker.run("echo") # no crash = success check_call.assert_called_with(["docker", "run", "--rm", "myimage", "echo"]) getLogger.assert_not_called()
def test_run_with_local_image_does_not_pull(mocker): mocker.patch("lava_dispatcher.utils.docker.DockerRun.__check_image_arch__") docker = DockerRun("myimage") docker.local(True) action = mocker.MagicMock() docker.run("date", action=action) action.run_cmd.assert_has_calls([ mocker.call(["docker", "image", "inspect", mocker.ANY, "myimage"]), mocker.call(["docker", "run", "--rm", "--init", "myimage", "date"]), ])
def test_run_with_action(mocker): check_arch = mocker.patch( "lava_dispatcher.utils.docker.DockerRun.__check_image_arch__") action = mocker.MagicMock() docker = DockerRun("myimage") docker.run("date", action=action) check_arch.assert_called() action.run_cmd.assert_has_calls([ mocker.call(["docker", "pull", "myimage"]), mocker.call(["docker", "run", "--rm", "myimage", "date"]), ])
def run(self, connection, max_end_time): job_id = self.job.job_id script = ["#!/bin/sh", "exec 2>&1", "set -ex"] + self.steps script = "\n".join(script) + "\n" scriptfile = self.path / "postprocess.sh" scriptfile.write_text(script) scriptfile.chmod(0o755) docker = DockerRun(self.image) docker.add_device("/dev/kvm", skip_missing=True) docker.bind_mount(self.path, LAVA_DOWNLOADS) docker.hostname("lava") docker.workdir(LAVA_DOWNLOADS) docker.run(f"{LAVA_DOWNLOADS}/postprocess.sh", action=self) return connection