| |
@@ -6,7 +6,6 @@
|
| |
'''Unit tests for libtaskotron/koji_utils.py'''
|
| |
|
| |
import pytest
|
| |
- from dingus import Dingus
|
| |
import os
|
| |
import itertools
|
| |
import mock
|
| |
@@ -80,8 +79,12 @@
|
| |
# =====================
|
| |
|
| |
def test_latest_by_tag_first_tag_miss(self):
|
| |
- stub_koji = Dingus(listTagged__returns=None,
|
| |
- multiCall__returns=[[[]], [[{'nvr': self.ref_latest_stable}]]])
|
| |
+ stub_koji = mock.Mock(**
|
| |
+ {'listTagged.return_value': None,
|
| |
+ 'multiCall.return_value': [
|
| |
+ [[]], [[{'nvr': self.ref_latest_stable}]]
|
| |
+ ]
|
| |
+ })
|
| |
|
| |
test_koji = koji_utils.KojiClient(stub_koji)
|
| |
outcome = test_koji.latest_by_tag(self.ref_tags, self.ref_name)
|
| |
@@ -89,8 +92,12 @@
|
| |
assert outcome == self.ref_latest_stable
|
| |
|
| |
def test_latest_by_tag_second_tag_miss(self):
|
| |
- stub_koji = Dingus(listTagged__returns=None,
|
| |
- multiCall__returns=[[[{'nvr': self.ref_latest_stable}]], [[]]])
|
| |
+ stub_koji = mock.Mock(**
|
| |
+ {'listTagged.return_value': None,
|
| |
+ 'multiCall.return_value': [
|
| |
+ [[{'nvr': self.ref_latest_stable}]], [[]]
|
| |
+ ]
|
| |
+ })
|
| |
|
| |
test_koji = koji_utils.KojiClient(stub_koji)
|
| |
outcome = test_koji.latest_by_tag(self.ref_tags, self.ref_name)
|
| |
@@ -98,8 +105,12 @@
|
| |
assert outcome == self.ref_latest_stable
|
| |
|
| |
def test_latest_by_tag_build_not_found(self):
|
| |
- stub_koji = Dingus(listTagged__returns=None,
|
| |
- multiCall__returns=[[[]], [[]]])
|
| |
+ stub_koji = mock.Mock(**
|
| |
+ {'listTagged.return_value': None,
|
| |
+ 'multiCall.return_value': [
|
| |
+ [[]], [[]]
|
| |
+ ]
|
| |
+ })
|
| |
|
| |
test_koji = koji_utils.KojiClient(stub_koji)
|
| |
assert test_koji.latest_by_tag(self.ref_tags, self.ref_name) is None
|
| |
@@ -109,11 +120,13 @@
|
| |
# =====================
|
| |
|
| |
def test_rpms_to_build(self):
|
| |
- stub_koji = Dingus(getBuild__returns=None,
|
| |
- getRPM__returns=None,
|
| |
- multiCall=create_multicall(
|
| |
- [[self.ref_rpms[0]], [self.ref_rpms[1]]],
|
| |
- [[self.ref_build], [self.ref_build]]))
|
| |
+ stub_koji = mock.Mock(**
|
| |
+ {'getBuild.return_value': None,
|
| |
+ 'getRPM.return_value': None,
|
| |
+ 'multiCall': create_multicall(
|
| |
+ [[self.ref_rpms[0]], [self.ref_rpms[1]]],
|
| |
+ [[self.ref_build], [self.ref_build]])
|
| |
+ })
|
| |
|
| |
test_koji = koji_utils.KojiClient(stub_koji)
|
| |
outcome = test_koji.rpms_to_build([self.ref_filename,self.ref_filename])
|
| |
@@ -121,39 +134,47 @@
|
| |
assert outcome == [self.ref_build, self.ref_build]
|
| |
# because two rpms come from same build, it gets called twice for each
|
| |
# rpm, once for build
|
| |
- assert len(stub_koji.calls) == 3
|
| |
-
|
| |
+ assert len(stub_koji.mock_calls) == 3
|
| |
|
| |
def test_rpms_to_build_exceptions(self):
|
| |
- stub_koji = Dingus(getRPM__returns=None,
|
| |
- multiCall__returns=[{"faultCode": -1,
|
| |
- "faultString": "failed"}])
|
| |
+ stub_koji = mock.Mock(**
|
| |
+ {'getRPM.return_value': None,
|
| |
+ 'multiCall.return_value':
|
| |
+ [{"faultCode": -1, "faultString": "failed"}]
|
| |
+ })
|
| |
test_koji = koji_utils.KojiClient(stub_koji)
|
| |
|
| |
with pytest.raises(exc.TaskotronRemoteError):
|
| |
test_koji.rpms_to_build([self.ref_filename])
|
| |
|
| |
- stub_koji = Dingus(getBuild__returns=None,
|
| |
- getRPM__returns=None,
|
| |
- multiCall=create_multicall([[self.ref_rpms[0]]], [
|
| |
- {"faultCode": -1, "faultString": "failed"}]))
|
| |
+ stub_koji = mock.Mock(**
|
| |
+ {'getBuild.return_value': None,
|
| |
+ 'getRPM.return_value': None,
|
| |
+ 'multiCall': create_multicall(
|
| |
+ [[self.ref_rpms[0]]],
|
| |
+ [{"faultCode": -1, "faultString": "failed"}])
|
| |
+ })
|
| |
|
| |
test_koji = koji_utils.KojiClient(stub_koji)
|
| |
with pytest.raises(exc.TaskotronRemoteError):
|
| |
test_koji.rpms_to_build([self.ref_filename])
|
| |
|
| |
- stub_koji = Dingus(getBuild__returns=None,
|
| |
- getRPM__returns=None,
|
| |
- multiCall__returns=[[None]])
|
| |
+ stub_koji = mock.Mock(**
|
| |
+ {'getBuild.return_value': None,
|
| |
+ 'getRPM.return_value': None,
|
| |
+ 'multiCall.return_value': [[None]],
|
| |
+ })
|
| |
|
| |
test_koji = koji_utils.KojiClient(stub_koji)
|
| |
with pytest.raises(exc.TaskotronRemoteError):
|
| |
test_koji.rpms_to_build([self.ref_filename])
|
| |
|
| |
- stub_koji = Dingus(getBuild__returns=None,
|
| |
- getRPM__returns=None,
|
| |
- multiCall=create_multicall([[self.ref_rpms[0]]],
|
| |
- [[None]]))
|
| |
+ stub_koji = mock.Mock(**
|
| |
+ {'getBuild.return_value': None,
|
| |
+ 'getRPM.return_value': None,
|
| |
+ 'multiCall': create_multicall(
|
| |
+ [[self.ref_rpms[0]]], [[None]]),
|
| |
+ })
|
| |
|
| |
test_koji = koji_utils.KojiClient(stub_koji)
|
| |
with pytest.raises(exc.TaskotronRemoteError):
|
| |
@@ -228,8 +249,10 @@
|
| |
# ===================
|
| |
|
| |
def test_get_urls(self):
|
| |
- stub_koji = Dingus(getBuild__returns=self.ref_build,
|
| |
- listRPMs__returns=self.ref_rpms)
|
| |
+ stub_koji = mock.Mock(**
|
| |
+ {'getBuild.return_value': self.ref_build,
|
| |
+ 'listRPMs.return_value': self.ref_rpms,
|
| |
+ })
|
| |
test_koji = koji_utils.KojiClient(stub_koji)
|
| |
koji_baseurl = config.get_config().pkg_url
|
| |
|
| |
@@ -240,14 +263,18 @@
|
| |
|
| |
def should_not_throw_exception_norpms(self):
|
| |
'''It's possible to have no RPMs (for the given arch) in a build'''
|
| |
- stub_koji = Dingus(getBuild__returns = self.ref_build)
|
| |
+ stub_koji = mock.MagicMock(**
|
| |
+ {'getBuild.return_value': self.ref_build,
|
| |
+ })
|
| |
test_koji = koji_utils.KojiClient(stub_koji)
|
| |
|
| |
test_koji.nvr_to_urls(self.ref_nvr, arches = [self.ref_arch])
|
| |
|
| |
def test_nvr_to_urls_debuginfo(self):
|
| |
- stub_koji = Dingus(getBuild__returns=self.ref_build,
|
| |
- listRPMs__returns=self.ref_rpms)
|
| |
+ stub_koji = mock.Mock(**
|
| |
+ {'getBuild.return_value': self.ref_build,
|
| |
+ 'listRPMs.return_value': self.ref_rpms,
|
| |
+ })
|
| |
test_koji = koji_utils.KojiClient(stub_koji)
|
| |
|
| |
# debuginfo enabled
|
| |
@@ -275,7 +302,7 @@
|
| |
|
| |
def test_get_nvr_rpms_simple(self, monkeypatch):
|
| |
'''NVR contains a few RPMs'''
|
| |
- test_koji = koji_utils.KojiClient(Dingus())
|
| |
+ test_koji = koji_utils.KojiClient(mock.Mock())
|
| |
|
| |
stub_urls = [
|
| |
'http://localhost/file1.rpm',
|
| |
@@ -283,7 +310,7 @@
|
| |
monkeypatch.setattr(test_koji, 'nvr_to_urls',
|
| |
lambda *args, **kwargs: stub_urls)
|
| |
monkeypatch.setattr(file_utils, 'download', mock_download)
|
| |
- monkeypatch.setattr(file_utils, 'makedirs', Dingus())
|
| |
+ monkeypatch.setattr(file_utils, 'makedirs', mock.Mock())
|
| |
|
| |
rpmdir = '/fake'
|
| |
rpm_files = test_koji.get_nvr_rpms(self.ref_nvr, dest=rpmdir)
|
| |
@@ -294,11 +321,11 @@
|
| |
|
| |
def test_get_nvr_rpms_empty(self, monkeypatch):
|
| |
'''NVR contains no RPMs (e.g. of a particular arch)'''
|
| |
- test_koji = koji_utils.KojiClient(Dingus())
|
| |
+ test_koji = koji_utils.KojiClient(mock.Mock())
|
| |
|
| |
monkeypatch.setattr(test_koji, 'nvr_to_urls', lambda *args, **kwargs: [])
|
| |
monkeypatch.setattr(file_utils, 'download', mock_download)
|
| |
- monkeypatch.setattr(file_utils, 'makedirs', Dingus())
|
| |
+ monkeypatch.setattr(file_utils, 'makedirs', mock.Mock())
|
| |
|
| |
rpmdir = '/fake'
|
| |
rpm_files = test_koji.get_nvr_rpms(self.ref_nvr, dest=rpmdir)
|
| |
@@ -307,37 +334,37 @@
|
| |
|
| |
def test_get_nvr_rpms_production_profile(self, monkeypatch):
|
| |
'''caching should be disabled in production profile'''
|
| |
- test_koji = koji_utils.KojiClient(Dingus())
|
| |
- stub_download = Dingus()
|
| |
+ test_koji = koji_utils.KojiClient(mock.Mock())
|
| |
+ stub_download = mock.Mock()
|
| |
|
| |
monkeypatch.setattr(test_koji, 'nvr_to_urls',
|
| |
lambda *args, **kwargs: ['foo'])
|
| |
monkeypatch.setattr(file_utils, 'download', stub_download)
|
| |
- monkeypatch.setattr(file_utils, 'makedirs', Dingus())
|
| |
+ monkeypatch.setattr(file_utils, 'makedirs', mock.Mock())
|
| |
monkeypatch.setattr(config, '_config', config.ProductionConfig)
|
| |
|
| |
rpmdir = '/fake'
|
| |
test_koji.get_nvr_rpms(self.ref_nvr, dest=rpmdir)
|
| |
|
| |
- call = stub_download.calls[0]
|
| |
- assert call[2]['cachedir'] is None
|
| |
+ call = stub_download.call_args
|
| |
+ assert call[1]['cachedir'] is None
|
| |
|
| |
def test_get_nvr_rpms_development_profile(self, monkeypatch):
|
| |
'''caching should be disabled in development profile'''
|
| |
- test_koji = koji_utils.KojiClient(Dingus())
|
| |
- stub_download = Dingus()
|
| |
+ test_koji = koji_utils.KojiClient(mock.Mock())
|
| |
+ stub_download = mock.Mock()
|
| |
|
| |
monkeypatch.setattr(test_koji, 'nvr_to_urls',
|
| |
lambda *args, **kwargs: ['foo'])
|
| |
monkeypatch.setattr(file_utils, 'download', stub_download)
|
| |
- monkeypatch.setattr(file_utils, 'makedirs', Dingus())
|
| |
+ monkeypatch.setattr(file_utils, 'makedirs', mock.Mock())
|
| |
monkeypatch.setattr(config, '_config', config.Config)
|
| |
|
| |
rpmdir = '/fake'
|
| |
test_koji.get_nvr_rpms(self.ref_nvr, dest=rpmdir)
|
| |
|
| |
- call = stub_download.calls[0]
|
| |
- assert call[2]['cachedir'] is not None
|
| |
+ call = stub_download.call_args
|
| |
+ assert call[1]['cachedir'] is not None
|
| |
|
| |
# =======================
|
| |
# get_tagged_rpms()
|
| |
@@ -345,7 +372,9 @@
|
| |
|
| |
def test_get_tagged_rpms_single(self, monkeypatch):
|
| |
'''Single NVR in a tag'''
|
| |
- stub_koji = Dingus(listTagged__returns=[self.ref_build])
|
| |
+ stub_koji = mock.Mock(**
|
| |
+ {'listTagged.return_value': [self.ref_build]
|
| |
+ })
|
| |
test_koji = koji_utils.KojiClient(stub_koji)
|
| |
|
| |
stub_rpms = [
|
| |
@@ -361,10 +390,10 @@
|
| |
|
| |
def test_get_tagged_rpms_multiple(self, monkeypatch):
|
| |
'''Multiple NVRs in a tag'''
|
| |
- stub_koji = Dingus(listTagged__returns=[self.ref_build,
|
| |
- {'nvr': 'bar-1-1'}])
|
| |
+ stub_koji = mock.Mock(**
|
| |
+ {'listTagged.return_value': [self.ref_build, {'nvr': 'bar-1-1'}]
|
| |
+ })
|
| |
test_koji = koji_utils.KojiClient(stub_koji)
|
| |
-
|
| |
stub_rpms = {self.ref_build['nvr']: ['/fake/file1.rpm',
|
| |
'/fake/file2.rpm'],
|
| |
'bar-1-1': ['/fake/bar1.rpm']
|
| |
@@ -379,9 +408,11 @@
|
| |
|
| |
def test_get_tagged_rpms_none(self, monkeypatch):
|
| |
'''No NVRs in a tag'''
|
| |
- stub_koji = Dingus(listTagged__returns=[])
|
| |
+ stub_koji = mock.Mock(**
|
| |
+ {'listTagged.return_value': [],
|
| |
+ })
|
| |
test_koji = koji_utils.KojiClient(stub_koji)
|
| |
- stub_get_nvr_rpms = Dingus()
|
| |
+ stub_get_nvr_rpms = mock.Mock()
|
| |
|
| |
monkeypatch.setattr(test_koji, 'get_nvr_rpms', stub_get_nvr_rpms)
|
| |
monkeypatch.setattr(file_utils, 'makedirs', lambda *args, **kwargs: None)
|
| |
@@ -390,7 +421,7 @@
|
| |
|
| |
assert rpm_files == []
|
| |
# get_nvr_rpms() should not be called
|
| |
- assert stub_get_nvr_rpms.calls() == []
|
| |
+ stub_get_nvr_rpms.assert_not_called()
|
| |
|
| |
# =====================
|
| |
# get_build_log()
|
| |
Dingus is Python2 only and prevents us from converting the code to
Python3.
CC @jskladan @lbrabec