import pytest import os from calculate.utils.package import Package, PackageAtom, PackageAtomError from pprint import pprint from collections import OrderedDict import re BASE_DIRECTORY = os.path.join(os.getcwd(), 'tests/utils/testfiles/') @pytest.mark.package_utils class TestContents: 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_1', chroot_path=BASE_DIRECTORY) 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_1', chroot_path=BASE_DIRECTORY) 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_1', chroot_path=BASE_DIRECTORY) 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_1', chroot_path=BASE_DIRECTORY) 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 1586531028 ''' 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_1', chroot_path=BASE_DIRECTORY) 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 1587117567 ''' 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_contains_name_and_category_values(self): package_atom = PackageAtom() package_atom.parse_package_parameter('dev-lang/python-3.6') parsing_result = { 'category': 'dev-lang', 'contents': '/var/db/pkg/dev-lang/python-3.6.9/CONTENTS', 'name': 'python-3.6.9' } assert package_atom._atom_dictionary == parsing_result def test_if_the_PackageAtom_object_parsed_a_correct_package_atom_name_with_a_slot_value__the_PackageAtom_object_contains_name_category_values_and_slot_value(self): package_atom = PackageAtom() package_atom.parse_package_parameter('dev-lang/python-3.6:3.6/3.6m') parsing_result = { 'category': 'dev-lang', 'contents': '/var/db/pkg/dev-lang/python-3.6.9/CONTENTS', 'name': 'python-3.6.9', 'slot': '3.6/3.6m' } assert package_atom._atom_dictionary == parsing_result def test_if_the_PackageAtom_object_parsed_a_correct_package_atom_name_with_an_empty_slot_value__the_PackageAtom_object_contains_name_category_values_and_slot_value(self): package_atom = PackageAtom() package_atom.parse_package_parameter('dev-lang/python-3.6:') parsing_result = { 'category': 'dev-lang', 'contents': '/var/db/pkg/dev-lang/python-3.6.9/CONTENTS', 'name': 'python-3.6.9' } assert package_atom._atom_dictionary == parsing_result def test_if_the_PackageAtom_object_parsed_a_correct_package_atom_name_with_a_uses_value__the_PackageAtom_object_contains_name_category_values_and_slot_value(self): package_atom = PackageAtom() package_atom.parse_package_parameter('dev-lang/python-3.6 abi_x86_64 ssl') parsing_result = { 'category': 'dev-lang', 'contents': '/var/db/pkg/dev-lang/python-3.6.9/CONTENTS', 'name': 'python-3.6.9', 'uses': ['abi_x86_64', 'ssl'] } assert package_atom._atom_dictionary == parsing_result def test_if_the_PackageAtom_object_parsed_a_correct_package_atom_name_and_add_slot_and_add_use_flags_is_set__the_PackageAtom_object_contains_name_category_slot_and_uses_values(self): package_atom = PackageAtom() package_atom.parse_package_parameter('dev-lang/python-3.6', add_slot=True, add_uses=True) parsing_result = { 'category': 'dev-lang', 'contents': '/var/db/pkg/dev-lang/python-3.6.9/CONTENTS', 'name': 'python-3.6.9' } assert parsing_result def test_if_the_PackageAtom_object_tried_to_parse_an_incorrect_package_atom_name__the_PackageAtom_object_throws_the_PackageAtomError_exception(self): package_atom = PackageAtom() 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_correct_package_atom_name_that_matches_multiple_packages__the_PackageAtom_object_throws_the_PackageAtomError_exception(self): package_atom = PackageAtom() with pytest.raises(PackageAtomError): package_atom.parse_package_parameter( 'dev-lang/python') 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): package_atom = PackageAtom() package_atom_regex = re.compile(r'dev-lang/python-3.6.\d+') try: file_package = package_atom.get_file_package('/usr/bin/python3.6') assert package_atom_regex.search(file_package) 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): package_atom = PackageAtom() with pytest.raises(PackageAtomError): file_package = package_atom.get_file_package('/etc/shadow') print('package = {}'.format(file_package))