import yaml
from datetime import datetime
-from mock import patch, call, ANY, DEFAULT
-from teuthology.util.compat import PY3
-if PY3:
- from io import StringIO
- from io import BytesIO
-else:
- from io import BytesIO as StringIO
- from io import BytesIO
+from mock import patch, call, ANY
+from io import StringIO
+from io import BytesIO
from teuthology.config import config, YamlConfig
from teuthology.exceptions import ScheduleFailError
from teuthology.suite import run
-from teuthology import packaging
class TestRun(object):
@patch('teuthology.suite.util.smtplib.SMTP')
@patch('teuthology.suite.util.git_ls_remote')
+ @patch('teuthology.suite.util.package_version_for_hash')
def test_teuthology_branch_nonexistent(
self,
+ m_pvfh,
m_git_ls_remote,
m_smtp,
):
self.klass(self.args)
m_smtp.assert_not_called()
- @patch('teuthology.suite.run.util.fetch_repos')
- @patch('teuthology.suite.run.util.git_branch_exists')
- @patch('teuthology.suite.run.util.package_version_for_hash')
- @patch('teuthology.suite.run.util.git_ls_remote')
- @patch('teuthology.suite.run.os.path.exists')
- def test_regression(
- self,
- m_qa_teuthology_branch_exists,
- m_git_ls_remote,
- m_package_version_for_hash,
- m_git_branch_exists,
- m_fetch_repos,
- ):
- config.use_shaman = False
- config.gitbuilder_host = 'example.com'
- m_package_version_for_hash.return_value = 'ceph_hash'
- m_git_branch_exists.return_value = True
- m_git_ls_remote.return_value = "suite_branch"
- m_qa_teuthology_branch_exists.return_value = False
- self.args_dict = {
- 'base_yaml_paths': [],
- 'ceph_branch': 'main',
- 'machine_type': 'smithi',
- 'flavor': 'default',
- 'kernel_branch': 'testing',
- 'suite': 'krbd',
- }
- self.args = YamlConfig.from_dict(self.args_dict)
- with patch.multiple(
- 'teuthology.packaging.GitbuilderProject',
- _get_package_sha1=DEFAULT,
- ) as m:
- assert m != dict()
- m['_get_package_sha1'].return_value = 'SHA1'
- conf = dict(
- os_type='ubuntu',
- os_version='16.04',
- )
- assert packaging.GitbuilderProject('ceph', conf).sha1 == 'SHA1'
- run_ = self.klass(self.args)
- assert run_.base_config['kernel']['sha1'] == 'SHA1'
-
class TestScheduleSuite(object):
klass = run.Run
@patch('teuthology.suite.run.Run.schedule_jobs')
@patch('teuthology.suite.run.Run.write_rerun_memo')
- @patch('teuthology.suite.util.has_packages_for_distro')
- @patch('teuthology.suite.util.get_package_versions')
@patch('teuthology.suite.util.get_install_task_flavor')
@patch('teuthology.suite.merge.open')
@patch('teuthology.suite.run.build_matrix')
m_build_matrix,
m_open,
m_get_install_task_flavor,
- m_get_package_versions,
- m_has_packages_for_distro,
m_write_rerun_memo,
m_schedule_jobs,
):
contextlib.closing(BytesIO())
]
m_get_install_task_flavor.return_value = 'default'
- m_get_package_versions.return_value = dict()
- m_has_packages_for_distro.return_value = True
+ m_package_version_for_hash.return_value = "v1"
# schedule_jobs() is just neutered; check calls below
self.args.newest = 0
count = runobj.schedule_suite()
assert(count == 1)
assert runobj.base_config['suite_sha1'] == 'suite_hash'
- m_has_packages_for_distro.assert_has_calls(
- [call('ceph_sha1', 'ubuntu', '14.04', 'default', {})],
+ m_package_version_for_hash.assert_has_calls(
+ [call('ceph_sha1', 'default', 'ubuntu', '14.04', 'machine_type')],
)
y = {
'teuthology': {
@patch('teuthology.suite.util.find_git_parents')
@patch('teuthology.suite.run.Run.schedule_jobs')
- @patch('teuthology.suite.util.has_packages_for_distro')
- @patch('teuthology.suite.util.get_package_versions')
@patch('teuthology.suite.util.get_install_task_flavor')
@patch('teuthology.suite.run.config_merge')
@patch('teuthology.suite.run.build_matrix')
m_build_matrix,
m_config_merge,
m_get_install_task_flavor,
- m_get_package_versions,
- m_has_packages_for_distro,
m_schedule_jobs,
m_find_git_parents,
):
m_get_arch.return_value = 'x86_64'
m_git_validate_sha1.return_value = self.args.ceph_sha1
- m_package_version_for_hash.return_value = 'ceph_version'
+ m_package_version_for_hash.return_value = None
m_git_ls_remote.return_value = 'suite_hash'
build_matrix_desc = 'desc'
build_matrix_frags = ['frag.yml']
m_build_matrix.return_value = build_matrix_output
m_config_merge.return_value = [(a, b, {}) for a, b in build_matrix_output]
m_get_install_task_flavor.return_value = 'default'
- m_get_package_versions.return_value = dict()
- m_has_packages_for_distro.side_effect = [
- False for i in range(11)
- ]
m_find_git_parents.side_effect = lambda proj, sha1, count: [f"{sha1}_{i}" for i in range(11)]
@patch('teuthology.suite.util.find_git_parents')
@patch('teuthology.suite.run.Run.schedule_jobs')
@patch('teuthology.suite.run.Run.write_rerun_memo')
- @patch('teuthology.suite.util.has_packages_for_distro')
- @patch('teuthology.suite.util.get_package_versions')
@patch('teuthology.suite.util.get_install_task_flavor')
@patch('teuthology.suite.run.config_merge')
@patch('teuthology.suite.run.build_matrix')
m_build_matrix,
m_config_merge,
m_get_install_task_flavor,
- m_get_package_versions,
- m_has_packages_for_distro,
m_write_rerun_memo,
m_schedule_jobs,
m_find_git_parents,
# everything will run NUM_FAILS+1 times
NUM_FAILS = 5
m_git_validate_sha1.return_value = self.args.ceph_sha1
- m_package_version_for_hash.return_value = 'ceph_version'
m_git_ls_remote.return_value = 'suite_hash'
build_matrix_desc = 'desc'
build_matrix_frags = ['frag.yml']
m_build_matrix.return_value = build_matrix_output
m_config_merge.return_value = [(a, b, {}) for a, b in build_matrix_output]
m_get_install_task_flavor.return_value = 'default'
- m_get_package_versions.return_value = dict()
# NUM_FAILS, then success
- m_has_packages_for_distro.side_effect = \
- [False for i in range(NUM_FAILS)] + [True]
+ m_package_version_for_hash.side_effect = \
+ [None for i in range(NUM_FAILS)] + ["ceph_version"]
m_find_git_parents.side_effect = lambda proj, sha1, count: [f"{sha1}_{i}" for i in range(NUM_FAILS)]
runobj.base_args = list()
count = runobj.schedule_suite()
assert count == 1
- m_has_packages_for_distro.assert_has_calls(
- [call(f"ceph_sha1_{i}", 'ubuntu', '14.04', 'default', {})
+ m_package_version_for_hash.assert_has_calls(
+ [call(f"ceph_sha1_{i}", 'default', 'ubuntu', '14.04', 'machine_type')
for i in range(NUM_FAILS)]
)
m_find_git_parents.assert_has_calls(
import pytest
import tempfile
-from copy import deepcopy
from mock import Mock, patch
from teuthology.config import config
class TestUtil(object):
- def setup_method(self):
- config.use_shaman = False
-
@patch('teuthology.suite.util.smtplib.SMTP')
def test_schedule_fail(self, m_smtp):
config.results_email = "example@example.com"
Branch 'no-branch' not found in repo: https://github.com/ceph/ceph-ci.git!"
m_smtp.assert_not_called()
- @patch('requests.get')
- def test_get_hash_success(self, m_get):
- mock_resp = Mock()
- mock_resp.ok = True
- mock_resp.text = "the_hash"
- m_get.return_value = mock_resp
- result = util.get_gitbuilder_hash()
- assert result == "the_hash"
-
- @patch('requests.get')
- def test_get_hash_fail(self, m_get):
- mock_resp = Mock()
- mock_resp.ok = False
- m_get.return_value = mock_resp
- result = util.get_gitbuilder_hash()
- assert result is None
-
- @patch('requests.get')
- def test_package_version_for_hash(self, m_get):
- mock_resp = Mock()
- mock_resp.ok = True
- mock_resp.text = "the_version"
- m_get.return_value = mock_resp
- result = util.package_version_for_hash("hash")
- assert result == "the_version"
-
@patch('requests.get')
def test_get_branch_info(self, m_get):
mock_resp = Mock()
class TestMissingPackages(object):
"""
Tests the functionality that checks to see if a
- scheduled job will have missing packages in gitbuilder.
+ scheduled job will have missing packages in shaman.
"""
- def setup_method(self):
- package_versions = {
- 'sha1': {
- 'ubuntu': {
- '14.04': {
- 'basic': '1.0'
- }
- }
- }
- }
- self.pv = package_versions
-
- def test_os_in_package_versions(self):
- assert self.pv == util.get_package_versions(
- "sha1",
- "ubuntu",
- "14.04",
- "basic",
- package_versions=self.pv
- )
-
- @patch("teuthology.suite.util.package_version_for_hash")
- def test_os_not_in_package_versions(self, m_package_versions_for_hash):
- m_package_versions_for_hash.return_value = "1.1"
- result = util.get_package_versions(
- "sha1",
- "rhel",
- "7.0",
- "basic",
- package_versions=self.pv
- )
- expected = deepcopy(self.pv)
- expected['sha1'].update(
- {
- 'rhel': {
- '7.0': {
- 'basic': '1.1'
- }
- }
- }
- )
- assert result == expected
-
- @patch("teuthology.suite.util.package_version_for_hash")
- def test_package_versions_not_found(self, m_package_versions_for_hash):
- # if gitbuilder returns a status that's not a 200, None is returned
- m_package_versions_for_hash.return_value = None
- result = util.get_package_versions(
- "sha1",
- "rhel",
- "7.0",
- "basic",
- package_versions=self.pv
- )
- assert result == self.pv
-
- @patch("teuthology.suite.util.package_version_for_hash")
- def test_no_package_versions_kwarg(self, m_package_versions_for_hash):
- m_package_versions_for_hash.return_value = "1.0"
- result = util.get_package_versions(
+ @patch("teuthology.packaging.ShamanProject._get_package_version")
+ def test_distro_has_packages(self, m_gpv):
+ m_gpv.return_value = "v1"
+ result = util.package_version_for_hash(
"sha1",
- "ubuntu",
- "14.04",
"basic",
- )
- expected = deepcopy(self.pv)
- assert result == expected
-
- def test_distro_has_packages(self):
- result = util.has_packages_for_distro(
- "sha1",
"ubuntu",
"14.04",
- "basic",
- package_versions=self.pv,
+ "mtype",
)
assert result
- def test_distro_does_not_have_packages(self):
- result = util.has_packages_for_distro(
+ @patch("teuthology.packaging.ShamanProject._get_package_version")
+ def test_distro_does_not_have_packages(self, m_gpv):
+ m_gpv.return_value = None
+ result = util.package_version_for_hash(
"sha1",
- "rhel",
- "7.0",
"basic",
- package_versions=self.pv,
- )
- assert not result
-
- @patch("teuthology.suite.util.get_package_versions")
- def test_has_packages_no_package_versions(self, m_get_package_versions):
- m_get_package_versions.return_value = self.pv
- result = util.has_packages_for_distro(
- "sha1",
"rhel",
"7.0",
- "basic",)
+ "mtype",
+ )
assert not result
class TestDistroDefaults(object):
- def setup_method(self):
- config.use_shaman = False
-
def test_distro_defaults_plana(self):
expected = ('x86_64', 'ubuntu/22.04',
OS(name='ubuntu', version='22.04', codename='jammy'))