def test_pull_base_image(self, osbs, build_type, scratch, base_image, expect_plugin): phase = 'prebuild_plugins' plugin = 'pull_base_image' additional_params = { 'base_image': base_image, } if scratch: additional_params['scratch'] = True (params, build_json) = self.get_build_request(build_type, osbs, additional_params) plugins = get_plugins_from_build_json(build_json) if not expect_plugin: with pytest.raises(NoSuchPluginException): get_plugin(plugins, phase, plugin) else: args = plugin_value_get(plugins, phase, plugin, 'args') allowed_args = set([ 'parent_registry', 'parent_registry_insecure', ]) assert set(args.keys()) <= allowed_args
def test_add_filesystem_in_worker(self, osbs, base_image, scratch, expect_plugin): additional_params = { 'base_image': base_image, 'yum_repourls': ['https://example.com/my.repo'], } if scratch: additional_params['scratch'] = True params, build_json = self.get_worker_build_request( osbs, additional_params) plugins = get_plugins_from_build_json(build_json) if not expect_plugin: with pytest.raises(NoSuchPluginException): get_plugin(plugins, 'prebuild_plugins', 'add_filesystem') else: args = plugin_value_get(plugins, 'prebuild_plugins', 'add_filesystem', 'args') allowed_args = set([ 'koji_hub', 'repos', 'from_task_id', ]) assert set(args.keys()) <= allowed_args assert 'koji_hub' in args assert args['repos'] == params['yum_repourls'] assert args['from_task_id'] == params['filesystem_koji_task_id']
def test_koji_import(self, osbs, scratch): additional_params = { 'base_image': 'fedora:latest', 'koji_upload_dir': 'upload', } if scratch: additional_params['scratch'] = True params, build_json = self.get_orchestrator_build_request(osbs, additional_params) plugins = get_plugins_from_build_json(build_json) if scratch: with pytest.raises(NoSuchPluginException): get_plugin(plugins, 'exit_plugins', 'koji_import') return args = plugin_value_get(plugins, 'exit_plugins', 'koji_import', 'args') match_args = { 'koji_keytab': False, 'kojihub': 'http://koji.example.com/kojihub', 'url': '/', 'use_auth': False, 'verify_ssl': False } assert match_args == args
def test_koji_upload(self, osbs, scratch): additional_params = { 'base_image': 'fedora:latest', 'koji_upload_dir': 'upload', } if scratch: additional_params['scratch'] = True params, build_json = self.get_worker_build_request( osbs, additional_params) plugins = get_plugins_from_build_json(build_json) if scratch: with pytest.raises(NoSuchPluginException): get_plugin(plugins, 'postbuild_plugins', 'koji_upload') return args = plugin_value_get(plugins, 'postbuild_plugins', 'koji_upload', 'args') match_args = { 'blocksize': 10485760, 'build_json_dir': 'inputs', 'koji_keytab': False, 'koji_principal': False, 'koji_upload_dir': 'upload', 'kojihub': 'http://koji.example.com/kojihub', 'url': '/', 'use_auth': False, 'verify_ssl': False } assert match_args == args
def test_koji_upload(self, osbs, scratch): additional_params = { 'base_image': 'fedora:latest', 'koji_upload_dir': 'upload', } if scratch: additional_params['scratch'] = True params, build_json = self.get_worker_build_request(osbs, additional_params) plugins = get_plugins_from_build_json(build_json) if scratch: with pytest.raises(NoSuchPluginException): get_plugin(plugins, 'postbuild_plugins', 'koji_upload') return args = plugin_value_get(plugins, 'postbuild_plugins', 'koji_upload', 'args') match_args = { 'blocksize': 10485760, 'build_json_dir': 'inputs', 'koji_keytab': False, 'koji_principal': False, 'koji_upload_dir': 'upload', 'kojihub': 'http://koji.example.com/kojihub', 'url': '/', 'use_auth': False, 'verify_ssl': False, 'platform': 'x86_64', } assert match_args == args
def test_koji_import(self, osbs, scratch): additional_params = { 'base_image': 'fedora:latest', 'koji_upload_dir': 'upload', } if scratch: additional_params['scratch'] = True params, build_json = self.get_orchestrator_build_request( osbs, additional_params) plugins = get_plugins_from_build_json(build_json) if scratch: with pytest.raises(NoSuchPluginException): get_plugin(plugins, 'exit_plugins', 'koji_import') return args = plugin_value_get(plugins, 'exit_plugins', 'koji_import', 'args') match_args = { 'koji_keytab': False, 'kojihub': 'http://koji.example.com/kojihub', 'url': '/', 'use_auth': False, 'verify_ssl': False } assert match_args == args
def test_add_filesystem_in_worker(self, osbs, base_image, scratch, expect_plugin): additional_params = { 'base_image': base_image, 'yum_repourls': ['https://example.com/my.repo'], } if scratch: additional_params['scratch'] = True params, build_json = self.get_worker_build_request(osbs, additional_params) plugins = get_plugins_from_build_json(build_json) if not expect_plugin: with pytest.raises(NoSuchPluginException): get_plugin(plugins, 'prebuild_plugins', 'add_filesystem') else: args = plugin_value_get(plugins, 'prebuild_plugins', 'add_filesystem', 'args') allowed_args = set([ 'koji_hub', 'repos', 'from_task_id', ]) assert set(args.keys()) <= allowed_args assert 'koji_hub' in args assert args['repos'] == params['yum_repourls'] assert args['from_task_id'] == params['filesystem_koji_task_id']
def test_check_and_set_rebuild(self, tmpdir, osbs, triggers): imagechange = [ { "type": "ImageChange", "imageChange": { "from": { "kind": "ImageStreamTag", "name": "{{BASE_IMAGE_STREAM}}" } } } ] if triggers: orch_outer_temp = ORCHESTRATOR_INNER_TEMPLATE.format( arrangement_version=self.ARRANGEMENT_VERSION ) for basename in [ORCHESTRATOR_OUTER_TEMPLATE, orch_outer_temp]: shutil.copy(os.path.join(INPUTS_PATH, basename), os.path.join(str(tmpdir), basename)) with open(os.path.join(str(tmpdir), ORCHESTRATOR_OUTER_TEMPLATE), 'r+') as orch_json: build_json = json.load(orch_json) build_json['spec']['triggers'] = imagechange orch_json.seek(0) json.dump(build_json, orch_json) orch_json.truncate() flexmock(osbs.os_conf, get_build_json_store=lambda: str(tmpdir)) (flexmock(BuildRequest) .should_receive('adjust_for_repo_info') .and_return(True)) additional_params = { 'base_image': 'fedora:latest', } params, build_json = self.get_orchestrator_build_request(osbs, additional_params) plugins = get_plugins_from_build_json(build_json) if not triggers: with pytest.raises(NoSuchPluginException): get_plugin(plugins, 'prebuild_plugins', 'check_and_set_rebuild') return args = plugin_value_get(plugins, 'prebuild_plugins', 'check_and_set_rebuild', 'args') match_args = { "label_key": "is_autorebuild", "label_value": "true", "url": "/", "verify_ssl": False, 'use_auth': False, } assert match_args == args
def test_check_and_set_rebuild(self, tmpdir, osbs, triggers): imagechange = [{ "type": "ImageChange", "imageChange": { "from": { "kind": "ImageStreamTag", "name": "{{BASE_IMAGE_STREAM}}" } } }] if triggers: orch_outer_temp = ORCHESTRATOR_INNER_TEMPLATE.format( arrangement_version=self.ARRANGEMENT_VERSION) for basename in [ORCHESTRATOR_OUTER_TEMPLATE, orch_outer_temp]: shutil.copy(os.path.join(INPUTS_PATH, basename), os.path.join(str(tmpdir), basename)) with open(os.path.join(str(tmpdir), ORCHESTRATOR_OUTER_TEMPLATE), 'r+') as orch_json: build_json = json.load(orch_json) build_json['spec']['triggers'] = imagechange orch_json.seek(0) json.dump(build_json, orch_json) orch_json.truncate() flexmock(osbs.os_conf, get_build_json_store=lambda: str(tmpdir)) (flexmock(BuildRequest).should_receive( 'adjust_for_repo_info').and_return(True)) additional_params = { 'base_image': 'fedora:latest', } params, build_json = self.get_orchestrator_build_request( osbs, additional_params) plugins = get_plugins_from_build_json(build_json) if not triggers: with pytest.raises(NoSuchPluginException): get_plugin(plugins, 'prebuild_plugins', 'check_and_set_rebuild') return args = plugin_value_get(plugins, 'prebuild_plugins', 'check_and_set_rebuild', 'args') match_args = { "label_key": "is_autorebuild", "label_value": "true", "url": "/", "verify_ssl": False, 'use_auth': False, } assert match_args == args
def test_fetch_worker_metadata(self, osbs, scratch): additional_params = { 'base_image': 'fedora:latest', } if scratch: additional_params['scratch'] = True params, build_json = self.get_orchestrator_build_request(osbs, additional_params) plugins = get_plugins_from_build_json(build_json) if scratch: with pytest.raises(NoSuchPluginException): get_plugin(plugins, 'postbuild_plugins', 'fetch_worker_metadata') return args = plugin_value_get(plugins, 'postbuild_plugins', 'fetch_worker_metadata', 'args') match_args = {} assert match_args == args
def test_koji_upload(self, osbs, osbs_with_pulp, scratch, use_pulp): additional_params = { 'base_image': 'fedora:latest', 'koji_upload_dir': 'upload', } if scratch: additional_params['scratch'] = True if use_pulp: client = osbs_with_pulp else: client = osbs params, build_json = self.get_worker_build_request( client, additional_params) plugins = get_plugins_from_build_json(build_json) if scratch: with pytest.raises(NoSuchPluginException): get_plugin(plugins, 'postbuild_plugins', 'koji_upload') return args = plugin_value_get(plugins, 'postbuild_plugins', 'koji_upload', 'args') match_args = { 'blocksize': 10485760, 'build_json_dir': 'inputs', 'koji_keytab': False, 'koji_principal': False, 'koji_upload_dir': 'upload', 'kojihub': 'http://koji.example.com/kojihub', 'url': '/', 'use_auth': False, 'verify_ssl': False, 'platform': 'x86_64', } if use_pulp: match_args['report_multiple_digests'] = True assert match_args == args
def test_fetch_worker_metadata(self, osbs, scratch): additional_params = { 'base_image': 'fedora:latest', } if scratch: additional_params['scratch'] = True params, build_json = self.get_orchestrator_build_request( osbs, additional_params) plugins = get_plugins_from_build_json(build_json) if scratch: with pytest.raises(NoSuchPluginException): get_plugin(plugins, 'postbuild_plugins', 'fetch_worker_metadata') return args = plugin_value_get(plugins, 'postbuild_plugins', 'fetch_worker_metadata', 'args') match_args = {} assert match_args == args
def test_koji_parent_in_orchestrator(self, osbs, base_image, scratch, expect_plugin): additional_params = { 'base_image': base_image, } if scratch: additional_params['scratch'] = True params, build_json = self.get_orchestrator_build_request(osbs, additional_params) plugins = get_plugins_from_build_json(build_json) if not expect_plugin: with pytest.raises(NoSuchPluginException): get_plugin(plugins, 'prebuild_plugins', 'koji_parent') else: args = plugin_value_get(plugins, 'prebuild_plugins', 'koji_parent', 'args') allowed_args = set([ 'koji_hub', ]) assert set(args.keys()) <= allowed_args assert 'koji_hub' in args
def test_koji_parent_in_orchestrator(self, osbs, base_image, scratch, expect_plugin): additional_params = { 'base_image': base_image, } if scratch: additional_params['scratch'] = True params, build_json = self.get_orchestrator_build_request( osbs, additional_params) plugins = get_plugins_from_build_json(build_json) if not expect_plugin: with pytest.raises(NoSuchPluginException): get_plugin(plugins, 'prebuild_plugins', 'koji_parent') else: args = plugin_value_get(plugins, 'prebuild_plugins', 'koji_parent', 'args') allowed_args = set([ 'koji_hub', ]) assert set(args.keys()) <= allowed_args assert 'koji_hub' in args
def test_not_flatpak(self, osbs, worker): additional_params = { 'base_image': 'fedora:latest', } if worker: params, build_json = self.get_worker_build_request( osbs, additional_params) else: params, build_json = self.get_orchestrator_build_request( osbs, additional_params) 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")
def assert_plugin_not_present(self, build_json, phase, name): plugins = get_plugins_from_build_json(build_json) with pytest.raises(NoSuchPluginException): get_plugin(plugins, phase, name)