From 36cd4b430be09128ccce70b02c15eb11362fe60f Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: May 25 2018 10:41:19 +0000 Subject: Move the code to examine container's content_sets.yml and container.yaml to ContainerImage class. --- diff --git a/freshmaker/handlers/errata/errata_advisory_rpms_signed.py b/freshmaker/handlers/errata/errata_advisory_rpms_signed.py index 028729c..0305f1e 100644 --- a/freshmaker/handlers/errata/errata_advisory_rpms_signed.py +++ b/freshmaker/handlers/errata/errata_advisory_rpms_signed.py @@ -25,8 +25,6 @@ import json import koji import requests -import yaml -import os from six.moves import cStringIO from six.moves import configparser @@ -43,7 +41,7 @@ from freshmaker.types import ArtifactType, ArtifactBuildState, EventState from freshmaker.models import Event, Compose from freshmaker.consumer import work_queue_put from freshmaker.utils import ( - krb_context, retry, get_rebuilt_nvr, temp_dir, clone_distgit_repo) + krb_context, retry, get_rebuilt_nvr) from freshmaker.odcsclient import create_odcs_client from odcs.common.types import COMPOSE_STATES @@ -160,50 +158,6 @@ class ErrataAdvisoryRPMsSignedHandler(ContainerBuildHandler): return [] - def _should_generate_yum_repourls(self, repository, branch, commit): - """ - Returns False if Koji/OSBS can build container without Freshmaker - generating yum_repourls for content sets. - - This returns False if both content_sets.yml and container.yaml exists - and the "pulp_repos" in container.yaml is set to True. - """ - if "/" in repository: - namespace, name = repository.split("/") - else: - namespace = "rpms" - name = repository - - prefix = "freshmaker-%s-%s-%s" % (namespace, name, commit) - with temp_dir(prefix=prefix) as repodir: - clone_distgit_repo(namespace, name, repodir, commit=commit, - ssh=False, logger=log) - - content_sets_path = os.path.join(repodir, "content_sets.yml") - if not os.path.exists(content_sets_path): - self.log_debug("Should generate Pulp repo, %s does not exist.", - content_sets_path) - return True - - container_path = os.path.join(repodir, "container.yaml") - if not os.path.exists(container_path): - self.log_debug("Should generate Pulp repo, %s does not exist.", - container_path) - return True - - with open(container_path, 'r') as f: - container_yaml = yaml.load(f) - - if ("compose" not in container_yaml or - "pulp_repos" not in container_yaml["compose"] or - not container_yaml["compose"]["pulp_repos"]): - self.log_debug( - "Should generate Pulp repo, pulp_repos not enabled in %s.", - container_path) - return True - - return False - def _fake_odcs_new_compose( self, compose_source, tag, packages=None, results=[]): """ @@ -603,9 +557,7 @@ class ErrataAdvisoryRPMsSignedHandler(ContainerBuildHandler): if state != ArtifactBuildState.FAILED.value: # Store odcs pulp compose to build - build_pulp_compose = self._should_generate_yum_repourls( - image["repository"], image["git_branch"], image["commit"]) - if build_pulp_compose: + if image["generate_pulp_repos"]: compose = self._prepare_pulp_repo( build.event, image["content_sets"]) db_compose = Compose(odcs_compose_id=compose['id']) diff --git a/freshmaker/lightblue.py b/freshmaker/lightblue.py index d20765a..3c75f36 100644 --- a/freshmaker/lightblue.py +++ b/freshmaker/lightblue.py @@ -20,7 +20,9 @@ # SOFTWARE. # # Written by Chenxiong Qi +# Jan Kaluza +import yaml import json import os import re @@ -33,7 +35,7 @@ from six.moves import http_client import concurrent.futures from freshmaker import log, conf from freshmaker.kojiservice import koji_service -from freshmaker.utils import sorted_by_nvr +from freshmaker.utils import sorted_by_nvr, clone_distgit_repo, temp_dir import koji @@ -223,6 +225,74 @@ class ContainerImage(dict): return data + @region.cache_on_arguments() + def _get_additional_data_from_distgit(self, repository, branch, commit): + """ + Finds out information about this image in distgit and returns a dict + with following keys: + + - "generate_pulp_repos" - True when Freshmaker needs to generate Pulp + repos using ODCS itself (it means it is not done by OSBS). + - "content_sets" - List of x86_64 content_sets as defined in + content_sets.yml. We care only about x86_64, because to build + non-x86_64 image, OSBS will generate the Pulp repos and therefore + we don't need content_sets in Freshmaker. + """ + nvr = self["brew"]["build"] + data = {"generate_pulp_repos": False, + "content_sets": []} + + if not repository or not branch or not commit: + log.warn("%s: Cannot get additional data from distgit.", nvr) + return data + if "/" in repository: + namespace, name = repository.split("/") + else: + namespace = "rpms" + name = repository + + prefix = "freshmaker-%s-%s-%s" % (namespace, name, commit) + with temp_dir(prefix=prefix) as repodir: + clone_distgit_repo(namespace, name, repodir, commit=commit, + ssh=False, logger=log) + + content_sets_path = os.path.join(repodir, "content_sets.yml") + if not os.path.exists(content_sets_path): + log.debug("%s: Should generate Pulp repo, %s does not exist.", + nvr, content_sets_path) + data["generate_pulp_repos"] = True + return data + + try: + with open(content_sets_path, 'r') as f: + content_sets_yaml = yaml.load(f) + except Exception as err: + log.exception(err) + data["generate_pulp_repos"] = True + return data + + if "x86_64" in content_sets_yaml: + data["content_sets"] = content_sets_yaml["x86_64"] + + container_path = os.path.join(repodir, "container.yaml") + if not os.path.exists(container_path): + log.debug("%s: Should generate Pulp repo, %s does not exist.", + nvr, container_path) + data["generate_pulp_repos"] = True + return data + + with open(container_path, 'r') as f: + container_yaml = yaml.load(f) + + if ("compose" not in container_yaml or + "pulp_repos" not in container_yaml["compose"] or + not container_yaml["compose"]["pulp_repos"]): + log.debug("%s: Should generate Pulp repo, pulp_repos not " + "enabled in %s.", nvr, container_path) + data["generate_pulp_repos"] = True + return data + return data + def resolve_commit(self): """ Uses the ContainerImage data to resolve the information about @@ -261,7 +331,21 @@ class ContainerImage(dict): :param str release_category: filter only repositories with specific release category (options: Deprecated, Generally Available, Beta, Tech Preview) """ + data = self._get_additional_data_from_distgit( + self["repository"], self["git_branch"], self["commit"]) + self["generate_pulp_repos"] = data["generate_pulp_repos"] + # Prefer content_sets from content_sets.yml. + if data["content_sets"]: + self["content_sets"] = data["content_sets"] + self["content_sets_source"] = "distgit" + log.info("Container image %s uses following content sets: %r", + self["brew"]["build"], data["content_sets"]) + return + + # In case content_sets cannot be get from content_sets.yml, try + # getting them from Lightblue data. if "repositories" not in self or len(self["repositories"]) == 0: + self["content_sets_source"] = "child_image" if not children: log.warning("Container image %s does not have 'repositories' set " "in Lightblue, this is suspicious.", @@ -273,13 +357,13 @@ class ContainerImage(dict): # The child['content_sets'] should be always set for children # passed here, but in case it is not, just try it. if "content_sets" not in child: - child.resolve_content_sets(lb_instance, None, published, - deprecated, release_category) + child.resolve(lb_instance, None, published, + deprecated, release_category) if not child["content_sets"]: continue log.info("Container image %s does not have 'repositories' set " - "in Ligblue. Using child image %s content_sets: %r", + "in Lightblue. Using child image %s content_sets: %r", self["brew"]["build"], child["brew"]["build"], child["content_sets"]) self.update({"content_sets": child["content_sets"]}) @@ -304,10 +388,24 @@ class ContainerImage(dict): if image_content_sets: break + self["content_sets_source"] = "lightblue" log.info("Container image %s uses following content sets: %r", self["brew"]["build"], image_content_sets) self.update({"content_sets": image_content_sets}) + def resolve( + self, lb_instance, children=None, published=True, + deprecated=False, release_category="Generally Available"): + """ + Resolves the Container image - populates additional metadata by + querying Koji and dist-git. + + Calls self.resolve_commit() and self.resolve_content_sets(). + """ + self.resolve_commit() + self.resolve_content_sets( + lb_instance, children, published, deprecated, release_category) + class LightBlue(object): """Interface to query lightblue""" @@ -837,9 +935,8 @@ class LightBlue(object): srpm_name=srpm_name) children = images if images else [child_image] if image: - image.resolve_content_sets(self, children, published, - deprecated, release_category) - image.resolve_commit() + image.resolve(self, children, published, + deprecated, release_category) if images: if image: @@ -864,10 +961,9 @@ class LightBlue(object): images[-1]['error'] = err if parent: - parent.resolve_content_sets( + parent.resolve( self, images, published, deprecated, release_category) - parent.resolve_commit() images[-1]['parent'] = parent if not image: return images @@ -947,9 +1043,7 @@ class LightBlue(object): for image in images: # We do not set "children" here in resolve_content_sets call, because # published images should have the content_set set. - image.resolve_content_sets(self, None, published, deprecated, - release_category) - image.resolve_commit() + image.resolve(self, None, published, deprecated, release_category) # Images returned by this method are latest released images, so # mark them like that. image["latest_released"] = True @@ -1024,8 +1118,10 @@ class LightBlue(object): latest_content_sets = [] for nvr in reversed(nv_to_nvrs[nv]): image = nvr_to_image[nvr] - if ("repositories" not in image or - len(image["repositories"]) == 0): + if ("content_sets" not in image or + not image["content_sets"] or + "content_sets_source" not in image or + image["content_sets_source"] == "child_image"): image["content_sets"] = latest_content_sets else: latest_content_sets = image["content_sets"] @@ -1163,10 +1259,9 @@ class LightBlue(object): else: parent = self.get_image_by_layer(layers[1], len(layers) - 1) if parent: - parent.resolve_content_sets( + parent.resolve( self, [image], published, deprecated, release_category) - parent.resolve_commit() elif len(layers) != 2: image.log_error( "Cannot find parent image with layer %s and layer " diff --git a/tests/test_errata_advisory_rpms_signed_handler.py b/tests/test_errata_advisory_rpms_signed_handler.py index 4c255c9..4ab6783 100644 --- a/tests/test_errata_advisory_rpms_signed_handler.py +++ b/tests/test_errata_advisory_rpms_signed_handler.py @@ -21,11 +21,11 @@ import requests -from mock import patch, mock_open +from mock import patch import freshmaker -from freshmaker import db, log +from freshmaker import db from freshmaker.events import ErrataAdvisoryRPMsSignedEvent from freshmaker.handlers.errata import ErrataAdvisoryRPMsSignedHandler from freshmaker.lightblue import ContainerImage @@ -67,13 +67,6 @@ class TestErrataAdvisoryRPMsSignedHandler(helpers.ModelsTestCase): '_request_boot_iso_compose', side_effect=[{'id': 100}, {'id': 101}]) - self.should_generate_yum_repourls_patcher = patch( - 'freshmaker.handlers.errata.' - 'ErrataAdvisoryRPMsSignedHandler._should_generate_yum_repourls', - return_value=True) - self.should_generate_yum_repourls = self.patcher.patch( - '_should_generate_yum_repourls', return_value=True) - # Fake images found to rebuild has these relationships # # Batch 1 | Batch 2 | Batch 3 @@ -97,6 +90,7 @@ class TestErrataAdvisoryRPMsSignedHandler(helpers.ModelsTestCase): 'sha512:5678', ] }, + "generate_pulp_repos": True, }) self.image_b = ContainerImage({ 'repository': 'repo_2', @@ -114,6 +108,7 @@ class TestErrataAdvisoryRPMsSignedHandler(helpers.ModelsTestCase): 'sha512:4567', ] }, + "generate_pulp_repos": True, }) self.image_c = ContainerImage({ 'repository': 'repo_2', @@ -132,6 +127,7 @@ class TestErrataAdvisoryRPMsSignedHandler(helpers.ModelsTestCase): 'sha512:5678', ] }, + "generate_pulp_repos": True, }) self.image_d = ContainerImage({ 'repository': 'repo_2', @@ -150,6 +146,7 @@ class TestErrataAdvisoryRPMsSignedHandler(helpers.ModelsTestCase): 'sha512:5678', ] }, + "generate_pulp_repos": True, }) self.image_e = ContainerImage({ 'repository': 'repo_2', @@ -168,6 +165,7 @@ class TestErrataAdvisoryRPMsSignedHandler(helpers.ModelsTestCase): 'sha512:4567', ] }, + "generate_pulp_repos": True, }) self.image_f = ContainerImage({ 'repository': 'repo_2', @@ -186,6 +184,7 @@ class TestErrataAdvisoryRPMsSignedHandler(helpers.ModelsTestCase): 'sha512:4567', ] }, + "generate_pulp_repos": True, }) # For simplicify, mocking _find_images_to_rebuild to just return one # batch, which contains images found for rebuild from parent to @@ -651,85 +650,3 @@ class TestFindImagesToRebuild(helpers.FreshmakerTestCase): set(['httpd']), ['content-set-1'], filter_fnc=self.handler._filter_out_not_allowed_builds, published=True, release_category='Generally Available') - - -class TestShouldGenerateYumRepourls(helpers.FreshmakerTestCase): - - def setUp(self): - super(TestShouldGenerateYumRepourls, self).setUp() - - self.patcher = helpers.Patcher( - "freshmaker.handlers.errata.errata_advisory_rpms_signed.") - self.clone_distgit_repo = self.patcher.patch("clone_distgit_repo") - self.path_exists = self.patcher.patch("os.path.exists") - self.patched_open = self.patcher.patch("open", create=True) - - self.handler = ErrataAdvisoryRPMsSignedHandler() - - def tearDown(self): - super(TestShouldGenerateYumRepourls, self).tearDown() - self.patcher.unpatch_all() - - def test_generate(self): - self.path_exists.return_value = True - self.patched_open.return_value = mock_open( - read_data="compose:\n pulp_repos: True").return_value - - ret = self.handler._should_generate_yum_repourls( - "rpms/foo-docker", "branch", "commit") - self.assertEqual(ret, False) - - self.clone_distgit_repo.assert_called_once_with( - 'rpms', 'foo-docker', - helpers.AnyStringWith('freshmaker-rpms-foo-docker'), - commit='commit', logger=log, ssh=False) - - def test_generate_no_namespace(self): - self.path_exists.return_value = True - self.patched_open.return_value = mock_open( - read_data="compose:\n pulp_repos: True").return_value - - ret = self.handler._should_generate_yum_repourls( - "foo-docker", "branch", "commit") - self.assertEqual(ret, False) - - self.clone_distgit_repo.assert_called_once_with( - 'rpms', 'foo-docker', - helpers.AnyStringWith('freshmaker-rpms-foo-docker'), - commit='commit', logger=log, ssh=False) - - def test_generate_no_pulp_repos(self): - self.path_exists.return_value = True - self.patched_open.return_value = mock_open( - read_data="compose:\n pulp_repos_x: True").return_value - - ret = self.handler._should_generate_yum_repourls( - "rpms/foo-docker", "branch", "commit") - self.assertEqual(ret, True) - - def test_generate_pulp_repos_false(self): - self.path_exists.return_value = True - self.patched_open.return_value = mock_open( - read_data="compose:\n pulp_repos: False").return_value - - ret = self.handler._should_generate_yum_repourls( - "rpms/foo-docker", "branch", "commit") - self.assertEqual(ret, True) - - def test_generate_no_content_sets_yml(self): - def mocked_path_exists(path): - return not path.endswith("content_sets.yml") - self.path_exists.side_effect = mocked_path_exists - - ret = self.handler._should_generate_yum_repourls( - "rpms/foo-docker", "branch", "commit") - self.assertEqual(ret, True) - - def test_generate_no_container_yaml(self): - def mocked_path_exists(path): - return not path.endswith("container.yaml") - self.path_exists.side_effect = mocked_path_exists - - ret = self.handler._should_generate_yum_repourls( - "rpms/foo-docker", "branch", "commit") - self.assertEqual(ret, True) diff --git a/tests/test_errata_advisory_state_changed.py b/tests/test_errata_advisory_state_changed.py index 79c5740..122773c 100644 --- a/tests/test_errata_advisory_state_changed.py +++ b/tests/test_errata_advisory_state_changed.py @@ -248,8 +248,6 @@ class TestBatches(helpers.ModelsTestCase): super(TestBatches, self).setUp() self.patcher = helpers.Patcher( 'freshmaker.handlers.errata.ErrataAdvisoryRPMsSignedHandler.') - self.should_generate_yum_repourls = self.patcher.patch( - '_should_generate_yum_repourls', return_value=True) def tearDown(self): self.patcher.unpatch_all() @@ -272,7 +270,8 @@ class TestBatches(helpers.ModelsTestCase): "target": "t1", 'git_branch': 'mybranch', "error": error, - "content_sets": ["first-content-set"] + "content_sets": ["first-content-set"], + "generate_pulp_repos": True, }) @patch('freshmaker.handlers.errata.errata_advisory_rpms_signed.create_odcs_client') @@ -804,9 +803,6 @@ class TestRecordBatchesImages(helpers.ModelsTestCase): '_request_boot_iso_compose', side_effect=[{'id': 100}, {'id': 200}]) - self.should_generate_yum_repourls = self.patcher.patch( - '_should_generate_yum_repourls', return_value=True) - self.patcher.patch_dict( 'freshmaker.models.EVENT_TYPES', {self.mock_event.__class__: -1}) @@ -834,7 +830,8 @@ class TestRecordBatchesImages(helpers.ModelsTestCase): "commit": "123456789", "target": "target-candidate", "git_branch": "rhel-7", - "error": None + "error": None, + "generate_pulp_repos": True })], [ContainerImage({ "brew": { @@ -874,7 +871,8 @@ class TestRecordBatchesImages(helpers.ModelsTestCase): "commit": "987654321", "target": "target-candidate", "git_branch": "rhel-7", - "error": None + "error": None, + "generate_pulp_repos": True })] ] @@ -898,7 +896,6 @@ class TestRecordBatchesImages(helpers.ModelsTestCase): self.assertEqual(ArtifactBuildState.PLANNED.value, child_image.state) def test_record_batches_should_not_generate_pulp_repos(self): - self.should_generate_yum_repourls.return_value = False batches = [ [ContainerImage({ "brew": { @@ -918,7 +915,8 @@ class TestRecordBatchesImages(helpers.ModelsTestCase): "commit": "123456789", "target": "target-candidate", "git_branch": "rhel-7", - "error": None + "error": None, + "generate_pulp_repos": False, })] ] diff --git a/tests/test_handler.py b/tests/test_handler.py index 3cae20a..a0a22a5 100644 --- a/tests/test_handler.py +++ b/tests/test_handler.py @@ -22,6 +22,8 @@ # # Written by Chenxiong Qi +from mock import patch + import freshmaker from freshmaker import db diff --git a/tests/test_lightblue.py b/tests/test_lightblue.py index 1f692fd..01e8320 100644 --- a/tests/test_lightblue.py +++ b/tests/test_lightblue.py @@ -23,7 +23,7 @@ import json import six -from mock import call, patch, Mock +from mock import call, patch, Mock, mock_open from six.moves import http_client from freshmaker.lightblue import ContainerImage @@ -32,6 +32,7 @@ from freshmaker.lightblue import LightBlue from freshmaker.lightblue import LightBlueRequestError from freshmaker.lightblue import LightBlueSystemError from freshmaker.utils import sorted_by_nvr +from freshmaker import log from tests import helpers @@ -120,11 +121,108 @@ description JBWEB000121: This request requires HTTP authentication. repr(self.e)) +class TestGetAdditionalDataFromDistGit(helpers.FreshmakerTestCase): + + def setUp(self): + super(TestGetAdditionalDataFromDistGit, self).setUp() + + self.patcher = helpers.Patcher( + "freshmaker.lightblue.") + self.clone_distgit_repo = self.patcher.patch("clone_distgit_repo") + self.path_exists = self.patcher.patch("os.path.exists") + self.patched_open = self.patcher.patch("open", create=True) + + def tearDown(self): + super(TestGetAdditionalDataFromDistGit, self).tearDown() + self.patcher.unpatch_all() + + def test_generate(self): + self.path_exists.return_value = True + self.patched_open.side_effect = [ + mock_open(read_data="x86_64:\n - content_set").return_value, + mock_open(read_data="compose:\n pulp_repos: True").return_value] + + image = ContainerImage.create({"brew": {"build": "nvr"}}) + ret = image._get_additional_data_from_distgit( + "rpms/foo-docker", "branch", "commit") + self.assertEqual(ret["generate_pulp_repos"], False) + + self.clone_distgit_repo.assert_called_once_with( + 'rpms', 'foo-docker', + helpers.AnyStringWith('freshmaker-rpms-foo-docker'), + commit='commit', logger=log, ssh=False) + + def test_generate_no_namespace(self): + self.path_exists.return_value = True + self.patched_open.side_effect = [ + mock_open(read_data="x86_64:\n - content_set").return_value, + mock_open(read_data="compose:\n pulp_repos: True").return_value] + + image = ContainerImage.create({"brew": {"build": "nvr"}}) + ret = image._get_additional_data_from_distgit( + "foo-docker", "branch", "commit") + self.assertEqual(ret["generate_pulp_repos"], False) + + self.clone_distgit_repo.assert_called_once_with( + 'rpms', 'foo-docker', + helpers.AnyStringWith('freshmaker-rpms-foo-docker'), + commit='commit', logger=log, ssh=False) + + def test_generate_no_pulp_repos(self): + self.path_exists.return_value = True + self.patched_open.side_effect = [ + mock_open(read_data="x86_64:\n - content_set").return_value, + mock_open(read_data="compose:\n pulp_repos_x: True").return_value] + + image = ContainerImage.create({"brew": {"build": "nvr"}}) + ret = image._get_additional_data_from_distgit( + "rpms/foo-docker", "branch", "commit") + self.assertEqual(ret["generate_pulp_repos"], True) + + def test_generate_pulp_repos_false(self): + self.path_exists.return_value = True + self.patched_open.side_effect = [ + mock_open(read_data="x86_64:\n - content_set").return_value, + mock_open(read_data="compose:\n pulp_repos: False").return_value] + + image = ContainerImage.create({"brew": {"build": "nvr"}}) + ret = image._get_additional_data_from_distgit( + "rpms/foo-docker", "branch", "commit") + self.assertEqual(ret["generate_pulp_repos"], True) + + def test_generate_no_content_sets_yml(self): + def mocked_path_exists(path): + return not path.endswith("content_sets.yml") + self.path_exists.side_effect = mocked_path_exists + + image = ContainerImage.create({"brew": {"build": "nvr"}}) + ret = image._get_additional_data_from_distgit( + "rpms/foo-docker", "branch", "commit") + self.assertEqual(ret["generate_pulp_repos"], True) + + def test_generate_no_container_yaml(self): + def mocked_path_exists(path): + return not path.endswith("container.yaml") + self.path_exists.side_effect = mocked_path_exists + self.patched_open.side_effect = [ + mock_open(read_data="x86_64:\n - content_set").return_value, + mock_open(read_data="compose:\n pulp_repos: False").return_value] + + image = ContainerImage.create({"brew": {"build": "nvr"}}) + ret = image._get_additional_data_from_distgit( + "rpms/foo-docker", "branch", "commit") + self.assertEqual(ret["generate_pulp_repos"], True) + + class TestContainerImageObject(helpers.FreshmakerTestCase): def setUp(self): super(TestContainerImageObject, self).setUp() + self.patcher = helpers.Patcher( + 'freshmaker.lightblue.') + self.clone_distgit_repo = self.patcher.patch("clone_distgit_repo") + self.dummy_image = ContainerImage.create({ '_id': '1233829', 'brew': { @@ -146,6 +244,10 @@ class TestContainerImageObject(helpers.FreshmakerTestCase): }] }) + def tearDown(self): + super(TestContainerImageObject, self).tearDown() + self.patcher.unpatch_all() + def test_create(self): image = ContainerImage.create({ '_id': '1233829', @@ -244,6 +346,9 @@ class TestContainerImageObject(helpers.FreshmakerTestCase): 'brew': { 'build': 'package-name-1-4-12.10', }, + 'repository': 'foo', + 'git_branch': 'branch', + 'commit': 'commithash', }) self.assertTrue("content_sets" not in image) @@ -257,6 +362,9 @@ class TestContainerImageObject(helpers.FreshmakerTestCase): 'brew': { 'build': 'package-name-1-4-12.10', }, + 'repository': 'foo', + 'git_branch': 'branch', + 'commit': 'commithash', }) self.assertTrue("content_sets" not in image) @@ -285,7 +393,10 @@ class TestContainerImageObject(helpers.FreshmakerTestCase): 'brew': { 'build': 'package-name-1-4-12.10', }, - 'repositories': [] + 'repositories': [], + 'repository': 'foo', + 'git_branch': 'branch', + 'commit': 'commithash', }) self.assertTrue("content_sets" not in image) @@ -317,6 +428,10 @@ class TestQueryEntityFromLightBlue(helpers.FreshmakerTestCase): # Clear the ContainerImage Koji cache. ContainerImage.KOJI_BUILDS_CACHE = {} + self.patcher = helpers.Patcher( + 'freshmaker.lightblue.') + self.clone_distgit_repo = self.patcher.patch("clone_distgit_repo") + self.fake_server_url = 'lightblue.localhost' self.fake_cert_file = 'path/to/cert' self.fake_private_key = 'path/to/private-key' @@ -415,6 +530,10 @@ class TestQueryEntityFromLightBlue(helpers.FreshmakerTestCase): ["git://pkgs.devel.redhat.com/rpms/repo-1#commit_hash1", "target1", {"git_branch": "mybranch"}]] + def tearDown(self): + super(TestQueryEntityFromLightBlue, self).tearDown() + self.patcher.unpatch_all() + @patch('freshmaker.lightblue.requests.post') def test_find_container_images(self, post): post.return_value.status_code = http_client.OK @@ -729,6 +848,7 @@ class TestQueryEntityFromLightBlue(helpers.FreshmakerTestCase): [ { "latest_released": True, + "generate_pulp_repos": True, "repository": "rpms/repo-2", "commit": "commit_hash2", "target": "target2", @@ -740,6 +860,7 @@ class TestQueryEntityFromLightBlue(helpers.FreshmakerTestCase): "package": "package-name-2" }, 'content_sets': ['dummy-content-set-1', 'dummy-content-set-2'], + 'content_sets_source': 'lightblue', 'repositories': [ {'repository': 'product2/repo2', 'published': True, 'tags': [{"name": "latest"}]} @@ -1177,6 +1298,7 @@ class TestDeduplicateImagesToRebuild(helpers.FreshmakerTestCase): return ContainerImage.create({ 'brew': {'build': nvr}, 'content_sets': [], + 'content_sets_source': 'distgit', }) def _create_imgs(self, nvrs):