|
Packit Service |
21c75c |
# -*- coding: utf-8 -*-
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
# Copyright (C) 2012-2018 Red Hat, Inc.
|
|
Packit Service |
21c75c |
#
|
|
Packit Service |
21c75c |
# This copyrighted material is made available to anyone wishing to use,
|
|
Packit Service |
21c75c |
# modify, copy, or redistribute it subject to the terms and conditions of
|
|
Packit Service |
21c75c |
# the GNU General Public License v.2, or (at your option) any later version.
|
|
Packit Service |
21c75c |
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
Packit Service |
21c75c |
# ANY WARRANTY expressed or implied, including the implied warranties of
|
|
Packit Service |
21c75c |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
|
Packit Service |
21c75c |
# Public License for more details. You should have received a copy of the
|
|
Packit Service |
21c75c |
# GNU General Public License along with this program; if not, write to the
|
|
Packit Service |
21c75c |
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
Packit Service |
21c75c |
# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the
|
|
Packit Service |
21c75c |
# source code or documentation are not subject to the GNU General Public
|
|
Packit Service |
21c75c |
# License and may only be used or replicated with the express permission of
|
|
Packit Service |
21c75c |
# Red Hat, Inc.
|
|
Packit Service |
21c75c |
#
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
from __future__ import absolute_import
|
|
Packit Service |
21c75c |
from __future__ import unicode_literals
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
import argparse
|
|
Packit Service |
21c75c |
import os
|
|
Packit Service |
21c75c |
import re
|
|
Packit Service |
21c75c |
from argparse import Namespace
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
import dnf.cli.cli
|
|
Packit Service |
21c75c |
import dnf.conf
|
|
Packit Service |
21c75c |
import dnf.goal
|
|
Packit Service |
21c75c |
import dnf.repo
|
|
Packit Service |
21c75c |
import dnf.repodict
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
import tests.support
|
|
Packit Service |
21c75c |
from tests.support import mock
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
VERSIONS_OUTPUT = """\
|
|
Packit Service |
21c75c |
Installed: pepper-0:20-0.x86_64 at Thu Jan 1 00:00:00 1970
|
|
Packit Service |
21c75c |
Built : at Thu Jan 1 00:00:00 1970
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
Installed: tour-0:5-0.noarch at Thu Jan 1 00:00:00 1970
|
|
Packit Service |
21c75c |
Built : at Thu Jan 1 00:00:00 1970
|
|
Packit Service |
21c75c |
"""
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
class VersionStringTest(tests.support.DnfBaseTestCase):
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
REPOS = []
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
def test_print_versions(self):
|
|
Packit Service |
21c75c |
output = tests.support.MockOutput()
|
|
Packit Service |
21c75c |
with mock.patch('sys.stdout') as stdout,\
|
|
Packit Service |
21c75c |
mock.patch('dnf.sack._rpmdb_sack', return_value=self.base.sack):
|
|
Packit Service |
21c75c |
dnf.cli.cli.print_versions(['pepper', 'tour'], self.base, output)
|
|
Packit Service |
21c75c |
written = ''.join([mc[1][0] for mc in stdout.method_calls
|
|
Packit Service |
21c75c |
if mc[0] == 'write'])
|
|
Packit Service |
21c75c |
self.assertEqual(written, VERSIONS_OUTPUT)
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
@mock.patch('dnf.cli.cli.logger', new_callable=tests.support.mock_logger)
|
|
Packit Service |
21c75c |
class BaseCliTest(tests.support.ResultTestCase):
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
REPOS = ["main", "updates"]
|
|
Packit Service |
21c75c |
BASE_CLI = True
|
|
Packit Service |
21c75c |
INIT_SACK = True
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
def setUp(self):
|
|
Packit Service |
21c75c |
super(BaseCliTest, self).setUp()
|
|
Packit Service |
21c75c |
self.base.output.term = tests.support.MockTerminal()
|
|
Packit Service |
21c75c |
self.base.downgrade_to = mock.Mock(wraps=self.base.downgrade_to)
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
def test_downgradePkgs(self, logger):
|
|
Packit Service |
21c75c |
self.base.downgradePkgs(('tour',))
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
self.assertEqual(self.base.downgrade_to.mock_calls, [mock.call('tour', strict=False)])
|
|
Packit Service |
21c75c |
self.assertEqual(logger.mock_calls, [])
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
def test_downgradePkgs_notfound(self, logger):
|
|
Packit Service |
21c75c |
with self.assertRaises(dnf.exceptions.Error) as ctx:
|
|
Packit Service |
21c75c |
self.base.downgradePkgs(('non-existent',))
|
|
Packit Service |
21c75c |
self.assertEqual(str(ctx.exception), 'No packages marked for downgrade.')
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
self.assertEqual(self.base.downgrade_to.mock_calls,
|
|
Packit Service |
21c75c |
[mock.call('non-existent', strict=False)])
|
|
Packit Service |
21c75c |
self.assertEqual(logger.mock_calls,
|
|
Packit Service |
21c75c |
[mock.call.info('No package %s available.',
|
|
Packit Service |
21c75c |
'non-existent')])
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
@mock.patch('dnf.cli.cli._', dnf.pycomp.NullTranslations().ugettext)
|
|
Packit Service |
21c75c |
def test_downgradePkgs_notinstalled(self, logger):
|
|
Packit Service |
21c75c |
tests.support.ObjectMatcher(dnf.package.Package, {'name': 'lotus'})
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
with self.assertRaises(dnf.exceptions.Error) as ctx:
|
|
Packit Service |
21c75c |
self.base.downgradePkgs(('lotus',))
|
|
Packit Service |
21c75c |
self.assertEqual(str(ctx.exception), 'No packages marked for downgrade.')
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
self.assertEqual(self.base.downgrade_to.mock_calls, [mock.call('lotus', strict=False)])
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
@mock.patch('dnf.cli.cli.Cli._read_conf_file')
|
|
Packit Service |
21c75c |
class CliTest(tests.support.DnfBaseTestCase):
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
REPOS = ["main"]
|
|
Packit Service |
21c75c |
CLI = "init"
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
def setUp(self):
|
|
Packit Service |
21c75c |
super(CliTest, self).setUp()
|
|
Packit Service |
21c75c |
self.base.output = tests.support.MockOutput()
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
def test_knows_upgrade(self, _):
|
|
Packit Service |
21c75c |
upgrade = self.cli.cli_commands['upgrade']
|
|
Packit Service |
21c75c |
update = self.cli.cli_commands['update']
|
|
Packit Service |
21c75c |
self.assertIs(upgrade, update)
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
def test_simple(self, _):
|
|
Packit Service |
21c75c |
self.assertFalse(self.base.conf.assumeyes)
|
|
Packit Service |
21c75c |
self.cli.configure(['update', '-y'])
|
|
Packit Service |
21c75c |
self.assertTrue(self.base.conf.assumeyes)
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
def test_glob_options_cmds(self, _):
|
|
Packit Service |
21c75c |
params = [
|
|
Packit Service |
21c75c |
['install', '-y', 'pkg1', 'pkg2'],
|
|
Packit Service |
21c75c |
['install', 'pkg1', '-y', 'pkg2'],
|
|
Packit Service |
21c75c |
['install', 'pkg1', 'pkg2', '-y'],
|
|
Packit Service |
21c75c |
['-y', 'install', 'pkg1', 'pkg2']
|
|
Packit Service |
21c75c |
]
|
|
Packit Service |
21c75c |
for param in params:
|
|
Packit Service |
21c75c |
self.cli.configure(args=param)
|
|
Packit Service |
21c75c |
self.assertTrue(self.base.conf.assumeyes)
|
|
Packit Service |
21c75c |
self.assertEqual(self.cli.command.opts.command, "install")
|
|
Packit Service |
21c75c |
self.assertEqual(self.cli.command.opts.pkg_specs, ["pkg1", "pkg2"])
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
def test_configure_repos(self, _):
|
|
Packit Service |
21c75c |
opts = Namespace()
|
|
Packit Service |
21c75c |
opts.repo = []
|
|
Packit Service |
21c75c |
opts.repos_ed = [('*', 'disable'), ('comb', 'enable')]
|
|
Packit Service |
21c75c |
opts.cacheonly = True
|
|
Packit Service |
21c75c |
opts.nogpgcheck = True
|
|
Packit Service |
21c75c |
opts.repofrompath = {}
|
|
Packit Service |
21c75c |
self.base._repos = dnf.repodict.RepoDict()
|
|
Packit Service |
21c75c |
self.base._repos.add(tests.support.MockRepo('one', self.base.conf))
|
|
Packit Service |
21c75c |
self.base._repos.add(tests.support.MockRepo('two', self.base.conf))
|
|
Packit Service |
21c75c |
self.base._repos.add(tests.support.MockRepo('comb', self.base.conf))
|
|
Packit Service |
21c75c |
self.cli._configure_repos(opts)
|
|
Packit Service |
21c75c |
self.assertFalse(self.base.repos['one'].enabled)
|
|
Packit Service |
21c75c |
self.assertFalse(self.base.repos['two'].enabled)
|
|
Packit Service |
21c75c |
self.assertTrue(self.base.repos['comb'].enabled)
|
|
Packit Service |
21c75c |
self.assertFalse(self.base.repos["comb"].gpgcheck)
|
|
Packit Service |
21c75c |
self.assertFalse(self.base.repos["comb"].repo_gpgcheck)
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
def test_configure_repos_expired(self, _):
|
|
Packit Service |
21c75c |
"""Ensure that --cacheonly beats the expired status."""
|
|
Packit Service |
21c75c |
opts = Namespace()
|
|
Packit Service |
21c75c |
opts.repo = []
|
|
Packit Service |
21c75c |
opts.repos_ed = []
|
|
Packit Service |
21c75c |
opts.cacheonly = True
|
|
Packit Service |
21c75c |
opts.repofrompath = {}
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
pers = self.base._repo_persistor
|
|
Packit Service |
21c75c |
pers.get_expired_repos = mock.Mock(return_value=('one',))
|
|
Packit Service |
21c75c |
self.base._repos = dnf.repodict.RepoDict()
|
|
Packit Service |
21c75c |
self.base._repos.add(tests.support.MockRepo('one', self.base.conf))
|
|
Packit Service |
21c75c |
self.cli._configure_repos(opts)
|
|
Packit Service |
21c75c |
# _process_demands() should respect --cacheonly in spite of modified demands
|
|
Packit Service |
21c75c |
self.cli.demands.fresh_metadata = False
|
|
Packit Service |
21c75c |
self.cli.demands.cacheonly = True
|
|
Packit Service |
21c75c |
self.cli._process_demands()
|
|
Packit Service |
21c75c |
self.assertEqual(self.base.repos['one']._repo.getSyncStrategy(),
|
|
Packit Service |
21c75c |
dnf.repo.SYNC_ONLY_CACHE)
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
@mock.patch('dnf.logging.Logging._setup', new=mock.MagicMock)
|
|
Packit Service |
21c75c |
class ConfigureTest(tests.support.DnfBaseTestCase):
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
REPOS = ["main"]
|
|
Packit Service |
21c75c |
# CLI = "init"
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
def setUp(self):
|
|
Packit Service |
21c75c |
super(ConfigureTest, self).setUp()
|
|
Packit Service |
21c75c |
self.base._conf = dnf.conf.Conf()
|
|
Packit Service |
21c75c |
self.base.output = tests.support.MockOutput()
|
|
Packit Service |
21c75c |
self.base._plugins = mock.Mock()
|
|
Packit Service |
21c75c |
self.cli = dnf.cli.cli.Cli(self.base)
|
|
Packit Service |
21c75c |
self.cli.command = mock.Mock()
|
|
Packit Service |
21c75c |
self.conffile = os.path.join(tests.support.dnf_toplevel(), "etc/dnf/dnf.conf")
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
@mock.patch('dnf.util.am_i_root', lambda: False)
|
|
Packit Service |
21c75c |
def test_configure_user(self):
|
|
Packit Service |
21c75c |
""" Test Cli.configure as user."""
|
|
Packit Service |
21c75c |
# call setUp() once again *after* am_i_root() is mocked so the cachedir is set as expected
|
|
Packit Service |
21c75c |
self.setUp()
|
|
Packit Service |
21c75c |
self.base._conf.installroot = self._installroot
|
|
Packit Service |
21c75c |
with mock.patch('dnf.rpm.detect_releasever', return_value=69):
|
|
Packit Service |
21c75c |
self.cli.configure(['update', '-c', self.conffile])
|
|
Packit Service |
21c75c |
reg = re.compile('^' + self._installroot + '/var/tmp/dnf-[.a-zA-Z0-9_-]+$')
|
|
Packit Service |
21c75c |
self.assertIsNotNone(reg.match(self.base.conf.cachedir))
|
|
Packit Service |
21c75c |
parser = argparse.ArgumentParser()
|
|
Packit Service |
21c75c |
expected = "%s update -c %s " % (parser.prog, self.conffile)
|
|
Packit Service |
21c75c |
self.assertEqual(self.cli.cmdstring, expected)
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
@mock.patch('dnf.util.am_i_root', lambda: True)
|
|
Packit Service |
21c75c |
def test_configure_root(self):
|
|
Packit Service |
21c75c |
""" Test Cli.configure as root."""
|
|
Packit Service |
21c75c |
self.base._conf = dnf.conf.Conf()
|
|
Packit Service |
21c75c |
with mock.patch('dnf.rpm.detect_releasever', return_value=69):
|
|
Packit Service |
21c75c |
self.cli.configure(['update', '--nogpgcheck', '-c', self.conffile])
|
|
Packit Service |
21c75c |
reg = re.compile('^/var/cache/dnf$')
|
|
Packit Service |
21c75c |
self.assertIsNotNone(reg.match(self.base.conf.system_cachedir))
|
|
Packit Service |
21c75c |
parser = argparse.ArgumentParser()
|
|
Packit Service |
21c75c |
expected = "%s update --nogpgcheck -c %s " % (parser.prog, self.conffile)
|
|
Packit Service |
21c75c |
self.assertEqual(self.cli.cmdstring, expected)
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
def test_configure_verbose(self):
|
|
Packit Service |
21c75c |
self.base._conf.installroot = self._installroot
|
|
Packit Service |
21c75c |
with mock.patch('dnf.rpm.detect_releasever', return_value=69):
|
|
Packit Service |
21c75c |
self.cli.configure(['-v', 'update', '-c', self.conffile])
|
|
Packit Service |
21c75c |
parser = argparse.ArgumentParser()
|
|
Packit Service |
21c75c |
expected = "%s -v update -c %s " % (parser.prog, self.conffile)
|
|
Packit Service |
21c75c |
self.assertEqual(self.cli.cmdstring, expected)
|
|
Packit Service |
21c75c |
self.assertEqual(self.base.conf.debuglevel, 6)
|
|
Packit Service |
21c75c |
self.assertEqual(self.base.conf.errorlevel, 6)
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
@mock.patch('dnf.cli.cli.Cli._parse_commands', new=mock.MagicMock)
|
|
Packit Service |
21c75c |
@mock.patch('os.path.exists', return_value=True)
|
|
Packit Service |
21c75c |
def test_conf_exists_in_installroot(self, ospathexists):
|
|
Packit Service |
21c75c |
with mock.patch('logging.Logger.warning'), \
|
|
Packit Service |
21c75c |
mock.patch('dnf.rpm.detect_releasever', return_value=69):
|
|
Packit Service |
21c75c |
self.cli.configure(['--installroot', '/roots/dnf', 'update'])
|
|
Packit Service |
21c75c |
self.assertEqual(self.base.conf.config_file_path, '/roots/dnf/etc/dnf/dnf.conf')
|
|
Packit Service |
21c75c |
self.assertEqual(self.base.conf.installroot, '/roots/dnf')
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
@mock.patch('dnf.cli.cli.Cli._parse_commands', new=mock.MagicMock)
|
|
Packit Service |
21c75c |
@mock.patch('os.path.exists', return_value=False)
|
|
Packit Service |
21c75c |
def test_conf_notexists_in_installroot(self, ospathexists):
|
|
Packit Service |
21c75c |
with mock.patch('dnf.rpm.detect_releasever', return_value=69):
|
|
Packit Service |
21c75c |
self.cli.configure(['--installroot', '/roots/dnf', 'update'])
|
|
Packit Service |
21c75c |
self.assertEqual(self.base.conf.config_file_path, '/etc/dnf/dnf.conf')
|
|
Packit Service |
21c75c |
self.assertEqual(self.base.conf.installroot, '/roots/dnf')
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
@mock.patch('dnf.cli.cli.Cli._parse_commands', new=mock.MagicMock)
|
|
Packit Service |
21c75c |
def test_installroot_with_etc(self):
|
|
Packit Service |
21c75c |
"""Test that conffile is detected in a new installroot."""
|
|
Packit Service |
21c75c |
self.base.extcmds = []
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
tlv = tests.support.dnf_toplevel()
|
|
Packit Service |
21c75c |
self.cli.configure(['--installroot', tlv, 'update'])
|
|
Packit Service |
21c75c |
self.assertEqual(self.base.conf.config_file_path, '%s/etc/dnf/dnf.conf' % tlv)
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
def test_installroot_configurable(self):
|
|
Packit Service |
21c75c |
"""Test that conffile is detected in a new installroot."""
|
|
Packit Service |
21c75c |
|
|
Packit Service |
21c75c |
conf = os.path.join(tests.support.dnf_toplevel(), "tests/etc/installroot.conf")
|
|
Packit Service |
21c75c |
self.cli.configure(['-c', conf, '--nogpgcheck', '--releasever', '17', 'update'])
|
|
Packit Service |
21c75c |
self.assertEqual(self.base.conf.installroot, '/roots/dnf')
|