Example #1
0
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()
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()
Example #3
0
 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)
         ]))
Example #4
0
    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)
Example #5
0
    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())
Example #6
0
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()
Example #7
0
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()
Example #8
0
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(
        services=[],
        targets=[
            Target(name="target1",
                   dependencies=["target2"],
                   steps=[Step("test", "compose-build", {"services": "s1"})]),
            Target(name="target2",
                   dependencies=[],
                   steps=[Step("test", "compose-build", {"services": "s2"})])
Example #9
0
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