You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

240 lines
12 KiB

import pytest
import os
from calculate.utils.package import Package, PackageAtomParser,\
PackageAtomError, Version, PackageNotFound
from collections import OrderedDict
from calculate.utils.files import join_paths
CHROOT_PATH = os.path.join(os.getcwd(), 'tests/utils/testfiles/')
package_atom = PackageAtomParser(chroot_path=CHROOT_PATH)
@pytest.mark.package_utils
class TestContents:
def test_if_two_Version_objects_compared_using_lt_operation_and_the_left_version_value_is_less_than_the_right_version__the_result_of_the_comparing_would_be_True(self):
version_1 = Version('12.5.6-r1')
version_2 = Version('12.7.6')
assert version_1 < version_2
def test_if_two_Version_objects_compared_using_le_operation_and_the_left_version_value_is_less_than_or_equal_to_the_right_version__the_result_of_the_comparing_would_be_True(self):
version_1 = Version('3.7.2-r1')
version_2 = Version('3.9')
version_3 = Version('3.9.0')
assert (version_1 <= version_2 and version_2 <= version_3)
def test_if_two_Version_objects_compared_using_gt_operation_and_the_left_version_value_is_less_than_the_right_version__the_result_of_the_comparing_would_be_True(self):
version_1 = Version('3.5.6-r1')
version_2 = Version('2.5.6')
assert version_1 > version_2
def test_if_two_Version_objects_compared_using_ge_operation_and_the_left_version_value_is_less_than_or_equal_to_the_right_version__the_result_of_the_comparing_would_be_True(self):
version_1 = Version('13.0')
version_2 = Version('12.7.6-r1')
assert (version_1 >= version_2 and version_2 >= '12.7.6')
def test_if_two_Version_objects_compared_using_ne_operation_and_the_left_version_value_is_less_than_or_equal_to_the_right_version__the_result_of_the_comparing_would_be_True(self):
version_1 = Version('13.0')
assert (version_1 != '12.7.6')
def test_if_two_Version_objects_compared_using_eq_operation_and_the_left_version_value_is_less_than_or_equal_to_the_right_version__the_result_of_the_comparing_would_be_True(self):
version_1 = Version('13.1.0')
assert (version_1 == '13.1')
def test_if_PackageContents_object_initialized_by_existing_package__it_contains_dictionary_of_items_from_contents_file(self):
result = OrderedDict({
'/usr':
OrderedDict({'type': 'dir'}),
'/usr/bin':
OrderedDict({'type': 'dir'}),
'/usr/bin/rview':
OrderedDict({'type': 'sym',
'target': 'vim',
'mtime': '1573538053'}),
'/usr/bin/rvim':
OrderedDict({'type': 'sym',
'target': 'vim',
'mtime': '1573538053'}),
'/usr/bin/vim':
OrderedDict({'type': 'obj',
'md5': '30acc0f256e11c1ecdb1bd80b688d238',
'mtime': '1573538056'}),
'/usr/bin/vimdiff':
OrderedDict({'type': 'sym',
'target': 'vim',
'mtime': '1573538053'})})
contents_object = Package('category-1/package-name-1.0',
chroot_path=CHROOT_PATH)
assert contents_object.contents_dictionary == result
def test_if_PackageContents_object_contains_contents_dictionary__it_renders_CONTENTS_file_correctly(self):
contents_object = Package('category-1/package-name-1.0',
chroot_path=CHROOT_PATH)
result = '''dir /usr
dir /usr/bin
sym /usr/bin/rview -> vim 1573538053
sym /usr/bin/rvim -> vim 1573538053
obj /usr/bin/vim 30acc0f256e11c1ecdb1bd80b688d238 1573538056
sym /usr/bin/vimdiff -> vim 1573538053
'''
assert contents_object.render_contents_file() == result
def test_if_new_directory_is_added_in_contents_file_using_add_dir_method__the_PackageContents_object_renders_the_contents_file_with_new_dir(self):
contents_object = Package('category-1/package-name-1.0',
chroot_path=CHROOT_PATH)
result = '''dir /usr
dir /usr/bin
sym /usr/bin/rview -> vim 1573538053
sym /usr/bin/rvim -> vim 1573538053
obj /usr/bin/vim 30acc0f256e11c1ecdb1bd80b688d238 1573538056
sym /usr/bin/vimdiff -> vim 1573538053
dir /etc
dir /etc/test_dir_1
'''
contents_object.add_dir('/etc/test_dir_1')
assert contents_object.render_contents_file() == result
def test_if_new_object_is_added_in_contents_file_using_add_obj_method__the_PackageContents_object_renders_the_contents_file_with_new_obj(self):
contents_object = Package('category-1/package-name-1.0',
chroot_path=CHROOT_PATH)
result = '''dir /usr
dir /usr/bin
sym /usr/bin/rview -> vim 1573538053
sym /usr/bin/rvim -> vim 1573538053
obj /usr/bin/vim 30acc0f256e11c1ecdb1bd80b688d238 1573538056
sym /usr/bin/vimdiff -> vim 1573538053
dir /etc
dir /etc/test_dir_2
obj /etc/test_dir_2/file_2.cfg a371f4d456d471ac0ed0e8befff1cb6d {}
'''.format(int(os.lstat(os.path.join(CHROOT_PATH,
'etc/test_dir_2/file_2.cfg')).st_mtime))
contents_object.add_obj('/etc/test_dir_2/file_2.cfg')
print('RESULT:')
print(contents_object.render_contents_file())
assert contents_object.render_contents_file() == result
def test_if_new_link_is_added_in_contents_file_using_add_sym_method__the_PackageContents_object_renders_the_contents_file_with_new_sym(self):
contents_object = Package('category-1/package-name-1.0',
chroot_path=CHROOT_PATH)
result = '''dir /usr
dir /usr/bin
sym /usr/bin/rview -> vim 1573538053
sym /usr/bin/rvim -> vim 1573538053
obj /usr/bin/vim 30acc0f256e11c1ecdb1bd80b688d238 1573538056
sym /usr/bin/vimdiff -> vim 1573538053
dir /etc
dir /etc/test_dir_2
sym /etc/test_dir_2/symlink -> file_2.cfg {}
'''.format(int(os.lstat(os.path.join(CHROOT_PATH,
'etc/test_dir_2/symlink')).st_mtime))
contents_object.add_sym('/etc/test_dir_2/symlink')
print('RESULT:')
print(contents_object.render_contents_file())
assert contents_object.render_contents_file() == result
def test_if_the_PackageAtom_object_parsed_a_correct_package_atom_name_but_without_a_slot_and_use_flags__the_PackageAtom_object_returns_atom_name_of_package(self):
atom_name = package_atom.parse_package_parameter(
'dev-lang/python-3.6.9')
assert (atom_name.category == 'dev-lang' and
atom_name.fullname == 'python-3.6.9' and
atom_name.version == Version('3.6.9') and
atom_name.pkg_path == join_paths(
CHROOT_PATH,
'/var/db/pkg/dev-lang/python-3.6.9'))
def test_if_the_PackageAtom_object_parsed_a_correct_package_atom_name_with_a_slot_value__the_PackageAtom_returns_atom_name_of_package_with_this_slot(self):
atom_name = package_atom.parse_package_parameter(
'dev-lang/python-3.6:3.6/3.6m')
assert (atom_name.category == 'dev-lang' and
atom_name.fullname == 'python-3.6.9' and
atom_name.version == Version('3.6.9') and
atom_name.pkg_path == join_paths(
CHROOT_PATH,
'/var/db/pkg/dev-lang/python-3.6.9') and
atom_name.slot == '3.6/3.6m')
def test_if_the_PackageAtom_object_parsed_a_correct_package_atom_name_with_an_empty_slot_value__the_PackageAtom_object_returns_atom_name_of_package(self):
atom_name = package_atom.parse_package_parameter(
'dev-lang/python-3.6:')
assert (atom_name.category == 'dev-lang' and
atom_name.fullname == 'python-3.6.9' and
atom_name.version == Version('3.6.9') and
atom_name.pkg_path == join_paths(
CHROOT_PATH,
'/var/db/pkg/dev-lang/python-3.6.9'))
def test_if_the_PackageAtom_object_parsed_a_correct_package_atom_name_with_a_uses_value__the_PackageAtom_object_returns_atom_name_of_package_with_this_use_flags(self):
atom_name = package_atom.parse_package_parameter(
'dev-lang/python-3.6 [abi_x86_64 ssl]')
assert (atom_name.category == 'dev-lang' and
atom_name.fullname == 'python-3.6.9' and
atom_name.version == Version('3.6.9') and
atom_name.pkg_path == join_paths(
CHROOT_PATH,
'/var/db/pkg/dev-lang/python-3.6.9') and
'abi_x86_64' in atom_name.use_flags and
'ssl' in atom_name.use_flags)
def test_if_the_PackageAtom_object_parses_a_correct_package_atom_name_without_version_value_but_with_slot_value__the_PackageAtom_object_looks_for_package_with_assigned_slot_value(self):
atom_name = package_atom.parse_package_parameter(
'dev-lang/python:3.6/3.6m')
assert (atom_name.category == 'dev-lang' and
atom_name.fullname == 'python-3.6.9' and
atom_name.version == Version('3.6.9') and
atom_name.pkg_path == join_paths(
CHROOT_PATH,
'/var/db/pkg/dev-lang/python-3.6.9') and
atom_name.slot == '3.6/3.6m')
def test_if_the_PackageAtom_object_parses_a_correct_package_atom_name_without_version_value_but_with_use_flags_value__the_PackageAtom_object_looks_for_package_with_assigned_use_flags(self):
atom_name = package_atom.parse_package_parameter(
'dev-lang/python [specific_flag]')
assert (atom_name.category == 'dev-lang' and
atom_name.fullname == 'python-3.6.9' and
atom_name.version == Version('3.6.9') and
atom_name.pkg_path == join_paths(
CHROOT_PATH,
'/var/db/pkg/dev-lang/python-3.6.9') and
'specific_flag' in atom_name.use_flags)
def test_if_the_PackageAtom_object_tried_to_parse_an_incorrect_package_atom_name__the_PackageAtom_object_throws_the_PackageAtomError_exception(self):
with pytest.raises(PackageAtomError):
package_atom.parse_package_parameter(
'dev-lang/something_i_can_never_have:3.6/3.6m')
def test_if_the_PackageAtom_object_tried_to_parse_an_package_atom_name_with_incorrect_use_flags__the_PackageAtom_object_throws_the_PackageAtomError_exception(self):
with pytest.raises(PackageAtomError):
package_atom.parse_package_parameter(
'dev-lang/python [strange_use]')
def test_if_the_PackageAtom_object_tried_to_parse_an_correct_package_atom_name_that_matches_multiple_packages__the_PackageAtom_object_gets_info_for_package_with_older_version(self):
atom_name = package_atom.parse_package_parameter('dev-lang/python')
assert (atom_name.category == 'dev-lang' and
atom_name.fullname == 'python-3.6.9' and
atom_name.version == Version('3.6.9') and
atom_name.pkg_path == join_paths(
CHROOT_PATH,
'/var/db/pkg/dev-lang/python-3.6.9'))
def test_if_the_get_file_package_method_of_the_PackageAtom_object_is_called_with_a_name_of_a_file_that_belongs_to_any_package__the_PackageAtom_object_contains_dictionary_with_an_owner_package(self):
try:
package_atom_name = package_atom.get_file_package('/usr/bin/python3.6')
assert package_atom_name.version > '2.7.16'
except Exception as error:
pytest.fail('Unexpected exception: {0}'.
format(str(error)))
def test_if_the_get_file_package_method_of_the_PackageAtom_object_is_called_with_a_name_of_a_file_that_does_not_belong_to_any_package__the_PackageAtom_object_throws_the_PackageAtomError_exception(self):
with pytest.raises(PackageNotFound):
file_package = package_atom.get_file_package('/etc/shadow')
print('package = {}'.format(file_package))