예제 #1
0
    def test_render_orchestrate_build(self, tmpdir, platforms,
                                      build_from, worker_build_image,
                                      is_flatpak, koji_parent_build, valid, image_only):
        phase = 'buildstep_plugins'
        plugin = 'orchestrate_build'

        conf_args = {
            'build_from': build_from,
            'reactor_config_map': 'reactor-config-map',
        }
        extra_args = {
            'base_image': 'fedora:latest',
            'flatpak': is_flatpak,
            'name_label': 'fedora/resultingimage',
            'platforms': platforms,
            'reactor_config_override': 'reactor-config-override',
            'user': "******",
        }
        if koji_parent_build:
            extra_args['koji_parent_build'] = koji_parent_build

        if valid:
            user_params = get_sample_user_params(conf_args=conf_args, extra_args=extra_args)
            build_json = PluginsConfiguration(user_params).render()
        else:
            with pytest.raises(OsbsValidationException):
                user_params = get_sample_user_params(conf_args=conf_args, extra_args=extra_args)
                build_json = PluginsConfiguration(user_params).render()
            return

        plugins = get_plugins_from_build_json(build_json)

        if platforms is None:
            platforms = {}
        assert plugin_value_get(plugins, phase, plugin, 'args', 'platforms') == platforms or {}
        build_kwargs = plugin_value_get(plugins, phase, plugin, 'args', 'build_kwargs')
        assert build_kwargs['arrangement_version'] == REACTOR_CONFIG_ARRANGEMENT_VERSION
        assert build_kwargs.get('koji_parent_build') == koji_parent_build
        assert build_kwargs.get('reactor_config_map') == 'reactor-config-map'
        assert build_kwargs.get('reactor_config_override') == 'reactor-config-override'

        worker_config_kwargs = plugin_value_get(plugins, phase, plugin, 'args',
                                                'config_kwargs')

        worker_config = Configuration(conf_file=None, **worker_config_kwargs)

        if worker_build_image is KeyError:
            assert not worker_config.get_build_from()
        else:
            if image_only:
                assert worker_config_kwargs['build_from'] == worker_build_image
                assert worker_config.get_build_from() == worker_build_image
            else:
                assert 'build_from' not in worker_config_kwargs
                assert not worker_config.get_build_from()

        if is_flatpak:
            assert user_params.flatpak
    def test_render_request_with_yum(self, build_from, is_imagestream, valid,
                                     build_type):
        conf_args = {
            'build_from': build_from,
        }

        extra_args = {
            'name_label': "fedora/resultingimage",
            'yum_repourls': ["http://example.com/my.repo"],
            'build_type': build_type,
        }

        self.mock_repo_info()
        if valid:
            user_params = get_sample_user_params(conf_args=conf_args,
                                                 extra_args=extra_args)
            build_json = PluginsConfiguration(user_params).render()
        else:
            with pytest.raises(OsbsValidationException):
                user_params = get_sample_user_params(conf_args=conf_args,
                                                     extra_args=extra_args)
                build_json = PluginsConfiguration(user_params).render()
            return

        plugins = get_plugins_from_build_json(build_json)

        with pytest.raises(NoSuchPluginException):
            get_plugin(plugins, "prebuild_plugins",
                       "stop_autorebuild_if_disabled")

        with pytest.raises(NoSuchPluginException):
            get_plugin(plugins, "prebuild_plugins", "koji")

        if is_imagestream and build_type == BUILD_TYPE_ORCHESTRATOR:
            assert get_plugin(plugins, "exit_plugins", "import_image")
        else:
            with pytest.raises(NoSuchPluginException):
                get_plugin(plugins, "postbuild_plugins", "import_image")

        if build_type == BUILD_TYPE_WORKER:
            assert plugin_value_get(
                plugins, "prebuild_plugins", "add_yum_repo_by_url", "args",
                "repourls") == ["http://example.com/my.repo"]
        else:
            with pytest.raises(NoSuchPluginException):
                get_plugin(plugins, "prebuild_plugins", "add_yum_repo_by_url")

        labels = plugin_value_get(plugins, "prebuild_plugins",
                                  "add_labels_in_dockerfile", "args", "labels")

        assert labels is not None
        assert 'release' not in labels
예제 #3
0
    def test_render_bump_release(self, disabled, release, flatpak):
        extra_args = {
            'release': release,
            'flatpak': flatpak,
            'build_type': BUILD_TYPE_ORCHESTRATOR,
            'flatpak_base_image': TEST_FLATPAK_BASE_IMAGE,
        }

        user_params = get_sample_user_params(extra_args)
        self.mock_repo_info()
        build_json = PluginsConfiguration(user_params).render()

        plugins = get_plugins_from_build_json(build_json)

        labels = plugin_value_get(plugins, "prebuild_plugins",
                                  "add_labels_in_dockerfile", "args", "labels")
        assert labels.get('release') == release

        if disabled:
            with pytest.raises(NoSuchPluginException):
                get_plugin(plugins, "prebuild_plugins", "bump_release")
            return

        plugin = get_plugin(plugins, "prebuild_plugins", "bump_release")
        assert plugin
        if plugin.get('args'):
            assert plugin['args'].get('append', False) == flatpak
    def test_render_check_and_set_platforms(self, enabled):
        plugin_type = 'prebuild_plugins'
        plugin_name = 'check_and_set_platforms'

        extra_args = []
        if not enabled:
            extra_args = {'koji_target': None}
        user_params = get_sample_user_params(extra_args)
        self.mock_repo_info()
        build_json = PluginsConfiguration(user_params).render()
        plugins = get_plugins_from_build_json(build_json)

        if not enabled:
            with pytest.raises(NoSuchPluginException):
                get_plugin(plugins, plugin_type, plugin_name)
            return

        assert get_plugin(plugins, plugin_type, plugin_name)

        actual_plugin_args = plugin_value_get(plugins, plugin_type,
                                              plugin_name, 'args')

        expected_plugin_args = {'koji_target': 'koji-target'}

        assert actual_plugin_args == expected_plugin_args
예제 #5
0
 def test_get_conf_or_fail(self):
     user_params = get_sample_user_params()
     build_json = PluginsConfiguration(user_params)
     with pytest.raises(RuntimeError):
         build_json.pt._get_plugin_conf_or_fail('bad_plugins', 'reactor_config')
     with pytest.raises(RuntimeError):
         build_json.pt._get_plugin_conf_or_fail('postbuild_plugins', 'bad_plugin')
    def test_render_resolve_remote_sources(self, build_type,
                                           dependency_replacements):
        extra_args = {'dependency_replacements': dependency_replacements}
        user_params = get_sample_user_params(build_type=build_type,
                                             extra_args=extra_args)
        self.mock_repo_info()
        build_json = PluginsConfiguration(user_params).render()
        plugins = get_plugins_from_build_json(build_json)
        if build_type == BUILD_TYPE_ORCHESTRATOR:
            assert get_plugin(plugins, 'prebuild_plugins',
                              'resolve_remote_source')
            plugin_args = plugin_value_get(plugins, 'prebuild_plugins',
                                           'resolve_remote_source', 'args')

            if plugin_args.get('dependency_replacements'):
                assert plugin_args.get(
                    'dependency_replacements') == dependency_replacements
            else:
                assert isinstance(plugin_args.get('dependency_replacements'),
                                  list)
                assert not len(plugin_args.get('dependency_replacements'))

        else:
            with pytest.raises(NoSuchPluginException):
                assert get_plugin(plugins, 'prebuild_plugins',
                                  'resolve_remote_source')
    def test_render_download_remote_sources(self, build_type,
                                            remote_source_url,
                                            remote_source_build_args):
        extra_args = {
            'remote_source_url': remote_source_url,
            'remote_source_build_args': remote_source_build_args
        }
        user_params = get_sample_user_params(extra_args=extra_args,
                                             build_type=build_type)
        self.mock_repo_info()
        build_json = PluginsConfiguration(user_params).render()
        plugins = get_plugins_from_build_json(build_json)
        if build_type == BUILD_TYPE_WORKER:
            assert get_plugin(plugins, 'prebuild_plugins',
                              'download_remote_source')
            plugin_args = plugin_value_get(plugins, 'prebuild_plugins',
                                           'download_remote_source', 'args')

            assert plugin_args.get('remote_source_url') == remote_source_url
            assert plugin_args.get(
                'remote_source_build_args') == remote_source_build_args

        else:
            with pytest.raises(NoSuchPluginException):
                assert get_plugin(plugins, 'prebuild_plugins',
                                  'download_remote_source')
예제 #8
0
    def test_render_scratch(self):
        additional_params = {'scratch': True}

        self.mock_repo_info()
        user_params = get_sample_user_params(additional_params)
        build_json = PluginsConfiguration(user_params).render()
        plugins = get_plugins_from_build_json(build_json)

        remove_plugins = [("prebuild_plugins", "koji_parent"),
                          ("postbuild_plugins", "compress"),
                          ("postbuild_plugins", "pulp_pull"),
                          ("postbuild_plugins", "koji_upload"),
                          ("postbuild_plugins", "fetch_worker_metadata"),
                          ("postbuild_plugins", "compare_components"),
                          ("postbuild_plugins", "import_image"),
                          ("exit_plugins", "koji_promote"),
                          ("exit_plugins", "koji_import"),
                          ("exit_plugins", "koji_tag_build"),
                          ("exit_plugins", "remove_worker_metadata"),
                          ("exit_plugins", "import_image"),
                          ("prebuild_plugins", "check_and_set_rebuild"),
                          ("prebuild_plugins", "stop_autorebuild_if_disabled")]

        for (plugin_type, plugin) in remove_plugins:
            with pytest.raises(NoSuchPluginException):
                get_plugin(plugins, plugin_type, plugin)
예제 #9
0
    def test_render_prod_not_flatpak(self, build_type, flatpak_base_image):
        extra_args = {
            'flatpak': False,
            'flatpak_base_image': flatpak_base_image,
            'build_type': build_type,
        }
        user_params = get_sample_user_params(extra_args)
        self.mock_repo_info()
        build_json = PluginsConfiguration(user_params).render()

        plugins = get_plugins_from_build_json(build_json)

        with pytest.raises(NoSuchPluginException):
            get_plugin(plugins, "prebuild_plugins", "resolve_module_compose")
        with pytest.raises(NoSuchPluginException):
            get_plugin(plugins, "prebuild_plugins",
                       "flatpak_create_dockerfile")
        with pytest.raises(NoSuchPluginException):
            get_plugin(plugins, "prepublish_plugins", "flatpak_create_oci")
        if build_type == BUILD_TYPE_ORCHESTRATOR:
            with pytest.raises(NoSuchPluginException):
                assert get_plugin(plugins, "prepublish_plugins", "squash")
            assert get_plugin(plugins, "exit_plugins", "import_image")
        else:
            assert get_plugin(plugins, "prepublish_plugins", "squash")
예제 #10
0
    def test_render_prod_custom_site_plugin_enable(self, tmpdir):
        # Test to make sure that when we attempt to enable a plugin, it is
        # actually enabled in the JSON for the build_request after running
        # build_request.render()
        self.mock_repo_info()
        sample_params = get_sample_prod_params()
        user_params = BuildUserParams.make_params(**sample_params)
        plugins_conf = PluginsConfiguration(user_params)

        plugin_type = "exit_plugins"
        plugin_name = "testing_exit_plugin"
        plugin_args = {"foo": "bar"}

        plugins_conf.pt.customize_conf['enable_plugins'].append({
            "plugin_type": plugin_type,
            "plugin_name": plugin_name,
            "plugin_args": plugin_args})

        build_json = plugins_conf.render()
        plugins = get_plugins_from_build_json(build_json)

        assert {
                "name": plugin_name,
                "args": plugin_args
        } in plugins[plugin_type]
예제 #11
0
    def test_render_tag_from_config(self, tmpdir, from_container_yaml, extra_args,
                                    has_platform_tag, extra_tags, primary_tags, floating_tags):
        kwargs = get_sample_prod_params(BUILD_TYPE_WORKER)
        kwargs.pop('platforms', None)
        kwargs.pop('platform', None)
        expected_primary = set(primary_tags)
        expected_floating = set(floating_tags)
        exclude_for_override = set(['latest', '{version}'])

        if from_container_yaml:
            expected_floating -= exclude_for_override

        extra_args['tags_from_yaml'] = from_container_yaml
        extra_args['additional_tags'] = extra_tags
        kwargs.update(extra_args)

        user_params = BuildUserParams.make_params(**kwargs)
        build_json = PluginsConfiguration(user_params).render()

        plugins = get_plugins_from_build_json(build_json)

        assert get_plugin(plugins, 'postbuild_plugins', 'tag_from_config')
        tag_suffixes = plugin_value_get(plugins, 'postbuild_plugins', 'tag_from_config',
                                        'args', 'tag_suffixes')
        assert len(tag_suffixes['unique']) == 1
        if has_platform_tag:
            unique_tag_suffix = tag_suffixes['unique'][0]
            assert unique_tag_suffix.endswith('-x86_64') == has_platform_tag
        assert len(tag_suffixes['primary']) == len(expected_primary)
        assert set(tag_suffixes['primary']) == expected_primary
        assert len(tag_suffixes['floating']) == len(expected_floating)
        assert set(tag_suffixes['floating']) == expected_floating
예제 #12
0
 def test_render_no_inject_parent_image(self, caplog):
     self.mock_repo_info()
     user_params = get_sample_user_params()
     user_params.koji_parent_build = None
     plugins_conf = PluginsConfiguration(user_params)
     plugins_conf.pt.remove_plugin('prebuild_plugins', 'inject_parent_image')
     plugins_conf.render()
     assert 'no koji parent build in user parameters' not in caplog.text
예제 #13
0
    def test_prod_non_custom_base_image(self, tmpdir):
        self.mock_repo_info()
        user_params = get_sample_user_params()
        build_json = PluginsConfiguration(user_params).render()
        plugins = get_plugins_from_build_json(build_json)

        get_plugin(plugins, 'prebuild_plugins', 'add_filesystem')

        pull_base_image_plugin = get_plugin(plugins, 'prebuild_plugins', 'pull_base_image')
        assert pull_base_image_plugin is not None
예제 #14
0
    def test_render_flatpak(self, compose_ids, signing_intent, build_type):
        extra_args = {
            'flatpak': True,
            'compose_ids': compose_ids,
            'signing_intent': signing_intent,
            'base_image': TEST_FLATPAK_BASE_IMAGE,
            'build_type': build_type,
        }

        user_params = get_sample_user_params(extra_args=extra_args)

        self.mock_repo_info()
        build_json = PluginsConfiguration(user_params).render()

        plugins = get_plugins_from_build_json(build_json)

        if build_type == BUILD_TYPE_ORCHESTRATOR:
            plugin = get_plugin(plugins, "prebuild_plugins", "resolve_composes")
            assert plugin

            plugin = get_plugin(plugins, "prebuild_plugins", "check_user_settings")
            assert plugin
            assert plugin['args']['flatpak'], "Plugin has not set flatpak arg to True"

        plugin = get_plugin(plugins, "prebuild_plugins", "flatpak_create_dockerfile")
        assert plugin

        plugin = get_plugin(plugins, "prebuild_plugins", "flatpak_update_dockerfile")
        assert plugin

        args = plugin['args']
        # compose_ids will always have a value of at least []
        if compose_ids is None:
            assert args['compose_ids'] == []
        else:
            assert args['compose_ids'] == compose_ids

        plugin = get_plugin(plugins, "prebuild_plugins", "add_flatpak_labels")
        assert plugin

        if build_type == BUILD_TYPE_ORCHESTRATOR:
            plugin = get_plugin(plugins, "prebuild_plugins", "bump_release")
            assert plugin

            args = plugin['args']
            assert args['append'] is True
        else:
            plugin = get_plugin(plugins, "prebuild_plugins", "koji")
            assert plugin

            args = plugin['args']
            assert args['target'] == "koji-target"

            with pytest.raises(NoSuchPluginException):
                plugin = get_plugin(plugins, "prebuild_plugins", "bump_release")
예제 #15
0
    def test_render_prod_custom_site_plugin_override(self):
        # Test to make sure that when we attempt to override a plugin's args,
        # they are actually overridden in the JSON for the build_request
        # after running build_request.render()
        self.mock_repo_info()
        sample_params = get_sample_prod_params()
        base_user_params = BuildUserParams(INPUTS_PATH)
        base_user_params.set_params(**sample_params)
        base_plugins_conf = PluginsConfiguration(base_user_params)
        base_build_json = base_plugins_conf.render()
        base_plugins = get_plugins_from_build_json(base_build_json)

        plugin_type = "exit_plugins"
        plugin_name = "koji_import"
        plugin_args = {"foo": "bar"}

        for plugin_dict in base_plugins[plugin_type]:
            if plugin_dict['name'] == plugin_name:
                plugin_index = base_plugins[plugin_type].index(plugin_dict)

        user_params = BuildUserParams(INPUTS_PATH)
        user_params.set_params(**sample_params)
        plugins_conf = PluginsConfiguration(user_params)
        plugins_conf.pt.customize_conf['enable_plugins'].append({
            "plugin_type":
            plugin_type,
            "plugin_name":
            plugin_name,
            "plugin_args":
            plugin_args
        })
        build_json = plugins_conf.render()
        plugins = get_plugins_from_build_json(build_json)

        assert {
            "name": plugin_name,
            "args": plugin_args
        } in plugins[plugin_type]

        assert base_plugins[plugin_type][plugin_index]['name'] == \
            plugin_name
        assert plugins[plugin_type][plugin_index]['name'] == plugin_name
예제 #16
0
    def test_render_simple_request(self):
        user_params = get_sample_user_params()
        self.mock_repo_info()
        build_json = PluginsConfiguration(user_params).render()
        plugins = get_plugins_from_build_json(build_json)

        pull_base_image = get_plugin(plugins, "prebuild_plugins", "pull_base_image")
        assert pull_base_image is not None
        assert ('args' not in pull_base_image or
                'parent_registry' not in pull_base_image['args'] or
                not pull_base_image['args']['parent_registry'])
예제 #17
0
    def test_render_resolve_composes(self, additional_params):
        plugin_type = 'prebuild_plugins'
        plugin_name = 'resolve_composes'

        self.mock_repo_info()
        user_params = get_sample_user_params(extra_args=additional_params)
        build_json = PluginsConfiguration(user_params).render()
        plugins = get_plugins_from_build_json(build_json)

        assert get_plugin(plugins, plugin_type, plugin_name)
        assert plugin_value_get(plugins, plugin_type, plugin_name, 'args')
    def test_render_flatpak(self, compose_ids, build_type):
        extra_args = {
            'flatpak': True,
            'compose_ids': compose_ids,
            'flatpak_base_image': TEST_FLATPAK_BASE_IMAGE,
            'base_image': TEST_FLATPAK_BASE_IMAGE,
            'build_type': build_type,
        }

        user_params = get_sample_user_params(extra_args)
        self.mock_repo_info()
        build_json = PluginsConfiguration(user_params).render()

        plugins = get_plugins_from_build_json(build_json)

        plugin = get_plugin(plugins, "prebuild_plugins",
                            "resolve_module_compose")
        assert plugin

        args = plugin['args']
        # compose_ids will always have a value of at least []
        if compose_ids is None:
            assert args['compose_ids'] == []
        else:
            assert args['compose_ids'] == compose_ids

        plugin = get_plugin(plugins, "prebuild_plugins",
                            "flatpak_create_dockerfile")
        assert plugin

        args = plugin['args']
        assert args['base_image'] == TEST_FLATPAK_BASE_IMAGE

        if build_type == BUILD_TYPE_ORCHESTRATOR:
            plugin = get_plugin(plugins, "prebuild_plugins", "bump_release")
            assert plugin

            args = plugin['args']
            assert args['append'] is True
            with pytest.raises(NoSuchPluginException):
                get_plugin(plugins, "prepublish_plugins", "flatpak_create_oci")
        else:
            assert get_plugin(plugins, "prepublish_plugins",
                              "flatpak_create_oci")
            with pytest.raises(NoSuchPluginException):
                plugin = get_plugin(plugins, "prebuild_plugins",
                                    "bump_release")

        with pytest.raises(NoSuchPluginException):
            assert get_plugin(plugins, "prepublish_plugins", "squash")
        with pytest.raises(NoSuchPluginException):
            assert get_plugin(plugins, "postbuild_plugins", "import_image")
예제 #19
0
 def test_render_koji_upload(self, build_type):
     user_params = get_sample_user_params(extra_args={'koji_upload_dir': 'test'},
                                          build_type=build_type)
     self.mock_repo_info()
     build_json = PluginsConfiguration(user_params).render()
     plugins = get_plugins_from_build_json(build_json)
     if build_type == BUILD_TYPE_WORKER:
         assert get_plugin(plugins, 'postbuild_plugins', 'koji_upload')
         plugin_args = plugin_value_get(plugins, 'postbuild_plugins', 'koji_upload', 'args')
         assert plugin_args.get('koji_upload_dir') == 'test'
     else:
         with pytest.raises(NoSuchPluginException):
             assert get_plugin(plugins, 'postbuild_plugins', 'koji_upload')
예제 #20
0
 def get_plugins_from_buildrequest(self, build_request, template):
     kwargs = {
         'git_uri': TEST_GIT_URI,
         'git_ref': TEST_GIT_REF,
         'git_branch': TEST_GIT_BRANCH,
         'user': '******',
         'build_type': template.split('_')[0],
         'build_image': 'test',
         'base_image': 'test',
         'name_label': 'test',
     }
     build_request.set_params(**kwargs)
     return PluginsConfiguration(build_request.user_params).pt.template
예제 #21
0
    def test_render_isolated(self):
        additional_params = {'isolated': True}

        self.mock_repo_info()
        user_params = get_sample_user_params(additional_params)
        build_json = PluginsConfiguration(user_params).render()
        plugins = get_plugins_from_build_json(build_json)

        remove_plugins = [("prebuild_plugins", "check_and_set_rebuild"),
                          ("prebuild_plugins", "stop_autorebuild_if_disabled")]

        for (plugin_type, plugin) in remove_plugins:
            with pytest.raises(NoSuchPluginException):
                get_plugin(plugins, plugin_type, plugin)
예제 #22
0
 def test_render_add_image_content_manifest(self, build_type, remote_source_icm_url):
     phase = 'prebuild_plugins'
     plugin = 'add_image_content_manifest'
     extra_args = {'remote_source_icm_url': remote_source_icm_url}
     user_params = get_sample_user_params(build_type=build_type, extra_args=extra_args)
     build_json = PluginsConfiguration(user_params).render()
     plugins = get_plugins_from_build_json(build_json)
     if build_type == BUILD_TYPE_ORCHESTRATOR:
         with pytest.raises(NoSuchPluginException):
             assert get_plugin(plugins, phase, plugin)
     else:
         assert get_plugin(plugins, phase, plugin)
         plugin_args = plugin_value_get(plugins, phase, plugin, 'args')
         assert plugin_args.get('remote_source_icm_url') == remote_source_icm_url
    def test_render_pin_operator_digest(self, param, param_render, value):
        plugin_type = "prebuild_plugins"
        plugin_name = "pin_operator_digest"

        extra_args = {param: value}

        self.mock_repo_info()
        user_params = get_sample_user_params(extra_args=extra_args)
        build_json = PluginsConfiguration(user_params).render()
        plugins = get_plugins_from_build_json(build_json)

        plugin_value = plugin_value_get(plugins, plugin_type, plugin_name,
                                        'args', param_render)
        assert plugin_value == value
예제 #24
0
    def test_render_prod_not_flatpak(self, build_type, flatpak_base_image):
        extra_args = {
            'flatpak': False,
            'flatpak_base_image': flatpak_base_image,
            'build_type': build_type,
        }
        user_params = get_sample_user_params(extra_args)
        self.mock_repo_info()
        build_json = PluginsConfiguration(user_params).render()

        plugins = get_plugins_from_build_json(build_json)

        self.check_plugin_presence(build_type, plugins,
                                   self.not_flatpak_plugins,
                                   self.flatpak_plugins)
    def test_remove_resolve_composes(self, yum_repos):
        plugin_type = 'prebuild_plugins'
        plugin_name = 'resolve_composes'

        additional_params = {'yum_repourls': yum_repos}

        self.mock_repo_info()
        user_params = get_sample_user_params(additional_params)
        build_json = PluginsConfiguration(user_params).render()
        plugins = get_plugins_from_build_json(build_json)

        if yum_repos:
            with pytest.raises(NoSuchPluginException):
                get_plugin(plugins, plugin_type, plugin_name)
        else:
            assert get_plugin(plugins, plugin_type, plugin_name)
    def test_render_pin_operator_digest(self):
        plugin_type = "prebuild_plugins"
        plugin_name = "pin_operator_digest"

        replacement_pullspecs = {'foo/fedora:30': 'bar/fedora@sha256:deadbeef'}
        extra_args = {
            'operator_bundle_replacement_pullspecs': replacement_pullspecs
        }

        self.mock_repo_info()
        user_params = get_sample_user_params(extra_args=extra_args)
        build_json = PluginsConfiguration(user_params).render()
        plugins = get_plugins_from_build_json(build_json)

        plugin_value = plugin_value_get(plugins, plugin_type, plugin_name,
                                        'args', 'replacement_pullspecs')
        assert plugin_value == replacement_pullspecs
예제 #27
0
    def test_render_inject_parent_image(self, koji_parent_build, caplog):
        plugin_type = "prebuild_plugins"
        plugin_name = "inject_parent_image"

        extra_args = {
            'koji_parent_build': koji_parent_build,
        }

        self.mock_repo_info()
        user_params = get_sample_user_params(extra_args=extra_args)
        build_json = PluginsConfiguration(user_params).render()
        plugins = get_plugins_from_build_json(build_json)

        assert get_plugin(plugins, plugin_type, plugin_name)
        parent_value = koji_parent_build if koji_parent_build else {}
        assert plugin_value_get(plugins, plugin_type, plugin_name, 'args',
                                'koji_parent_build') == parent_value
    def test_render_tag_from_config(self, tmpdir, from_container_yaml,
                                    extra_args, has_platform_tag, extra_tags,
                                    primary_tags):
        kwargs = get_sample_prod_params(BUILD_TYPE_WORKER)
        kwargs.pop('platforms', None)
        kwargs.pop('platform', None)
        expected_primary = set(primary_tags)
        exclude_for_override = set(['latest', '{version}'])

        if extra_tags and not from_container_yaml:
            with open(os.path.join(str(tmpdir), ADDITIONAL_TAGS_FILE),
                      'w') as f:
                f.write('\n'.join(extra_tags))
        kwargs.update(extra_args)

        if from_container_yaml:
            if extra_tags:
                expected_primary -= exclude_for_override
            (flexmock(utils).should_receive('get_repo_info').with_args(
                TEST_GIT_URI, TEST_GIT_REF,
                git_branch=TEST_GIT_BRANCH).and_return(
                    RepoInfo(additional_tags=AdditionalTagsConfig(
                        tags=extra_tags))))
        else:
            (flexmock(utils).should_receive('get_repo_info').with_args(
                TEST_GIT_URI, TEST_GIT_REF,
                git_branch=TEST_GIT_BRANCH).and_return(
                    RepoInfo(additional_tags=AdditionalTagsConfig(
                        dir_path=str(tmpdir)))))

        user_params = BuildUserParams(INPUTS_PATH)
        user_params.set_params(**kwargs)
        build_json = PluginsConfiguration(user_params).render()

        plugins = get_plugins_from_build_json(build_json)

        assert get_plugin(plugins, 'postbuild_plugins', 'tag_from_config')
        tag_suffixes = plugin_value_get(plugins, 'postbuild_plugins',
                                        'tag_from_config', 'args',
                                        'tag_suffixes')
        assert len(tag_suffixes['unique']) == 1
        if has_platform_tag:
            unique_tag_suffix = tag_suffixes['unique'][0]
            assert unique_tag_suffix.endswith('-x86_64') == has_platform_tag
        assert len(tag_suffixes['primary']) == len(expected_primary)
        assert set(tag_suffixes['primary']) == expected_primary
예제 #29
0
    def test_prod_custom_base_image(self, tmpdir):
        kwargs = get_sample_prod_params()
        kwargs['base_image'] = 'koji/image-build'
        kwargs['yum_repourls'] = ["http://example.com/my.repo"]

        self.mock_repo_info()
        user_params = BuildUserParams.make_params(**kwargs)
        build_json = PluginsConfiguration(user_params).render()
        plugins = get_plugins_from_build_json(build_json)

        get_plugin(plugins, 'prebuild_plugins', 'pull_base_image')

        add_filesystem_args = plugin_value_get(
            plugins, 'prebuild_plugins', 'add_filesystem', 'args')
        assert add_filesystem_args['repos'] == kwargs['yum_repourls']
        assert add_filesystem_args['from_task_id'] == kwargs['filesystem_koji_task_id']
        assert add_filesystem_args['koji_target'] == kwargs['koji_target']
예제 #30
0
    def test_render_koji_delegate(self, build_type, triggered_task):
        extra_args = {'triggered_after_koji_task': triggered_task}
        user_params = get_sample_user_params(extra_args=extra_args, build_type=build_type)
        self.mock_repo_info()
        build_json = PluginsConfiguration(user_params).render()
        plugins = get_plugins_from_build_json(build_json)
        if build_type == BUILD_TYPE_ORCHESTRATOR:
            assert get_plugin(plugins, 'prebuild_plugins', 'koji_delegate')
            plugin_args = plugin_value_get(plugins, 'prebuild_plugins', 'koji_delegate', 'args')

            if triggered_task:
                assert plugin_args.get('triggered_after_koji_task') == triggered_task
            else:
                assert 'triggered_after_koji_task' not in plugin_args

        else:
            with pytest.raises(NoSuchPluginException):
                assert get_plugin(plugins, 'prebuild_plugins', 'koji_delegate')