From b067bf9d5cbab91da407b05ba75d3ba8ef72d18b Mon Sep 17 00:00:00 2001 From: Guido Günther Date: Fri, 18 Apr 2014 16:31:56 +0200 Subject: Split out and test DebianDistro --- tests/test_debiandistro.py | 94 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 tests/test_debiandistro.py (limited to 'tests') diff --git a/tests/test_debiandistro.py b/tests/test_debiandistro.py new file mode 100644 index 0000000..10586f9 --- /dev/null +++ b/tests/test_debiandistro.py @@ -0,0 +1,94 @@ +# vim: set fileencoding=utf-8 : +# (C) 2014 Guido Günther +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +"""Test L{whatmaps.process} config""" + +import unittest +from mock import patch + +from whatmaps.debiandistro import DebianDistro +from whatmaps.debianpkg import DebianPkg + +class TestDebianDistro(unittest.TestCase): + def test_vars(self): + """Check Debian distro vars""" + self.assertEqual(DebianDistro.id, 'Debian') + self.assertIsNotNone(DebianDistro._pkg_services) + self.assertIsNotNone(DebianDistro._pkg_service_blacklist) + self.assertIsNotNone(DebianDistro.service_blacklist) + self.assertEqual(DebianDistro.restart_service_cmd('aservice'), + ['invoke-rc.d', 'aservice', 'restart']) + self.assertTrue(DebianDistro.has_apt()) + + def test_pkg_by_file(self): + with patch('subprocess.Popen') as mock: + PopenMock = mock.return_value + PopenMock.returncode = 0 + PopenMock.communicate.return_value = ['apackage'] + + pkg = DebianDistro.pkg_by_file('afile') + self.assertIsInstance(pkg, DebianPkg) + self.assertEqual(pkg.name, 'apackage') + PopenMock.communicate.assert_called_once_with() + mock.assert_called_once_with(['dpkg-query', '-S', 'afile'], + stderr=-1, stdout=-1) + + def test_pkg_by_file_failure(self): + """Test if None is returned on subcommand erros""" + with patch('subprocess.Popen') as mock: + PopenMock = mock.return_value + PopenMock.returncode = 1 + PopenMock.communicate.return_value = ['apackage'] + + pkg = DebianDistro.pkg_by_file('afile') + self.assertIsNone(pkg) + PopenMock.communicate.assert_called_once_with() + mock.assert_called_once_with(['dpkg-query', '-S', 'afile'], + stderr=-1, stdout=-1) + + def test_read_apt_pipeline(self): + """Test our interaction with the apt pipeline""" + class AptPipelineMock(object): + def __init__(self): + self.iter = self.lines() + + def lines(self): + for line in ['VERSION 2', 'Whatmaps::Enable-Restart=1', '\n']: + yield line + + def readlines(self): + return ['pkg1 0.0 c 1.0 **CONFIGURE**', + 'pkg2 - c 1.0 **CONFIGURE**', + ''] + + def readline(self): + return self.iter.next() + + with patch('sys.stdin', new_callable=AptPipelineMock): + pkgs = DebianDistro.read_apt_pipeline() + self.assertEqual(len(pkgs), 1) + self.assertTrue(pkgs.has_key('pkg1')) + self.assertTrue(pkgs['pkg1'].name, 'pkg1') + + @patch('apt_pkg.init') + @patch('apt_pkg.Acquire') + def test_filter_security_updates(self, apt_pkg_acquire, apt_pkg_init): + pkgs = {'pkg1': DebianPkg('pkg1'), + 'pkg2': DebianPkg('pkg2'), + } + with patch('apt_pkg.Cache') as mock: + DebianDistro.filter_security_updates(pkgs) + apt_pkg_init.assert_called_once_with() + apt_pkg_acquire.assert_called_once_with() -- cgit v1.2.3