1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
# vim: set fileencoding=utf-8 :
# (C) 2014 Guido Günther <agx@sigxcpu.org>
# 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 3 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, see <http://www.gnu.org/licenses/>.
"""Test L{whatmaps.process} config"""
import unittest
from unittest.mock import patch
from whatmaps.pkg import Pkg, PkgError
from . import context
class TestPkg(unittest.TestCase):
def setUp(self):
self.tmpdir = context.new_tmpdir(__name__)
def test_abstract(self):
"""Check abstract method signatures"""
self.assertIsNone(Pkg.type)
self.assertIsNone(Pkg.services)
def test_repr(self):
p = Pkg('apckage')
self.assertEqual(str(p), "<None Pkg object name:'apckage'>")
def test_list_contents(self):
with patch('subprocess.Popen') as mock:
p = Pkg('doesnotmatter')
p._list_contents = '/does/not/matter'
PopenMock = mock.return_value
PopenMock.communicate.return_value = [
b'/package/content',
b'/more/package/content',
]
PopenMock.returncode = 0
result = p._get_contents()
self.assertIn('/package/content', result)
self.assertNotIn('/more/package/content', result)
# We want to check that we don't invoke Popen on
# a second call so let it fail
PopenMock.returncode = 1
result = p._get_contents()
self.assertIn('/package/content', result)
self.assertNotIn('/more/package/content', result)
def test_shared_objects(self):
"""Test that we properly match shared objects"""
with patch('subprocess.Popen') as mock:
p = Pkg('doesnotmatter')
p._list_contents = '/does/not/matter'
PopenMock = mock.return_value
PopenMock.communicate.return_value = [b'\n'.join([
b'/lib/foo.so.1',
b'/lib/bar.so',
b'/not/a/shared/object',
b'/not/a/shared/object.soeither',
])]
PopenMock.returncode = 0
result = p.shared_objects
self.assertIn('/lib/foo.so.1', result)
self.assertIn('/lib/bar.so', result)
self.assertNotIn('/not/a/shred/object', result)
self.assertNotIn('/not/a/shred/object.soeither', result)
# We want to check that we don't invoke Popen on
# a second call so let it fail.
PopenMock.returncode = 1
result = p._get_contents()
self.assertIn('/lib/foo.so.1', result)
self.assertNotIn('/not/a/shred/object', result)
def test_shared_object_error(self):
"""Test that we raise PkgError"""
with patch('subprocess.Popen') as mock:
p = Pkg('doesnotmatter')
p._list_contents = '/does/not/matter'
PopenMock = mock.return_value
PopenMock.communicate.return_value = ['']
PopenMock.returncode = 1
try:
p.shared_objects
self.fail("PkgError exception not raised")
except PkgError:
pass
except Exception as e:
self.fail("Raised '%s is not PkgError" % e)
def tearDown(self):
context.teardown()
|