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.

234 lines
9.9 KiB

import os
import pytest
import shutil
from calculate.templates.format.contents_format import ContentsFormat
from calculate.utils.package import PackageAtomName, Version, Package
from calculate.templates.template_engine import ParametersContainer
from calculate.variables.datavars import NamespaceNode
from calculate.utils.files import join_paths
TESTFILES_PATH = os.path.join(os.getcwd(),
'tests/templates/format/testfiles/contents')
@pytest.mark.formats
@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 {0}
dir /etc/dir_1
obj /etc/dir_1/file_0 b4ff15ea7028891a83392b490d676622 {1}
dir /etc/dir_2
dir /etc/dir_3
sym /etc/dir_3/link_0 -> ../dir_1/file_0 {2}
'''.format(int(os.lstat(join_paths(chroot_path,
'/etc/dir_0/file_1')).st_mtime),
int(os.lstat(join_paths(chroot_path,
'/etc/dir_1/file_0')).st_mtime),
int(os.lstat(join_paths(chroot_path,
'/etc/dir_3/link_0')).st_mtime))
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)
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)
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'))