import os import pytest import shutil from collections import OrderedDict from calculate.templates.format.contents_format import ContentsFormat from calculate.utils.package import PackageAtomName, Version, Package TESTFILES_PATH = os.path.join(os.getcwd(), 'tests/templates/format/testfiles/contents') @pytest.mark.contents class TestExecutingFormat: def test_copy_testfiles(self): entries = os.scandir(TESTFILES_PATH) for root_entry in entries: if root_entry.path.endswith('.backup'): shutil.copytree(root_entry.path, root_entry.path.rstrip('.backup'), symlinks=True) def test_if_template_of_the_contents_format_contains_some_files_to_add_directory_to_add_and_link_to_add_and_some_files_is_listed_using_glob_symbols__all_files_links_and_directories_are_added_to_the_target_package(self): chroot_path = os.path.join(TESTFILES_PATH, 'root_0') test_package_name = PackageAtomName( {'pkg_path': os.path.join( chroot_path, 'var/db/pkg/test-category/test-package-1.0'), 'version': Version('1.0')}) template_text = ''' test-category/test-package /etc/dir_0/* test-category/test-package /etc/dir_1/file_0 test-category/test-package /etc/dir_2 test-category/test-package /etc/dir_3/link_0 ''' result_contents = '''dir /etc dir /etc/dir_0 obj /etc/dir_0/file_0 c585be6f171462940b44af994a54040d 1593525253 obj /etc/dir_0/file_1 b4ff15ea7028891a83392b490d676622 1601987083 dir /etc/dir_1 obj /etc/dir_1/file_0 b4ff15ea7028891a83392b490d676622 1601982062 dir /etc/dir_2 dir /etc/dir_3 sym /etc/dir_3/link_0 -> ../dir_1/file_0 1601991426 ''' contents_format = ContentsFormat(template_text, '/path/to/template') contents_format.execute_format('target/path', chroot_path=chroot_path) test_package = Package(test_package_name, chroot_path=chroot_path) if contents_format._errors: for error in contents_format._errors: print(error) assert False assert '/etc/dir_0/file_0' in test_package assert '/etc/dir_0/file_1' in test_package assert '/etc/dir_1' in test_package assert '/etc/dir_1/file_0' in test_package assert '/etc/dir_2' in test_package assert '/etc/dir_3' in test_package assert '/etc/dir_3/link_0' in test_package with open(os.path.join( chroot_path, 'var/db/pkg/test-category/test-package-1.0/CONTENTS'), 'r') as test_contents: assert test_contents.read() == result_contents def test_if_template_of_the_contents_format_contains_some_files_to_remove_directory_to_remove_and_link_to_remove_and_some_files_is_listed_using_glob_symbols__all_files_links_and_directories_are_removed_from_the_target_package(self): chroot_path = os.path.join(TESTFILES_PATH, 'root_1') test_package_name = PackageAtomName( {'pkg_path': os.path.join( chroot_path, 'var/db/pkg/test-category/test-package-1.0'), 'version': Version('1.0')}) template_text = ''' !test-category/test-package /etc/dir_0/file_1 !test-category/test-package /etc/dir_1/* !test-category/test-package /etc/dir_2/ !test-category/test-package /etc/dir_3/link_0 ''' result_contents = '''dir /etc dir /etc/dir_0 obj /etc/dir_0/file_0 c585be6f171462940b44af994a54040d 1593525253 dir /etc/dir_1 dir /etc/dir_3 ''' contents_format = ContentsFormat(template_text, '/path/to/template') contents_format.execute_format('target/path', chroot_path=chroot_path) test_package = Package(test_package_name, chroot_path=chroot_path) if contents_format._errors: for error in contents_format._errors: print(error) assert False assert '/etc/dir_0/file_0' in test_package assert '/etc/dir_0/file_1' not in test_package assert '/etc/dir_1' in test_package assert '/etc/dir_1/file_0' not in test_package assert '/etc/dir_1/file_1' not in test_package assert '/etc/dir_3' in test_package assert '/etc/dir_3/link_0' not in test_package with open(os.path.join( chroot_path, 'var/db/pkg/test-category/test-package-1.0/CONTENTS'), 'r') as test_contents: assert test_contents.read() == result_contents def test_if_template_of_the_contents_format_contains_some_files_to_move_from_a_source_package_to_a_target_package_directory_to_move_and_link_to_move_and_some_files_is_listed_using_glob_symbols__all_files_links_and_directories_are_moved_from_the_source_package_to_the_target_package(self): chroot_path = os.path.join(TESTFILES_PATH, 'root_2') test_package_name = PackageAtomName( {'pkg_path': os.path.join( chroot_path, 'var/db/pkg/test-category/test-package-1.0'), 'version': Version('1.0')}) other_package_name = PackageAtomName( {'pkg_path': os.path.join( chroot_path, 'var/db/pkg/test-category/other-package-1.1'), 'version': Version('1.1')}) other_package = Package(other_package_name, chroot_path=chroot_path) template_text = ''' test-category/test-package, test-category/other-package /etc/dir_0/file_0 test-category/other-package, test-category/test-package /etc/dir_0/file_1 test-category/test-package, test-category/other-package /etc/dir_1/file_[1,3] test-category/other-package, test-category/test-package /etc/dir_1/file_[0,2] test-category/test-package, test-category/other-package /etc/dir_3/ test-category/other-package, test-category/test-package /etc/dir_4/ test-category/test-package, test-category/other-package /etc/dir_5/link_0 test-category/other-package, test-category/test-package /etc/dir_5/link_1 ''' test_result = '''dir /etc dir /etc/dir_0 obj /etc/dir_0/file_1 c585be6f171462940b44af994a54040d 1593525253 dir /etc/dir_1 obj /etc/dir_1/file_0 b4ff15ea7028891a83392b490d676622 1601987083 obj /etc/dir_1/file_2 b4ff15ea7028891a83392b490d676622 1601987083 obj /etc/dir_1/file_4 b4ff15ea7028891a83392b490d676622 1601987083 dir /etc/dir_4 obj /etc/dir_4/file_0 b4ff15ea7028891a83392b490d676622 1601982062 dir /etc/dir_5 sym /etc/dir_5/link_1 -> ../dir_1/file_0 1601991426 ''' other_result = '''dir /etc dir /etc/dir_0 obj /etc/dir_0/file_0 c585be6f171462940b44af994a54040d 1593525253 dir /etc/dir_1 obj /etc/dir_1/file_1 b4ff15ea7028891a83392b490d676622 1601987083 obj /etc/dir_1/file_3 b4ff15ea7028891a83392b490d676622 1601987083 obj /etc/dir_1/file_5 b4ff15ea7028891a83392b490d676622 1601987083 dir /etc/dir_3 obj /etc/dir_3/file_0 b4ff15ea7028891a83392b490d676622 1601982062 dir /etc/dir_5 sym /etc/dir_5/link_0 -> ../dir_1/file_0 1601991426 ''' contents_format = ContentsFormat(template_text, '/path/to/template') contents_format.execute_format('target/path', chroot_path=chroot_path) test_package = Package(test_package_name, chroot_path=chroot_path) other_package = Package(other_package_name, chroot_path=chroot_path) assert '/etc/dir_0/file_0' not in test_package assert '/etc/dir_0/file_1' not in other_package assert '/etc/dir_0/file_1' in test_package assert '/etc/dir_0/file_0' in other_package assert '/etc/dir_1/file_1' not in test_package assert '/etc/dir_1/file_3' not in test_package assert '/etc/dir_1/file_0' not in other_package assert '/etc/dir_1/file_2' not in other_package assert '/etc/dir_1/file_0' in test_package assert '/etc/dir_1/file_2' in test_package assert '/etc/dir_1/file_4' in test_package assert '/etc/dir_1/file_1' in other_package assert '/etc/dir_1/file_3' in other_package assert '/etc/dir_1/file_5' in other_package assert '/etc/dir_3' not in test_package assert '/etc/dir_3/file_0' not in test_package assert '/etc/dir_4' not in other_package assert '/etc/dir_4/file_0' not in other_package assert '/etc/dir_4' in test_package assert '/etc/dir_4/file_0' in test_package assert '/etc/dir_3' in other_package assert '/etc/dir_3/file_0' in other_package assert '/etc/dir_5/link_0' not in test_package assert '/etc/dir_5/link_1' not in other_package assert '/etc/dir_5/link_1' in test_package assert '/etc/dir_5/link_0' in other_package with open(test_package_name.contents_path, 'r') as test_contents: assert test_contents.read() == test_result with open(other_package_name.contents_path, 'r') as other_contents: assert other_contents.read() == other_result def test_remove_testfiles(self): entries = os.scandir('./tests/templates/format/testfiles/contents') for root_entry in entries: if root_entry.path.endswith('.backup'): shutil.rmtree(root_entry.path.rstrip('.backup'))