|
Packit |
6f3914 |
# -*- coding: utf-8 -*-
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
# Copyright (C) 2014-2018 Red Hat, Inc.
|
|
Packit |
6f3914 |
#
|
|
Packit |
6f3914 |
# This copyrighted material is made available to anyone wishing to use,
|
|
Packit |
6f3914 |
# modify, copy, or redistribute it subject to the terms and conditions of
|
|
Packit |
6f3914 |
# the GNU General Public License v.2, or (at your option) any later version.
|
|
Packit |
6f3914 |
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
Packit |
6f3914 |
# ANY WARRANTY expressed or implied, including the implied warranties of
|
|
Packit |
6f3914 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
|
Packit |
6f3914 |
# Public License for more details. You should have received a copy of the
|
|
Packit |
6f3914 |
# GNU General Public License along with this program; if not, write to the
|
|
Packit |
6f3914 |
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
Packit |
6f3914 |
# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the
|
|
Packit |
6f3914 |
# source code or documentation are not subject to the GNU General Public
|
|
Packit |
6f3914 |
# License and may only be used or replicated with the express permission of
|
|
Packit |
6f3914 |
# Red Hat, Inc.
|
|
Packit |
6f3914 |
#
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
from __future__ import absolute_import
|
|
Packit |
6f3914 |
from __future__ import print_function
|
|
Packit |
6f3914 |
from __future__ import unicode_literals
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
import datetime
|
|
Packit |
6f3914 |
import itertools
|
|
Packit |
6f3914 |
import shutil
|
|
Packit |
6f3914 |
import tempfile
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
import hawkey
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
import dnf.pycomp
|
|
Packit |
6f3914 |
import dnf.cli.commands.updateinfo
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
import tests.support
|
|
Packit |
6f3914 |
from tests.support import mock
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
class UpdateInfoCommandTest(tests.support.DnfBaseTestCase):
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
"""Test case validating updateinfo commands."""
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
REPOS = []
|
|
Packit |
6f3914 |
CLI = "mock"
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
def setUp(self):
|
|
Packit |
6f3914 |
"""Prepare the test fixture."""
|
|
Packit |
6f3914 |
super(UpdateInfoCommandTest, self).setUp()
|
|
Packit |
6f3914 |
cachedir = tempfile.mkdtemp()
|
|
Packit |
6f3914 |
self.addCleanup(shutil.rmtree, cachedir)
|
|
Packit |
6f3914 |
self.cli.base.conf.cachedir = cachedir
|
|
Packit |
6f3914 |
self.cli.base.add_test_dir_repo('rpm', self.cli.base.conf)
|
|
Packit |
6f3914 |
self._stdout = dnf.pycomp.StringIO()
|
|
Packit |
6f3914 |
self.addCleanup(mock.patch.stopall)
|
|
Packit |
6f3914 |
mock.patch(
|
|
Packit |
6f3914 |
'dnf.cli.commands.updateinfo._',
|
|
Packit |
6f3914 |
dnf.pycomp.NullTranslations().ugettext).start()
|
|
Packit |
6f3914 |
mock.patch(
|
|
Packit |
6f3914 |
'dnf.cli.commands.updateinfo.print',
|
|
Packit |
6f3914 |
self._stub_print, create=True).start()
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
def _stub_print(self, *objects):
|
|
Packit |
6f3914 |
"""Pretend to print to standard output."""
|
|
Packit |
6f3914 |
print(*objects, file=self._stdout)
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
def test_avail_filter_pkgs(self):
|
|
Packit |
6f3914 |
"""Test querying with a packages filter."""
|
|
Packit |
6f3914 |
cmd = dnf.cli.commands.updateinfo.UpdateInfoCommand(self.cli)
|
|
Packit |
6f3914 |
tests.support.command_configure(cmd, [])
|
|
Packit |
6f3914 |
apkg_adv_insts = cmd.available_apkg_adv_insts(['to*r', 'nxst'])
|
|
Packit |
6f3914 |
self.assertCountEqual(
|
|
Packit |
6f3914 |
((apk.filename, adv.id, ins) for apk, adv, ins in apkg_adv_insts),
|
|
Packit |
6f3914 |
[('tour-5-1.noarch.rpm', 'DNF-2014-3', False)],
|
|
Packit |
6f3914 |
'incorrect pairs')
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
def test_avail_filter_pkgs_nonex(self):
|
|
Packit |
6f3914 |
"""Test querying with a non-existent packages filter."""
|
|
Packit |
6f3914 |
cmd = dnf.cli.commands.updateinfo.UpdateInfoCommand(self.cli)
|
|
Packit |
6f3914 |
tests.support.command_configure(cmd, ['non-existent'])
|
|
Packit |
6f3914 |
apkg_adv_insts = cmd.available_apkg_adv_insts(cmd.opts.spec)
|
|
Packit |
6f3914 |
self.assertCountEqual(
|
|
Packit |
6f3914 |
((apk.filename, adv.id, ins) for apk, adv, ins in apkg_adv_insts),
|
|
Packit |
6f3914 |
[], 'incorrect pairs')
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
def test_avail_filter_security(self):
|
|
Packit |
6f3914 |
"""Test querying with a security filter."""
|
|
Packit |
6f3914 |
cmd = dnf.cli.commands.updateinfo.UpdateInfoCommand(self.cli)
|
|
Packit |
6f3914 |
tests.support.command_configure(cmd, [])
|
|
Packit |
6f3914 |
apkg_adv_insts = cmd.available_apkg_adv_insts(['security'])
|
|
Packit |
6f3914 |
self.assertCountEqual(
|
|
Packit |
6f3914 |
((apk.filename, adv.id, ins) for apk, adv, ins in apkg_adv_insts),
|
|
Packit |
6f3914 |
[('tour-5-1.noarch.rpm', 'DNF-2014-3', False)],
|
|
Packit |
6f3914 |
'incorrect pairs')
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
def test_inst(self):
|
|
Packit |
6f3914 |
"""Test installed triplets querying."""
|
|
Packit |
6f3914 |
cmd = dnf.cli.commands.updateinfo.UpdateInfoCommand(self.cli)
|
|
Packit |
6f3914 |
tests.support.command_configure(cmd, [])
|
|
Packit |
6f3914 |
apkg_adv_insts = cmd.installed_apkg_adv_insts([])
|
|
Packit |
6f3914 |
self.assertCountEqual(
|
|
Packit |
6f3914 |
((apk.filename, adv.id, ins) for apk, adv, ins in apkg_adv_insts),
|
|
Packit |
6f3914 |
[('tour-4-4.noarch.rpm', 'DNF-2014-1', True),
|
|
Packit |
6f3914 |
('tour-5-0.noarch.rpm', 'DNF-2014-2', True)],
|
|
Packit |
6f3914 |
'incorrect pairs')
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
def test_inst_filter_bugfix(self):
|
|
Packit |
6f3914 |
"""Test querying with a bugfix filter."""
|
|
Packit |
6f3914 |
cmd = dnf.cli.commands.updateinfo.UpdateInfoCommand(self.cli)
|
|
Packit |
6f3914 |
tests.support.command_configure(cmd, ['bugfix'])
|
|
Packit |
6f3914 |
apkg_adv_insts = cmd.installed_apkg_adv_insts(cmd.opts.spec)
|
|
Packit |
6f3914 |
self.assertCountEqual(
|
|
Packit |
6f3914 |
((apk.filename, adv.id, ins) for apk, adv, ins in apkg_adv_insts),
|
|
Packit |
6f3914 |
[('tour-4-4.noarch.rpm', 'DNF-2014-1', True)],
|
|
Packit |
6f3914 |
'incorrect pairs')
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
def test_inst_filter_enhancement(self):
|
|
Packit |
6f3914 |
"""Test querying with an enhancement filter."""
|
|
Packit |
6f3914 |
cmd = dnf.cli.commands.updateinfo.UpdateInfoCommand(self.cli)
|
|
Packit |
6f3914 |
tests.support.command_configure(cmd, ['enhancement'])
|
|
Packit |
6f3914 |
apkg_adv_insts = cmd.installed_apkg_adv_insts(cmd.opts.spec)
|
|
Packit |
6f3914 |
self.assertCountEqual(
|
|
Packit |
6f3914 |
((apk.filename, adv.id, ins) for apk, adv, ins in apkg_adv_insts),
|
|
Packit |
6f3914 |
[('tour-5-0.noarch.rpm', 'DNF-2014-2', True)],
|
|
Packit |
6f3914 |
'incorrect pairs')
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
def test_upd(self):
|
|
Packit |
6f3914 |
"""Test updating triplets querying."""
|
|
Packit |
6f3914 |
cmd = dnf.cli.commands.updateinfo.UpdateInfoCommand(self.cli)
|
|
Packit |
6f3914 |
tests.support.command_configure(cmd, [])
|
|
Packit |
6f3914 |
apkg_adv_insts = cmd.updating_apkg_adv_insts([])
|
|
Packit |
6f3914 |
self.assertCountEqual(
|
|
Packit |
6f3914 |
((apk.filename, adv.id, ins) for apk, adv, ins in apkg_adv_insts),
|
|
Packit |
6f3914 |
[('tour-5-1.noarch.rpm', 'DNF-2014-3', False)],
|
|
Packit |
6f3914 |
'incorrect pairs')
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
def test_all(self):
|
|
Packit |
6f3914 |
"""Test all triplets querying."""
|
|
Packit |
6f3914 |
cmd = dnf.cli.commands.updateinfo.UpdateInfoCommand(self.cli)
|
|
Packit |
6f3914 |
tests.support.command_configure(cmd, [])
|
|
Packit |
6f3914 |
apkg_adv_insts = cmd.all_apkg_adv_insts([])
|
|
Packit |
6f3914 |
self.assertCountEqual(
|
|
Packit |
6f3914 |
((apk.filename, adv.id, ins) for apk, adv, ins in apkg_adv_insts),
|
|
Packit |
6f3914 |
[('tour-4-4.noarch.rpm', 'DNF-2014-1', True),
|
|
Packit |
6f3914 |
('tour-5-0.noarch.rpm', 'DNF-2014-2', True),
|
|
Packit |
6f3914 |
('tour-5-1.noarch.rpm', 'DNF-2014-3', False)])
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
def test_all_filter_advisories(self):
|
|
Packit |
6f3914 |
"""Test querying with an advisories filter."""
|
|
Packit |
6f3914 |
cmd = dnf.cli.commands.updateinfo.UpdateInfoCommand(self.cli)
|
|
Packit |
6f3914 |
tests.support.command_configure(cmd, ['DNF-201*-[13]', 'NO-0000-0'])
|
|
Packit |
6f3914 |
apkg_adv_insts = cmd.all_apkg_adv_insts(cmd.opts.spec)
|
|
Packit |
6f3914 |
self.assertCountEqual(
|
|
Packit |
6f3914 |
((apk.filename, adv.id, ins) for apk, adv, ins in apkg_adv_insts),
|
|
Packit |
6f3914 |
[('tour-4-4.noarch.rpm', 'DNF-2014-1', True),
|
|
Packit |
6f3914 |
('tour-5-1.noarch.rpm', 'DNF-2014-3', False)],
|
|
Packit |
6f3914 |
'incorrect pairs')
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
def test_display_list_mixed(self):
|
|
Packit |
6f3914 |
"""Test list displaying with mixed installs."""
|
|
Packit |
6f3914 |
apkg_adv_insts = itertools.chain(
|
|
Packit |
6f3914 |
((apkg, adv, False)
|
|
Packit |
6f3914 |
for pkg in self.cli.base.sack.query().installed()
|
|
Packit |
6f3914 |
for adv in pkg.get_advisories(hawkey.GT)
|
|
Packit |
6f3914 |
for apkg in adv.packages),
|
|
Packit |
6f3914 |
((apkg, adv, True)
|
|
Packit |
6f3914 |
for pkg in self.cli.base.sack.query().installed()
|
|
Packit |
6f3914 |
for adv in pkg.get_advisories(hawkey.LT | hawkey.EQ)
|
|
Packit |
6f3914 |
for apkg in adv.packages))
|
|
Packit |
6f3914 |
cmd = dnf.cli.commands.updateinfo.UpdateInfoCommand(self.cli)
|
|
Packit |
6f3914 |
tests.support.command_configure(cmd, ['--all'])
|
|
Packit |
6f3914 |
cmd.display_list(apkg_adv_insts)
|
|
Packit |
6f3914 |
self.assertEqual(
|
|
Packit |
6f3914 |
self._stdout.getvalue(),
|
|
Packit |
6f3914 |
'i DNF-2014-1 bugfix tour-4-4.noarch\n'
|
|
Packit |
6f3914 |
'i DNF-2014-2 enhancement tour-5-0.noarch\n'
|
|
Packit |
6f3914 |
' DNF-2014-3 Unknown/Sec. tour-5-1.noarch\n',
|
|
Packit |
6f3914 |
'incorrect output'
|
|
Packit |
6f3914 |
)
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
def test_display_info_verbose(self):
|
|
Packit |
6f3914 |
"""Test verbose displaying."""
|
|
Packit |
6f3914 |
apkg_adv_insts = (
|
|
Packit |
6f3914 |
(apkg, adv, False) for pkg in self.cli.base.sack.query().installed()
|
|
Packit |
6f3914 |
for adv in pkg.get_advisories(hawkey.GT)
|
|
Packit |
6f3914 |
for apkg in adv.packages
|
|
Packit |
6f3914 |
)
|
|
Packit |
6f3914 |
self.cli.base.set_debuglevel(dnf.const.VERBOSE_LEVEL)
|
|
Packit |
6f3914 |
cmd = dnf.cli.commands.updateinfo.UpdateInfoCommand(self.cli)
|
|
Packit |
6f3914 |
tests.support.command_configure(cmd, [])
|
|
Packit |
6f3914 |
cmd.display_info(apkg_adv_insts)
|
|
Packit |
6f3914 |
updated = datetime.datetime.fromtimestamp(1404841143)
|
|
Packit |
6f3914 |
self.assertEqual(self._stdout.getvalue(),
|
|
Packit |
6f3914 |
'========================================'
|
|
Packit |
6f3914 |
'=======================================\n'
|
|
Packit |
6f3914 |
' tour-5-1\n'
|
|
Packit |
6f3914 |
'========================================'
|
|
Packit |
6f3914 |
'=======================================\n'
|
|
Packit |
6f3914 |
' Update ID: DNF-2014-3\n'
|
|
Packit |
6f3914 |
' Type: security\n'
|
|
Packit |
6f3914 |
' Updated: ' + str(updated) + '\n'
|
|
Packit |
6f3914 |
'Description: testing advisory\n'
|
|
Packit |
6f3914 |
' Files: tour-5-1.noarch.rpm\n',
|
|
Packit |
6f3914 |
'incorrect output')
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
def test_display_info_verbose_mixed(self):
|
|
Packit |
6f3914 |
"""Test verbose displaying with mixed installs."""
|
|
Packit |
6f3914 |
apkg_adv_insts = itertools.chain(
|
|
Packit |
6f3914 |
((apkg, adv, False)
|
|
Packit |
6f3914 |
for pkg in self.cli.base.sack.query().installed()
|
|
Packit |
6f3914 |
for adv in pkg.get_advisories(hawkey.GT)
|
|
Packit |
6f3914 |
for apkg in adv.packages),
|
|
Packit |
6f3914 |
((apkg, adv, True)
|
|
Packit |
6f3914 |
for pkg in self.cli.base.sack.query().installed()
|
|
Packit |
6f3914 |
for adv in pkg.get_advisories(hawkey.LT | hawkey.EQ)
|
|
Packit |
6f3914 |
for apkg in adv.packages))
|
|
Packit |
6f3914 |
self.cli.base.set_debuglevel(dnf.const.VERBOSE_LEVEL)
|
|
Packit |
6f3914 |
cmd = dnf.cli.commands.updateinfo.UpdateInfoCommand(self.cli)
|
|
Packit |
6f3914 |
tests.support.command_configure(cmd, ['--all'])
|
|
Packit |
6f3914 |
cmd.display_info(apkg_adv_insts)
|
|
Packit |
6f3914 |
updated1 = datetime.datetime.fromtimestamp(1404840841)
|
|
Packit |
6f3914 |
updated2 = datetime.datetime.fromtimestamp(1404841082)
|
|
Packit |
6f3914 |
updated3 = datetime.datetime.fromtimestamp(1404841143)
|
|
Packit |
6f3914 |
self.assertEqual(self._stdout.getvalue(),
|
|
Packit |
6f3914 |
'========================================'
|
|
Packit |
6f3914 |
'=======================================\n'
|
|
Packit |
6f3914 |
' tour-4-4\n'
|
|
Packit |
6f3914 |
'========================================'
|
|
Packit |
6f3914 |
'=======================================\n'
|
|
Packit |
6f3914 |
' Update ID: DNF-2014-1\n'
|
|
Packit |
6f3914 |
' Type: bugfix\n'
|
|
Packit |
6f3914 |
' Updated: ' + str(updated1) + '\n'
|
|
Packit |
6f3914 |
'Description: testing advisory\n'
|
|
Packit |
6f3914 |
' Files: tour-4-4.noarch.rpm\n'
|
|
Packit |
6f3914 |
' Installed: true\n'
|
|
Packit |
6f3914 |
'\n'
|
|
Packit |
6f3914 |
'========================================'
|
|
Packit |
6f3914 |
'=======================================\n'
|
|
Packit |
6f3914 |
' tour-5-0\n'
|
|
Packit |
6f3914 |
'========================================'
|
|
Packit |
6f3914 |
'=======================================\n'
|
|
Packit |
6f3914 |
' Update ID: DNF-2014-2\n'
|
|
Packit |
6f3914 |
' Type: enhancement\n'
|
|
Packit |
6f3914 |
' Updated: ' + str(updated2) + '\n'
|
|
Packit |
6f3914 |
'Description: testing advisory\n'
|
|
Packit |
6f3914 |
' Files: tour-5-0.noarch.rpm\n'
|
|
Packit |
6f3914 |
' Installed: true\n'
|
|
Packit |
6f3914 |
'\n'
|
|
Packit |
6f3914 |
'========================================'
|
|
Packit |
6f3914 |
'=======================================\n'
|
|
Packit |
6f3914 |
' tour-5-1\n'
|
|
Packit |
6f3914 |
'========================================'
|
|
Packit |
6f3914 |
'=======================================\n'
|
|
Packit |
6f3914 |
' Update ID: DNF-2014-3\n'
|
|
Packit |
6f3914 |
' Type: security\n'
|
|
Packit |
6f3914 |
' Updated: ' + str(updated3) + '\n'
|
|
Packit |
6f3914 |
'Description: testing advisory\n'
|
|
Packit |
6f3914 |
' Files: tour-5-1.noarch.rpm\n'
|
|
Packit |
6f3914 |
' Installed: false\n',
|
|
Packit |
6f3914 |
'incorrect output')
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
# This test also tests the display_summary and available_apkg_adv_insts
|
|
Packit |
6f3914 |
# methods.
|
|
Packit |
6f3914 |
def test_run_available(self):
|
|
Packit |
6f3914 |
"""Test running with available advisories."""
|
|
Packit |
6f3914 |
cmd = dnf.cli.commands.updateinfo.UpdateInfoCommand(self.cli)
|
|
Packit |
6f3914 |
tests.support.command_run(cmd, [])
|
|
Packit |
6f3914 |
self.assertEqual(self._stdout.getvalue(),
|
|
Packit |
6f3914 |
'Updates Information Summary: available\n'
|
|
Packit |
6f3914 |
' 1 Security notice(s)\n'
|
|
Packit |
6f3914 |
' 1 Unknown Security notice(s)\n',
|
|
Packit |
6f3914 |
'incorrect output')
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
# This test also tests the display_list and available_apkg_adv_insts
|
|
Packit |
6f3914 |
# methods.
|
|
Packit |
6f3914 |
def test_run_list(self):
|
|
Packit |
6f3914 |
"""Test running the list sub-command."""
|
|
Packit |
6f3914 |
cmd = dnf.cli.commands.updateinfo.UpdateInfoCommand(self.cli)
|
|
Packit |
6f3914 |
tests.support.command_run(cmd, ['list'])
|
|
Packit |
6f3914 |
self.assertEqual(self._stdout.getvalue(),
|
|
Packit |
6f3914 |
'DNF-2014-3 Unknown/Sec. tour-5-1.noarch\n',
|
|
Packit |
6f3914 |
'incorrect output')
|
|
Packit |
6f3914 |
|
|
Packit |
6f3914 |
# This test also tests the display_info and available_apkg_adv_insts
|
|
Packit |
6f3914 |
# methods.
|
|
Packit |
6f3914 |
def test_run_info(self):
|
|
Packit |
6f3914 |
"""Test running the info sub-command."""
|
|
Packit |
6f3914 |
self.cli.base.set_debuglevel(2)
|
|
Packit |
6f3914 |
cmd = dnf.cli.commands.updateinfo.UpdateInfoCommand(self.cli)
|
|
Packit |
6f3914 |
tests.support.command_run(cmd, ['info'])
|
|
Packit |
6f3914 |
updated = datetime.datetime.fromtimestamp(1404841143)
|
|
Packit |
6f3914 |
self.assertEqual(self._stdout.getvalue(),
|
|
Packit |
6f3914 |
'========================================'
|
|
Packit |
6f3914 |
'=======================================\n'
|
|
Packit |
6f3914 |
' tour-5-1\n'
|
|
Packit |
6f3914 |
'========================================'
|
|
Packit |
6f3914 |
'=======================================\n'
|
|
Packit |
6f3914 |
' Update ID: DNF-2014-3\n'
|
|
Packit |
6f3914 |
' Type: security\n'
|
|
Packit |
6f3914 |
' Updated: ' + str(updated) + '\n'
|
|
Packit |
6f3914 |
'Description: testing advisory\n',
|
|
Packit |
6f3914 |
'incorrect output')
|