2015-11-25 15:14:35 +00:00
|
|
|
#!/usr/bin/env python
|
2013-10-27 18:47:13 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
2016-05-16 09:48:57 +00:00
|
|
|
import mock
|
2013-10-27 18:47:13 +00:00
|
|
|
import unittest
|
|
|
|
|
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
|
2015-06-25 12:02:52 +00:00
|
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
|
2015-02-05 15:56:24 +00:00
|
|
|
|
|
|
|
from pungi.arch import *
|
2013-10-27 18:47:13 +00:00
|
|
|
|
|
|
|
|
2016-05-16 09:48:57 +00:00
|
|
|
class MockArchModule(object):
|
|
|
|
"""
|
|
|
|
This is a class intended to be used as a replacement for rpmUtils.arch
|
|
|
|
module in following tests. The data is intentionally not complete.
|
|
|
|
"""
|
|
|
|
arches = {'i386': 'noarch',
|
|
|
|
'x86_64': 'athlon'}
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def getMultiArchInfo(yum_arch):
|
|
|
|
DATA = {
|
|
|
|
'athlon': None,
|
|
|
|
'x86_64': ('athlon', 'x86_64', 'athlon'),
|
|
|
|
'armv7hnl': None,
|
|
|
|
'noarch': None,
|
|
|
|
'ppc64p7': ('ppc', 'ppc64', 'ppc64'),
|
|
|
|
}
|
|
|
|
return DATA[yum_arch]
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def getArchList(yum_arch):
|
|
|
|
ARCHES = {
|
|
|
|
'athlon': ['athlon', 'i686', 'i586', 'i486', 'i386', 'noarch'],
|
|
|
|
'x86_64': ['x86_64', 'athlon', 'i686', 'i586', 'i486', 'i386', 'noarch'],
|
|
|
|
'armv7hnl': ['armv7hnl', 'armv7hl', 'armv6hl', 'noarch'],
|
|
|
|
'noarch': ['noarch'],
|
|
|
|
'ppc64p7': ['ppc64p7', 'ppc64', 'ppc', 'noarch'],
|
|
|
|
'ppc': ['ppc', 'noarch'],
|
|
|
|
}
|
|
|
|
return ARCHES[yum_arch]
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def getBaseArch(yum_arch):
|
|
|
|
ARCHES = {
|
|
|
|
'noarch': 'noarch',
|
|
|
|
'i386': 'i386',
|
|
|
|
'i586': 'i386',
|
|
|
|
'x86_64': 'x86_64',
|
|
|
|
'ppc64p7': 'ppc64',
|
|
|
|
'armhfp': 'armhfp',
|
|
|
|
}
|
|
|
|
return ARCHES[yum_arch]
|
|
|
|
|
|
|
|
|
2017-03-21 04:32:53 +00:00
|
|
|
@mock.patch('pungi.arch_utils', MockArchModule)
|
2013-10-27 18:47:13 +00:00
|
|
|
class TestArch(unittest.TestCase):
|
|
|
|
|
|
|
|
def test_i386(self):
|
|
|
|
arches = get_valid_arches("i386")
|
|
|
|
self.assertEqual(arches, ['athlon', 'i686', 'i586', 'i486', 'i386', 'noarch'])
|
|
|
|
|
|
|
|
arches = get_valid_arches("i386", multilib=False)
|
|
|
|
self.assertEqual(arches, ['athlon', 'i686', 'i586', 'i486', 'i386', 'noarch'])
|
|
|
|
|
|
|
|
arches = get_valid_arches("i386", add_src=True)
|
|
|
|
self.assertEqual(arches, ['athlon', 'i686', 'i586', 'i486', 'i386', 'noarch', 'src'])
|
|
|
|
|
|
|
|
def test_x86_64(self):
|
|
|
|
arches = get_valid_arches("x86_64")
|
|
|
|
self.assertEqual(arches, ['x86_64', 'athlon', 'i686', 'i586', 'i486', 'i386', 'noarch'])
|
|
|
|
|
|
|
|
arches = get_valid_arches("x86_64", multilib=False)
|
|
|
|
self.assertEqual(arches, ['x86_64', 'noarch'])
|
|
|
|
|
|
|
|
arches = get_valid_arches("x86_64", add_src=True)
|
|
|
|
self.assertEqual(arches, ['x86_64', 'athlon', 'i686', 'i586', 'i486', 'i386', 'noarch', 'src'])
|
|
|
|
|
2015-07-22 12:27:56 +00:00
|
|
|
def test_armhfp(self):
|
|
|
|
arches = get_valid_arches("armhfp")
|
|
|
|
self.assertEqual(arches, ['armv7hnl', 'armv7hl', 'armv6hl', 'noarch'])
|
|
|
|
|
|
|
|
arches = get_valid_arches("armhfp", multilib=False)
|
|
|
|
self.assertEqual(arches, ['armv7hnl', 'armv7hl', 'armv6hl', 'noarch'])
|
|
|
|
|
|
|
|
arches = get_valid_arches("armhfp", add_src=True)
|
|
|
|
self.assertEqual(arches, ['armv7hnl', 'armv7hl', 'armv6hl', 'noarch', 'src'])
|
|
|
|
|
2013-10-27 18:47:13 +00:00
|
|
|
def test_get_compatible_arches(self):
|
|
|
|
self.assertEqual(get_compatible_arches("noarch"), ["noarch"])
|
|
|
|
self.assertEqual(get_compatible_arches("i386"), get_valid_arches("i386"))
|
|
|
|
self.assertEqual(get_compatible_arches("i586"), get_valid_arches("i386"))
|
|
|
|
self.assertEqual(get_compatible_arches("x86_64"), get_valid_arches("x86_64", multilib=False))
|
|
|
|
self.assertEqual(get_compatible_arches("ppc64p7"), get_valid_arches("ppc64", multilib=False))
|
2015-07-22 12:27:56 +00:00
|
|
|
self.assertEqual(get_compatible_arches("armhfp"), get_valid_arches("armv7hnl", multilib=False))
|
2013-10-27 18:47:13 +00:00
|
|
|
|
|
|
|
def test_is_valid_arch(self):
|
|
|
|
self.assertEqual(is_valid_arch("i386"), True)
|
|
|
|
self.assertEqual(is_valid_arch("x86_64"), True)
|
|
|
|
self.assertEqual(is_valid_arch("noarch"), True)
|
|
|
|
self.assertEqual(is_valid_arch("src"), True)
|
|
|
|
self.assertEqual(is_valid_arch("nosrc"), True)
|
|
|
|
self.assertEqual(is_valid_arch("foo"), False)
|
2015-07-22 12:27:56 +00:00
|
|
|
self.assertEqual(is_valid_arch("armhfp"), False)
|
2013-10-27 18:47:13 +00:00
|
|
|
|
|
|
|
def test_split_name_arch(self):
|
|
|
|
self.assertEqual(split_name_arch("package"), ("package", None))
|
|
|
|
self.assertEqual(split_name_arch("package.x86_64"), ("package", "x86_64"))
|
|
|
|
self.assertEqual(split_name_arch("package.foo"), ("package.foo", None))
|
|
|
|
self.assertEqual(split_name_arch("i386"), ("i386", None)) # we suppose that $name is never empty
|
|
|
|
|
|
|
|
def test_get_valid_multilib_arches(self):
|
|
|
|
self.assertEqual(get_valid_multilib_arches("noarch"), [])
|
|
|
|
self.assertEqual(get_valid_multilib_arches("athlon"), [])
|
|
|
|
self.assertEqual(get_valid_multilib_arches("x86_64"), ['athlon', 'i686', 'i586', 'i486', 'i386'])
|
|
|
|
|
|
|
|
|
2017-06-06 13:25:04 +00:00
|
|
|
class TestExclusiveExcludeArch(unittest.TestCase):
|
|
|
|
def test_no_exclude(self):
|
|
|
|
pkg = mock.Mock(excludearch=[], exclusivearch=[], file_name='pkg.rpm')
|
|
|
|
self.assertFalse(is_excluded(pkg, ['x86_64']))
|
|
|
|
|
|
|
|
def test_exclude_arch(self):
|
|
|
|
log = mock.Mock()
|
|
|
|
pkg = mock.Mock(excludearch=['x86_64'], exclusivearch=[], file_name='pkg.rpm')
|
|
|
|
self.assertTrue(is_excluded(pkg, ['x86_64'], logger=log))
|
|
|
|
self.assertEqual(log.mock_calls,
|
|
|
|
[mock.call.debug("Excluding (EXCLUDEARCH: ['x86_64']): pkg.rpm")])
|
|
|
|
|
|
|
|
def test_exclusive_arch(self):
|
|
|
|
log = mock.Mock()
|
|
|
|
pkg = mock.Mock(excludearch=[], exclusivearch=['aarch64'], file_name='pkg.rpm')
|
|
|
|
self.assertTrue(is_excluded(pkg, ['x86_64'], logger=log))
|
|
|
|
self.assertEqual(log.mock_calls,
|
|
|
|
[mock.call.debug("Excluding (EXCLUSIVEARCH: ['aarch64']): pkg.rpm")])
|
|
|
|
|
2013-10-27 18:47:13 +00:00
|
|
|
if __name__ == "__main__":
|
|
|
|
unittest.main()
|