debian-koji/tests/test_builder/test_choose_taskarch.py
Yuming Zhu ca05418fb5 unittest: use unittest.mock instead of mock
because the absence of unittest.mock on python2.7, we still fallback to
mock
2024-10-23 16:35:30 +00:00

115 lines
4.7 KiB
Python

from __future__ import absolute_import
import tempfile
import unittest
try:
from unittest import mock
except ImportError:
import mock
import rpm
import shutil
from six.moves import range
import koji
from .loadkojid import kojid
class FakeHeader(dict):
def __init__(self, **kwargs):
for key in kwargs:
kname = "RPMTAG_%s" % key.upper()
hkey = getattr(rpm, kname)
self.__setitem__(hkey, kwargs[key])
class TestChooseTaskarch(unittest.TestCase):
def setUp(self):
# set up task handler
task_id = 99
method = 'build'
params = []
self.session = mock.MagicMock()
self.options = mock.MagicMock()
self.options.literal_task_arches = ''
self.workdir = tempfile.mkdtemp()
self.handler = kojid.BuildTask(task_id, method, params, self.session,
self.options, self.workdir)
# mock some more things
self.handler.event_id = 42
self.readSRPMHeader = mock.MagicMock()
self.handler.readSRPMHeader = self.readSRPMHeader
self.getBuildConfig = mock.MagicMock()
self.session.getBuildConfig = self.getBuildConfig
self.getBuildConfig.return_value = {'arches': 'armv7hl i686 x86_64 ppc64'}
def tearDown(self):
shutil.rmtree(self.workdir)
def test_binary_arches(self):
for arch in ['i386', 'i686', 'x86_64', 'ppc', 'ppc64le', 's390',
's390x']:
result = self.handler.choose_taskarch(arch, 'srpm', 'build_tag')
self.assertEqual(result, koji.canonArch(arch))
def test_basic_noarch(self):
self.readSRPMHeader.return_value = FakeHeader(
buildarchs=['noarch'], exclusivearch=[], excludearch=[])
result = self.handler.choose_taskarch('noarch', 'srpm', 'build_tag')
self.assertEqual(result, 'noarch')
def test_excluded_arch(self):
tag_arches = [koji.canonArch(a) for a in self.getBuildConfig()['arches'].split()]
# random choice involved, so we repeat this a few times
for i in range(20):
self.readSRPMHeader.return_value = FakeHeader(
buildarchs=['noarch'], exclusivearch=[], excludearch=['ppc64'])
result = self.handler.choose_taskarch('noarch', 'srpm', 'build_tag')
self.assertNotEqual(result, 'noarch')
self.assertNotEqual(result, 'ppc64')
self.assertIn(result, tag_arches)
def test_exclusive_arch(self):
tag_arches = [koji.canonArch(a) for a in self.getBuildConfig()['arches'].split()]
# random choice involved, so we repeat this a few times
for i in range(20):
self.readSRPMHeader.return_value = FakeHeader(
buildarchs=['noarch'], exclusivearch=['noarch', 'armv7hl'], excludearch=[])
result = self.handler.choose_taskarch('noarch', 'srpm', 'build_tag')
self.assertNotEqual(result, 'noarch')
self.assertEqual(result, koji.canonArch('armv7hl'))
self.assertIn(result, tag_arches)
def test_excluded_irrelevant(self):
tag_arches = [koji.canonArch(a) for a in self.getBuildConfig()['arches'].split()]
self.readSRPMHeader.return_value = FakeHeader(
buildarchs=['noarch'], exclusivearch=[], excludearch=['nosucharch'])
result = self.handler.choose_taskarch('noarch', 'srpm', 'build_tag')
self.assertEqual(result, 'noarch')
def test_literal_arch(self):
self.options.literal_task_arches = 'ARCH'
tag_arches = [koji.canonArch(a) for a in self.getBuildConfig()['arches'].split()]
result = self.handler.choose_taskarch('ARCH', 'srpm', 'build_tag')
self.assertEqual(result, 'ARCH')
def test_all_excluded(self):
tag_arches = [koji.canonArch(a) for a in self.getBuildConfig()['arches'].split()]
# random choice involved, so we repeat this a few times
for i in range(20):
self.readSRPMHeader.return_value = FakeHeader(
buildarchs=['noarch'], exclusivearch=[], excludearch=tag_arches)
with self.assertRaises(koji.BuildError):
result = self.handler.choose_taskarch('noarch', 'srpm', 'build_tag')
def test_too_exclusive(self):
tag_arches = [koji.canonArch(a) for a in self.getBuildConfig()['arches'].split()]
# random choice involved, so we repeat this a few times
for i in range(20):
self.readSRPMHeader.return_value = FakeHeader(
buildarchs=['noarch'], exclusivearch=['missing_arch'], excludearch=[])
with self.assertRaises(koji.BuildError):
result = self.handler.choose_taskarch('noarch', 'srpm', 'build_tag')