pungi/tests/test_extra_files_phase.py
Lubomír Sedlář f21e3a2d6d tests: Work with older unittest2
RHEL has an older version of the library which does not backport all the
assertions that we used. In order for the tests to pass there we need to
use names that exist everywhere.

Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
2017-10-30 09:16:18 +01:00

170 lines
7.1 KiB
Python

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import mock
import os
import sys
import unittest
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
from pungi.phases import extra_files
from tests import helpers
class TestExtraFilePhase(helpers.PungiTestCase):
@mock.patch('pungi.phases.extra_files.copy_extra_files')
def test_skips_unless_has_config(self, copy_extra_files):
compose = helpers.DummyCompose(self.topdir, {})
compose.just_phases = None
compose.skip_phases = []
phase = extra_files.ExtraFilesPhase(compose, mock.Mock())
self.assertTrue(phase.skip())
@mock.patch('pungi.phases.extra_files.copy_extra_files')
def test_runs_copy_files_for_each_variant(self, copy_extra_files):
cfg = mock.Mock()
pkgset_phase = mock.Mock()
compose = helpers.DummyCompose(self.topdir, {
'extra_files': [
('^.+$', {'x86_64': [cfg]})
]
})
phase = extra_files.ExtraFilesPhase(compose, pkgset_phase)
phase.run()
self.assertItemsEqual(
copy_extra_files.call_args_list,
[mock.call(compose, [cfg], 'x86_64', compose.variants['Server'],
pkgset_phase.package_sets),
mock.call(compose, [cfg], 'x86_64', compose.variants['Everything'],
pkgset_phase.package_sets)]
)
class TestCopyFiles(helpers.PungiTestCase):
def test_copy_local_file(self):
tgt = os.path.join(self.topdir, 'file')
helpers.touch(tgt)
compose = helpers.DummyCompose(self.topdir, {})
cfg = {'scm': 'file', 'file': tgt, 'repo': None}
extra_files.copy_extra_files(compose, [cfg], 'x86_64',
compose.variants['Server'], mock.Mock())
self.assertTrue(os.path.isfile(os.path.join(
self.topdir, 'compose', 'Server', 'x86_64', 'os', 'file')))
def test_copy_multiple_sources(self):
tgt1 = os.path.join(self.topdir, 'file')
tgt2 = os.path.join(self.topdir, 'gpl')
helpers.touch(tgt1)
helpers.touch(tgt2)
compose = helpers.DummyCompose(self.topdir, {})
cfg1 = {'scm': 'file', 'file': tgt1, 'repo': None}
cfg2 = {'scm': 'file', 'file': tgt2, 'repo': None, 'target': 'license'}
extra_files.copy_extra_files(compose, [cfg1, cfg2], 'x86_64',
compose.variants['Server'], mock.Mock())
self.assertTrue(os.path.isfile(os.path.join(
self.topdir, 'compose', 'Server', 'x86_64', 'os', 'file')))
self.assertTrue(os.path.isfile(os.path.join(
self.topdir, 'compose', 'Server', 'x86_64', 'os', 'license', 'gpl')))
def test_copy_local_dir(self):
helpers.touch(os.path.join(self.topdir, 'src', 'file'))
helpers.touch(os.path.join(self.topdir, 'src', 'another'))
compose = helpers.DummyCompose(self.topdir, {})
cfg = {'scm': 'file', 'dir': os.path.join(self.topdir, 'src'),
'repo': None, 'target': 'subdir'}
extra_files.copy_extra_files(compose, [cfg], 'x86_64',
compose.variants['Server'], mock.Mock())
self.assertTrue(os.path.isfile(os.path.join(
self.topdir, 'compose', 'Server', 'x86_64', 'os', 'subdir', 'file')))
self.assertTrue(os.path.isfile(os.path.join(
self.topdir, 'compose', 'Server', 'x86_64', 'os', 'subdir', 'another')))
@mock.patch('pungi.phases.extra_files.get_file_from_scm')
@mock.patch('pungi.phases.extra_files.get_dir_from_scm')
def test_copy_from_external_rpm(self, get_dir_from_scm, get_file_from_scm):
compose = helpers.DummyCompose(self.topdir, {})
cfg = {'scm': 'rpm', 'file': 'file.txt', 'repo': 'http://example.com/package.rpm'}
get_file_from_scm.side_effect = self.fake_get_file
extra_files.copy_extra_files(compose, [cfg], 'x86_64',
compose.variants['Server'], mock.Mock())
self.assertEqual(len(get_file_from_scm.call_args_list), 1)
self.assertEqual(get_dir_from_scm.call_args_list, [])
self.assertEqual(self.scm_dict,
{'scm': 'rpm', 'file': 'file.txt', 'repo': 'http://example.com/package.rpm'})
self.assertTrue(os.path.isfile(os.path.join(
self.topdir, 'compose', 'Server', 'x86_64', 'os', 'file.txt')))
@mock.patch('pungi.phases.extra_files.get_file_from_scm')
@mock.patch('pungi.phases.extra_files.get_dir_from_scm')
def test_copy_from_rpm_in_compose(self, get_dir_from_scm, get_file_from_scm):
compose = helpers.DummyCompose(self.topdir, {})
cfg = {'scm': 'rpm', 'file': 'file.txt', 'repo': '%(variant_uid)s-data*'}
server_po, client_po, src_po = mock.Mock(), mock.Mock(), mock.Mock()
server_po.configure_mock(name='Server-data-1.1-1.fc24.x86_64.rpm',
file_path='/server/location',
arch='x86_64')
client_po.configure_mock(name='Client-data-1.1-1.fc24.x86_64.rpm',
file_path='/client/location',
arch='x86_64')
src_po.configure_mock(name='extra-data-1.1-1.fc24.src.rpm',
file_path='/src/location',
arch='src')
package_sets = {
'x86_64': {server_po.name: server_po,
client_po.name: client_po,
src_po.name: src_po}
}
get_file_from_scm.side_effect = self.fake_get_file
extra_files.copy_extra_files(compose, [cfg], 'x86_64',
compose.variants['Server'], package_sets)
self.assertEqual(len(get_file_from_scm.call_args_list), 1)
self.assertEqual(get_dir_from_scm.call_args_list, [])
self.assertEqual(self.scm_dict,
{'scm': 'rpm', 'file': 'file.txt', 'repo': ['/server/location']})
self.assertTrue(os.path.isfile(os.path.join(
self.topdir, 'compose', 'Server', 'x86_64', 'os', 'file.txt')))
def fake_get_file(self, scm_dict, dest, logger):
self.scm_dict = scm_dict
helpers.touch(os.path.join(dest, scm_dict['file']))
return [scm_dict['file']]
@mock.patch('pungi.phases.extra_files.get_file_from_scm')
@mock.patch('pungi.phases.extra_files.get_dir_from_scm')
def test_copy_from_non_existing_rpm_in_compose(self, get_dir_from_scm, get_file_from_scm):
compose = helpers.DummyCompose(self.topdir, {})
cfg = {'scm': 'rpm', 'file': 'file.txt', 'repo': 'bad-%(variant_uid_lower)s*'}
package_sets = {'x86_64': {}}
with self.assertRaises(RuntimeError) as ctx:
extra_files.copy_extra_files(
compose, [cfg], 'x86_64', compose.variants['Server'], package_sets)
self.assertRegexpMatches(str(ctx.exception), 'No.*package.*matching bad-server\*.*')
self.assertEqual(len(get_file_from_scm.call_args_list), 0)
self.assertEqual(get_dir_from_scm.call_args_list, [])
if __name__ == "__main__":
unittest.main()