Example #1
0
def test_parent_images_mismatch_base_image(tmpdir):
    """test when base_image has been updated differently from parent_images."""
    dfp = df_parser(str(tmpdir))
    dfp.content = "FROM base:image"
    workflow = mock_workflow()
    workflow.builder.set_df_path(dfp.dockerfile_path)
    workflow.builder.base_image = ImageName.parse("base:image")
    workflow.builder.parent_images = {"base:image": "different-parent-tag"}

    with pytest.raises(BaseImageMismatch):
        ChangeFromPlugin(docker_tasker(), workflow).run()
Example #2
0
def run_plugin(workflow, allow_failure=False):
    result = PreBuildPluginsRunner(docker_tasker(), workflow,
                                   [{
                                       'name': ChangeFromPlugin.key,
                                       'args': {},
                                   }]).run()

    if not allow_failure:  # exceptions are captured in plugin result
        assert result[
            ChangeFromPlugin.key] is None, "Plugin threw exception, check logs"

    return result[ChangeFromPlugin.key]
Example #3
0
def test_parent_images_unresolved(tmpdir):
    """test when parent_images hasn't been filled in with unique tags."""
    dfp = df_parser(str(tmpdir))
    dfp.content = "FROM spam"

    workflow = mock_workflow()
    workflow.builder.set_df_path(dfp.dockerfile_path)
    workflow.builder.base_image = ImageName.parse('eggs')

    # we want to fail because some img besides base was not resolved
    workflow.builder.parent_images = {'spam': 'eggs', 'extra:image': None}

    with pytest.raises(ParentImageUnresolved):
        ChangeFromPlugin(docker_tasker(), workflow).run()
Example #4
0
def test_parent_images_missing(tmpdir):
    """test when parent_images has been mangled and lacks parents compared to dockerfile."""
    dfp = df_parser(str(tmpdir))
    dfp.content = dedent("""\
        FROM first:parent AS builder1
        FROM second:parent AS builder2
        FROM monty
    """)

    workflow = mock_workflow()
    workflow.builder.set_df_path(dfp.dockerfile_path)
    workflow.builder.parent_images = {ImageName.parse("monty"): ImageName.parse("build-name:3")}
    workflow.builder.base_image = ImageName.parse("build-name:3")

    with pytest.raises(ParentImageMissing):
        ChangeFromPlugin(docker_tasker(), workflow).run()
Example #5
0
def test_update_base_image_inspect_broken(tmpdir, caplog):
    """exercise code branch where the base image inspect comes back without an Id"""
    df_content = "FROM base:image"
    dfp = df_parser(str(tmpdir))
    dfp.content = df_content

    workflow = mock_workflow()
    workflow.builder.set_df_path(dfp.dockerfile_path)
    workflow.builder.parent_images = {"base:image": "base@sha256:1234"}
    workflow.builder.base_image = ImageName.parse("base@sha256:1234")
    workflow.builder.tasker.inspect_image = lambda img: dict(no_id="here")

    with pytest.raises(NoIdInspection):
        ChangeFromPlugin(docker_tasker(), workflow).run()
    assert dfp.content == df_content  # nothing changed
    assert "missing in inspection" in caplog.text()
Example #6
0
def run_plugin(workflow, reactor_config_map, allow_failure=False, organization=None):  # noqa
    if reactor_config_map:
        workflow.plugin_workspace[ReactorConfigPlugin.key] = {}
        workflow.plugin_workspace[ReactorConfigPlugin.key][WORKSPACE_CONF_KEY] =\
            ReactorConfig({'version': 1,
                           'registries_organization': organization})

    result = PreBuildPluginsRunner(
       docker_tasker(), workflow,
       [{
          'name': ChangeFromPlugin.key,
          'args': {},
       }]
    ).run()

    if not allow_failure:  # exceptions are captured in plugin result
        assert result[ChangeFromPlugin.key] is None, "Plugin threw exception, check logs"

    return result[ChangeFromPlugin.key]