def test_get_rpms_in_external_repo_invalid_repo_url(): """ Test that an exception is raised when an invalid repo URL is passed in. """ external_repo_url = "http://domain.local/repo/latest/" arches = ["aarch64", "x86_64"] cache_dir_name = "module-el-build-12" expected = ( r"The external repo http://domain.local/repo/latest/ does not contain the \$arch variable" ) with pytest.raises(ValueError, match=expected): default_modules._get_rpms_in_external_repo(external_repo_url, arches, cache_dir_name)
def test_get_rpms_in_external_repo_failed_to_create_cache(mock_makedirs): """ Test that an exception is raised when the cache can't be created. """ exc = OSError() exc.errno = errno.EACCES mock_makedirs.side_effect = exc external_repo_url = "http://domain.local/repo/latest/$arch/" arches = ["aarch64", "x86_64"] cache_dir_name = "module-el-build-12" expected = "The MBS cache is not writeable." with pytest.raises(RuntimeError, match=expected): default_modules._get_rpms_in_external_repo(external_repo_url, arches, cache_dir_name)
def test_get_rpms_in_external_repo_failed_to_load(mock_makedirs, mock_dnf_base): """ Test that an exception is raised when an external repo can't be loaded. """ class FakeRepo(dict): @staticmethod def add_new_repo(*args, **kwargs): pass mock_dnf_base.return_value.update_cache.side_effect = dnf.exceptions.RepoError("Failed") external_repo_url = "http://domain.local/repo/latest/$arch/" arches = ["aarch64", "x86_64"] cache_dir_name = "module-el-build-12" expected = "Failed to load the external repos" with pytest.raises(RuntimeError, match=expected): default_modules._get_rpms_in_external_repo(external_repo_url, arches, cache_dir_name)
def test_get_rpms_in_external_repo(mock_makedirs, mock_dnf_base): """ Test that DNF can query the external repos for the available packages. """ RPM = namedtuple("RPM", ["arch", "epoch", "name", "release", "version"]) mock_dnf_base.return_value.sack.query.return_value.available.return_value = [ RPM("aarch64", 0, "python", "1.el8", "2.7"), RPM("aarch64", 0, "python", "1.el8", "3.7"), RPM("x86_64", 0, "python", "1.el8", "2.7"), RPM("x86_64", 0, "python", "1.el8", "3.7"), RPM("i686", 0, "python", "1.el8", "2.7"), RPM("i686", 0, "python", "1.el8", "3.7"), ] external_repo_url = "http://domain.local/repo/latest/$arch/" arches = ["aarch64", "x86_64", "i686"] cache_dir_name = "module-el-build-12" rv = default_modules._get_rpms_in_external_repo(external_repo_url, arches, cache_dir_name) expected = { "python-0:2.7-1.el8.aarch64", "python-0:3.7-1.el8.aarch64", "python-0:2.7-1.el8.x86_64", "python-0:3.7-1.el8.x86_64", "python-0:2.7-1.el8.i686", "python-0:3.7-1.el8.i686", } assert rv == expected # Test that i686 is mapped to i386 using the koji.canonArch(). mock_dnf_base.return_value.repos.add_new_repo.assert_called_with( "repo_i386", mock_dnf_base.return_value.conf, baseurl=["http://domain.local/repo/latest/i386/"], minrate=conf.dnf_minrate, )