ceph/tasks/tests/test_buildpackages.py
Loic Dachary 4d89c9e4de buildpackages: walk the whole config tree to find sha1 to build
It is not enough to look for the first install task. In upgrade tests,
the install.upgrade task requires more packages to be built. In more
complicated tests using sequential and parallel tasks, the actual
install or install.upgrade task may be deeper in the config tree.

Signed-off-by: Loic Dachary <loic@dachary.org>
2015-10-09 10:05:58 +02:00

171 lines
5.0 KiB
Python

# py.test -v -s tests/test_buildpackages.py
from mock import patch, Mock
from .. import buildpackages
from teuthology import packaging
def test_get_tag_branch_sha1():
gitbuilder = packaging.GitbuilderProject(
'ceph',
{
'os_type': 'centos',
'os_version': '7.0',
})
(tag, branch, sha1) = buildpackages.get_tag_branch_sha1(gitbuilder)
assert tag == None
assert branch == None
assert sha1 is not None
gitbuilder = packaging.GitbuilderProject(
'ceph',
{
'os_type': 'centos',
'os_version': '7.0',
'sha1': 'asha1',
})
(tag, branch, sha1) = buildpackages.get_tag_branch_sha1(gitbuilder)
assert tag == None
assert branch == None
assert sha1 == 'asha1'
remote = Mock
remote.arch = 'x86_64'
remote.os = Mock
remote.os.name = 'ubuntu'
remote.os.version = '14.04'
remote.os.codename = 'trusty'
remote.system_type = 'deb'
ctx = Mock
ctx.cluster = Mock
ctx.cluster.remotes = {remote: ['client.0']}
expected_tag = 'v0.94.1'
expected_sha1 = 'expectedsha1'
def check_output(cmd, shell):
assert shell == True
return expected_sha1 + " refs/tags/" + expected_tag
with patch.multiple(
buildpackages,
check_output=check_output,
):
gitbuilder = packaging.GitbuilderProject(
'ceph',
{
'os_type': 'centos',
'os_version': '7.0',
'sha1': 'asha1',
'all': {
'tag': tag,
},
},
ctx = ctx,
remote = remote)
(tag, branch, sha1) = buildpackages.get_tag_branch_sha1(gitbuilder)
assert tag == expected_tag
assert branch == None
assert sha1 == expected_sha1
expected_branch = 'hammer'
expected_sha1 = 'otherexpectedsha1'
def check_output(cmd, shell):
assert shell == True
return expected_sha1 + " refs/heads/" + expected_branch
with patch.multiple(
buildpackages,
check_output=check_output,
):
gitbuilder = packaging.GitbuilderProject(
'ceph',
{
'os_type': 'centos',
'os_version': '7.0',
'sha1': 'asha1',
'all': {
'branch': branch,
},
},
ctx = ctx,
remote = remote)
(tag, branch, sha1) = buildpackages.get_tag_branch_sha1(gitbuilder)
assert tag == None
assert branch == expected_branch
assert sha1 == expected_sha1
def test_lookup_configs():
expected_system_type = 'deb'
def make_remote():
remote = Mock()
remote.arch = 'x86_64'
remote.os = Mock()
remote.os.name = 'ubuntu'
remote.os.version = '14.04'
remote.os.codename = 'trusty'
remote.system_type = expected_system_type
return remote
ctx = Mock()
class cluster:
remote1 = make_remote()
remote2 = make_remote()
remotes = {
remote1: ['client.0'],
remote2: ['mon.a','osd.0'],
}
def only(self, role):
result = Mock()
if role in ('client.0',):
result.remotes = { cluster.remote1: None }
elif role in ('osd.0', 'mon.a'):
result.remotes = { cluster.remote2: None }
else:
result.remotes = None
return result
ctx.cluster = cluster()
ctx.config = {
'roles': [ ['client.0'], ['mon.a','osd.0'] ],
}
# nothing -> nothing
assert buildpackages.lookup_configs(ctx, {}) == []
assert buildpackages.lookup_configs(ctx, {1:[1,2,3]}) == []
assert buildpackages.lookup_configs(ctx, [[1,2,3]]) == []
assert buildpackages.lookup_configs(ctx, None) == []
#
# the overrides applies to install and to install.upgrade
# that have no tag, branch or sha1
#
config = {
'overrides': {
'install': {
'ceph': {
'sha1': 'overridesha1',
'tag': 'overridetag',
'branch': 'overridebranch',
},
},
},
'tasks': [
{
'install': {
'sha1': 'installsha1',
},
},
{
'install.upgrade': {
'osd.0': {
},
'client.0': {
'sha1': 'client0sha1',
},
},
}
],
}
ctx.config = config
expected_configs = [{'branch': 'overridebranch', 'sha1': 'overridesha1', 'tag': 'overridetag'},
{'project': 'ceph', 'branch': 'overridebranch', 'sha1': 'overridesha1', 'tag': 'overridetag'},
{'project': 'ceph', 'sha1': 'client0sha1'}]
assert buildpackages.lookup_configs(ctx, config) == expected_configs