class test_runner_docker_build(unittest.TestCase): step = Step("test", "docker-pull", { "image": "busybox alpine" }) project = Project( services=[], targets=[Target( name="target", dependencies=[], steps=[step] )]) parameters = Parameters(dataconnection="runci.yml", targets=["target"], verbosity=0) @patch('runci.engine.runner.docker_pull.DockerPullRunner._run_process') def test_command_line_args(self, mock): async def run(): runner = DockerPullRunner(self.project.targets[0], self.step, lambda e: None) context = create_context(self.project, self.parameters) await runner.run(context) asyncio.run(run()) mock.assert_has_calls([ call('docker pull busybox'.split(' ')), call('docker pull alpine'.split(' '))]) @patch('runci.engine.runner.docker_pull.DockerPullRunner.run') def test_integration(self, mock): context = create_context(self.project, self.parameters) DependencyTree(context).run() mock.assert_called_once()
class test_runner_compose_build(unittest.TestCase): step = Step("test", "compose-build", {}) project = Project( services=[], targets=[Target(name="target", dependencies=[], steps=[step])]) parameters = Parameters(dataconnection="runci.yml", targets=["target"], verbosity=0) @patch('runci.engine.runner.compose_build.ComposeBuildRunner._run_process') def test_command_line_args(self, mock): async def run(): runner = ComposeBuildRunner(None, self.step, lambda e: None) context = create_context(self.project, self.parameters) await runner.run(context) asyncio.run(run()) mock.assert_called_once_with( 'docker-compose -f runci.yml build'.split(' ')) @patch('runci.engine.runner.compose_build.ComposeBuildRunner.run') def test_integration(self, mock): context = create_context(self.project, self.parameters) DependencyTree(context).run() mock.assert_called_once()
def test_invalid_step_type(self, mock): target = Target("test", "", [Step("test", "invalid", {})]) project = Project([], [target]) context = core.create_context(project, None) job = Job(context, target) job.run() self.assertEqual(job.status, JobStatus.FAILED) self.assertTrue( any([ mock_call for mock_call in mock.mock_calls if isinstance(mock_call.args[0], JobStepUnknownTypeEvent) ]))
def __init__(self, context): self._context = context if len(self._context.parameters.targets) == 1: self._root_node = self._get_dependency_subtree( self._context.parameters.targets[0]) else: dependent_subtree = list([ self._get_dependency_subtree(target) for target in self._context.parameters.targets ]) root_job = Job(self._context, Target("root", [], [])) self._root_node = DependencyNode(root_job, dependent_subtree)
def test_exception(self, mock): class TestRunner(RunnerBase): async def run_internal(self, project: Project): raise Exception("Simulating an exception") target = Target("test", "", [Step("test", "mock", {})]) project = Project([], [target]) context = core.create_context(project, None) job = Job(context, target) job.run() self.assertEqual(job.status, JobStatus.FAILED) self.assertEqual(mock.call_count, 3) self.assertIsInstance(mock.mock_calls[0].args[0], JobStartEvent) self.assertIsInstance(mock.mock_calls[1].args[0], JobStepUnknownTypeEvent) self.assertIsInstance(mock.mock_calls[2].args[0], JobFailureEvent)
def test_release_messages(self): command = self.test_command class TestRunner(RunnerBase): async def run_internal(self, context: Context): await self._run_process(["sh", "-c", command]) target = Target("test", "", [Step("test", "mock", {})]) project = Project([], [target]) context = core.create_context(project, None) context.runners["mock"] = TestRunner job = Job(context, target) job.run() self.assertEqual(job.status, JobStatus.SUCCEEDED) self.assertTrue(job.has_new_events()) asyncio.run(job.process_events()) self.assertFalse(job.has_new_events())
class test_runner_docker_build(unittest.TestCase): step = Step("test", "target-run", { "target": "test" }) project = Project( services=[], targets=[Target( name="target", dependencies=[], steps=[step] )]) parameters = Parameters(dataconnection="runci.yml", targets=["target"], verbosity=0) @patch('runci.engine.runner.target_run.TargetRunRunner.run') def test_integration(self, mock): context = create_context(self.project, self.parameters) DependencyTree(context).run() mock.assert_called_once()
class test_runner_compose_build(unittest.TestCase): step = Step("test", "compose-run", { "services": "app", "projectName": "test", "build": False }) project = Project( services=[], targets=[Target(name="target", dependencies=[], steps=[step])]) parameters = Parameters(dataconnection="runci.yml", targets=["target"], verbosity=0) @patch('runci.engine.runner.compose_run.ComposeRunRunner._run_process') def test_command_line_args(self, mock): async def run(): runner = ComposeRunRunner(self.project.targets[0], self.step, lambda e: None) context = create_context(self.project, self.parameters) await runner.run(context) asyncio.run(run()) mock.assert_has_calls([ call( 'docker-compose -f docker-compose.yml -f runci.yml -p test run --rm app' .split(' ')), call( 'docker-compose -f docker-compose.yml -f runci.yml -p test down' .split(' ')) ]) @patch('runci.engine.runner.compose_run.ComposeRunRunner.run') def test_integration(self, mock): context = create_context(self.project, self.parameters) DependencyTree(context).run() mock.assert_called_once()
from parameterized import parameterized import unittest from unittest.mock import patch, call from runci.entities.config import Project, Target, Step from runci.entities.parameters import Parameters from runci.engine.core import UnknownTargetException from runci.engine import core, job, runner param_inexistent_target = [ Project(services=[], targets=[Target(name="target", dependencies=[], steps=[])]), Parameters(dataconnection="runci.yml", targets=["inexistant_target"], verbosity=0) ] param_simple_target_single_step = [ Project(services=[], targets=[ Target( name="target", dependencies=[], steps=[Step("test", "compose-build", {"services": "s1"})]) ]), Parameters(dataconnection="runci.yml", targets=["target"], verbosity=0), [call("docker-compose -f runci.yml build s1".split(" "))] ] param_dependent_targets_single_step = [ Project(
from click.testing import CliRunner import unittest from runci.cli.main import main from runci.entities.config import Project, Target, Step from runci.entities.parameters import Parameters test_project = Project(services=[], targets=[Target(name="build_succeed", dependencies=[], steps=[]), Target(name="build_fail", dependencies=[], steps=[Step("fail", "compose-build", {"services": "non-exist"})]), Target(name="wrong_step_type", dependencies=[], steps=[Step("wrong_step", "wrong_type", {})]) ]) test_parameters = Parameters(dataconnection="runci.yml", targets=["target"], verbosity=0) test_project_yaml = """ version: "2.4" targets: build_succeed: build_fail: steps: - name: fail compose-build: services: non-exist