コード例 #1
0
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()
コード例 #2
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()
コード例 #3
0
ファイル: test_job.py プロジェクト: lsibilla/runci
 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)
         ]))
コード例 #4
0
ファイル: core.py プロジェクト: lsibilla/runci
    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)
コード例 #5
0
ファイル: test_job.py プロジェクト: lsibilla/runci
    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)
コード例 #6
0
ファイル: test_job.py プロジェクト: lsibilla/runci
    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())
コード例 #7
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()
コード例 #8
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()
コード例 #9
0
ファイル: test_core.py プロジェクト: lsibilla/runci
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(
コード例 #10
0
ファイル: test_cli.py プロジェクト: lsibilla/runci
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