示例#1
0
def test_docker_squashing_parameters(mocker):
    builder = DockerBuilder(
        Map(merge_two_dicts({'target': 'something'},
                            {'tags': ['foo', 'bar']})))

    # None is fine here, default values for params are tested in different place
    assert builder.params.no_squash == None

    docker_client_class = mocker.patch(
        'cekit.builders.docker_builder.APIClientClass')
    squash_class = mocker.patch('cekit.builders.docker_builder.Squash')
    squash = squash_class.return_value
    docker_client = docker_client_class.return_value
    mocker.patch.object(builder,
                        '_build_with_docker',
                        return_value="1654234sdf56")

    builder.generator = Map({'image': {'from': 'FROM'}})

    builder.run()

    squash_class.assert_called_once_with(cleanup=True,
                                         docker=docker_client,
                                         from_layer="FROM",
                                         image="1654234sdf56",
                                         log=logging.getLogger('cekit'))
    squash.run.assert_called_once_with()
    builder._build_with_docker.assert_called_once_with(docker_client)
示例#2
0
def test_docker_client_build_with_failure(mocker, caplog):
    caplog.set_level(logging.DEBUG, logger="cekit")

    builder = DockerBuilder(Map(merge_two_dicts({'target': 'something'}, {'tags': ['foo', 'bar']})))

    docker_client_class = mocker.patch('cekit.builders.docker_builder.APIClientClass')
    squash_class = mocker.patch('cekit.builders.docker_builder.Squash')
    squash = squash_class.return_value
    docker_client = docker_client_class.return_value
    docker_client_build = mocker.patch.object(
        docker_client, 'build', return_value=docker_fail_output)

    builder.generator = Map({'image': {'from': 'FROM'}})

    with pytest.raises(CekitError) as exception:
        builder.run()

    assert "Image build failed, see logs above." in str(exception.value)

    squash_class.assert_not_called()
    squash.run.assert_not_called()
    docker_client_build.assert_called_once_with(
        decode=True, path='something/image', pull=None, rm=True)
    assert "Docker: Step 3/159 : COPY modules /tmp/scripts/" in caplog.text
    assert "You can look inside the failed image by running 'docker run --rm -ti 81a88b63f47f bash'" in caplog.text
示例#3
0
def test_docker_tag(mocker):
    builder = DockerBuilder(Map(merge_two_dicts({'target': 'something'}, {'tags': ['foo', 'bar']})))

    docker_client_mock = mocker.Mock()

    builder._tag(docker_client_mock, "image_id", ["image:latest", "host:5000/repo/image:tag"])

    assert len(docker_client_mock.tag.mock_calls) == 2

    docker_client_mock.tag.assert_has_calls([
        mocker.call("image_id", "image", tag="latest"),
        mocker.call("image_id", "host:5000/repo/image", tag="tag")
    ])
示例#4
0
def test_docker_squashing_disabled(mocker):
    builder = DockerBuilder(Map(merge_two_dicts({'target': 'something'}, {
                            'no_squash': True, 'tags': ['foo', 'bar']})))

    assert builder.params.no_squash == True

    docker_client_class = mocker.patch('cekit.builders.docker_builder.APIClientClass')
    docker_client = docker_client_class.return_value
    mocker.patch.object(builder, '_build_with_docker')
    mocker.patch.object(builder, '_squash')

    builder._build_with_docker.return_value = "1654234sdf56"

    builder.run()

    builder._build_with_docker.assert_called_once_with(docker_client)
    builder._squash.assert_not_called()
示例#5
0
def test_docker_squashing_enabled(mocker):
    builder = DockerBuilder(Map(merge_two_dicts({'target': 'something'}, {'tags': ['foo', 'bar']})))

    # None is fine here, default values for params are tested in different place
    assert builder.params.no_squash == None
    assert builder.params.tags == ['foo', 'bar']

    docker_client_class = mocker.patch('cekit.builders.docker_builder.APIClientClass')
    docker_client = docker_client_class.return_value
    mocker.patch.object(builder, '_build_with_docker')
    mocker.patch.object(builder, '_squash')
    builder._build_with_docker.return_value = "1654234sdf56"

    builder.run()

    builder._build_with_docker.assert_called_once_with(docker_client)
    builder._squash.assert_called_once_with(docker_client, "1654234sdf56")
示例#6
0
def create_builder_object(mocker, builder, params, common_params={'target': 'something'}):
    if 'docker' == builder:
        from cekit.builders.docker_builder import DockerBuilder as BuilderImpl
    elif 'osbs' == builder:
        from cekit.builders.osbs import OSBSBuilder as BuilderImpl
    elif 'podman' == builder:
        from cekit.builders.podman import PodmanBuilder as BuilderImpl
    elif 'buildah' == builder:
        from cekit.builders.buildah import BuildahBuilder as BuilderImpl
    else:
        raise Exception("Builder engine %s is not supported" % builder)

    mocker.patch('cekit.tools.decision')

    builder = BuilderImpl(Map(merge_two_dicts(common_params, params)))
    builder.dist_git_dir = '/tmp'
    builder.dist_git = DistGitMock()
    builder.artifacts = []
    return builder
示例#7
0
def test_docker_client_build(mocker, caplog):
    caplog.set_level(logging.DEBUG, logger="cekit")

    squash_class = mocker.patch('cekit.builders.docker_builder.Squash')
    squash = squash_class.return_value
    docker_client_class = mocker.patch('cekit.builders.docker_builder.APIClientClass')
    docker_client = docker_client_class.return_value
    docker_client_build = mocker.patch.object(
        docker_client, 'build', return_value=docker_success_output)

    builder = DockerBuilder(Map(merge_two_dicts({'target': 'something'}, {'tags': ['foo', 'bar']})))
    builder.generator = Map({'image': {'from': 'FROM'}})
    builder.run()

    squash_class.assert_called_once_with(
        cleanup=True, docker=docker_client, from_layer="FROM", image="985573b8bb7b", log=logging.getLogger('cekit'))
    squash.run.assert_called_once_with()
    docker_client_build.assert_called_once_with(
        decode=True, path='something/image', pull=None, rm=True)
    assert "Docker: This system is not receiving updates. You can use subscription-manager on the host to register and assign subscriptions." in caplog.text
    assert "Image built and available under following tags: foo, bar" in caplog.text
示例#8
0
def test_docker_builder_defaults():
    builder = DockerBuilder(Map(merge_two_dicts({'target': 'something'}, {'tags': ['foo', 'bar']})))

    assert builder.params.tags == ['foo', 'bar']