Browse Source

Methods for working with CONTENTS throught a TemplateWrapper object is tested. The CalculateConfigFile class is tested. Testing of a TemplateExecutor methods is started.

packages
Иванов Денис 2 years ago
parent
commit
89b2350113
  1. 4
      .pytest_cache/v/cache/lastfailed
  2. 22
      .pytest_cache/v/cache/nodeids
  3. 53
      calculate/templates/template_processor.py
  4. 14
      calculate/utils/package.py
  5. 16
      template_action_draft.py
  6. 153
      tests/templates/test_template_executor.py
  7. 300
      tests/templates/test_template_wrapper.py
  8. 17
      tests/templates/testfiles/test_executor_root/etc/dir/dir_1/config.json
  9. 5
      tests/templates/testfiles/test_executor_root/etc/dir/file.conf
  10. 17
      tests/templates/testfiles/test_executor_root/etc/dir/subdir/config.json
  11. 6
      tests/templates/testfiles/test_executor_root/etc/dir/subdir/file
  12. 3
      tests/templates/testfiles/test_executor_root/etc/file
  13. 7
      tests/templates/testfiles/test_executor_root/etc/terminfo/info.json
  14. 4177
      tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-2.7.16/CONTENTS
  15. 1
      tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-2.7.16/SLOT
  16. 1
      tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-2.7.16/USE
  17. 6382
      tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-3.6.9/CONTENTS
  18. 1
      tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-3.6.9/SLOT
  19. 1
      tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-3.6.9/USE
  20. 24
      tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-exec-2.4.6-r1/CONTENTS
  21. 1
      tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-exec-2.4.6-r1/SLOT
  22. 1
      tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-exec-2.4.6-r1/USE
  23. 104
      tests/templates/testfiles/test_executor_root/var/db/pkg/media-sound/alsa-utils-1.1.8/CONTENTS
  24. 1
      tests/templates/testfiles/test_executor_root/var/db/pkg/media-sound/alsa-utils-1.1.8/SLOT
  25. 1
      tests/templates/testfiles/test_executor_root/var/db/pkg/media-sound/alsa-utils-1.1.8/USE
  26. 435
      tests/templates/testfiles/test_executor_root/var/db/pkg/media-sound/pulseaudio-12.2-r2/CONTENTS
  27. 1
      tests/templates/testfiles/test_executor_root/var/db/pkg/media-sound/pulseaudio-12.2-r2/SLOT
  28. 1
      tests/templates/testfiles/test_executor_root/var/db/pkg/media-sound/pulseaudio-12.2-r2/USE
  29. 10
      tests/templates/testfiles/test_executor_root/var/db/pkg/test-category/other-package-1.1/CONTENTS
  30. 11
      tests/templates/testfiles/test_executor_root/var/db/pkg/test-category/test-package-1.0/CONTENTS
  31. 202
      tests/templates/testfiles/test_executor_root/var/db/pkg/xfce-extra/xfce4-clipman-plugin-1.4.3/CONTENTS
  32. 1
      tests/templates/testfiles/test_executor_root/var/db/pkg/xfce-extra/xfce4-clipman-plugin-1.4.3/SLOT
  33. 1
      tests/templates/testfiles/test_executor_root/var/db/pkg/xfce-extra/xfce4-clipman-plugin-1.4.3/USE
  34. 165
      tests/templates/testfiles/test_executor_root/var/db/pkg/xfce-extra/xfce4-pulseaudio-plugin-0.4.2/CONTENTS
  35. 1
      tests/templates/testfiles/test_executor_root/var/db/pkg/xfce-extra/xfce4-pulseaudio-plugin-0.4.2/SLOT
  36. 1
      tests/templates/testfiles/test_executor_root/var/db/pkg/xfce-extra/xfce4-pulseaudio-plugin-0.4.2/USE
  37. 3
      tests/templates/testfiles/test_executor_root/var/lib/calculate/config
  38. 7
      tests/templates/testfiles/test_executor_root/var/lib/calculate/config-archive/etc/dir/deleted.json
  39. 5
      tests/templates/testfiles/test_executor_root/var/lib/calculate/config-archive/etc/dir/file.conf
  40. 17
      tests/templates/testfiles/test_executor_root/var/lib/calculate/config-archive/etc/dir/subdir/config.json
  41. 4
      tests/templates/testfiles/test_executor_root/var/lib/calculate/config-archive/etc/dir_1/file
  42. 7
      tests/templates/testfiles/test_executor_root/var/lib/calculate/config-archive/etc/other_file.conf
  43. 7
      tests/templates/testfiles/test_executor_root/var/lib/calculate/config-archive/etc/terminfo/info.json
  44. 12
      tests/templates/testfiles/test_executor_root/var/lib/calculate/config-archive/not_protected/file.conf
  45. 17
      tests/templates/testfiles/test_wrapper_root/etc/dir/dir_1/config.json
  46. 17
      tests/templates/testfiles/test_wrapper_root/etc/dir/subdir/config.json
  47. 6
      tests/templates/testfiles/test_wrapper_root/etc/dir/subdir/file
  48. 7
      tests/templates/testfiles/test_wrapper_root/var/db/pkg/test-category/test-package-1.0/CONTENTS
  49. 17
      tests/templates/testfiles/test_wrapper_root/var/lib/calculate/config-archive/etc/dir/subdir/config.json

4
.pytest_cache/v/cache/lastfailed

@ -1,5 +1,7 @@
{
"tests/templates/format/test_bind.py::TestParsingMethods::test_if_comment_parameter_is_set_for_template__format_object_will_parse_comments_with_comment_symbol_from_this_parameter": true,
"tests/templates/test_template_action.py": true,
"tests/templates/test_template_action.py::TestTemplateAction::test_create_directory": true
"tests/templates/test_template_action.py::TestTemplateAction::test_create_directory": true,
"tests/templates/test_template_executor.py::TestTemplateAction::test_if_the_chown_directory_method_input_is_path_to_the_existing_directory_and_correct_chown_value__the_chown_directory_method_succesfully_changes_directory_chown": true,
"tests/templates/test_template_wrapper.py::TestTemplateWrapper::test_if_a_TemplateWrapper_object_successfully_initialized__the_object_can_be_used_for_an_adding_any_files_to_its_package_and_hash_will_be_calculated_automatically": true
}

22
.pytest_cache/v/cache/nodeids

@ -29,6 +29,16 @@
"tests/templates/test_template_engine.py::TestTemplateEngine::test_if_an_input_template_contains_pkg_function_without_any_arguments_but_with_package_parameter_in_calculate_tag__the_pkg_function_returns_version_value_of_the_package_from_package_parameter",
"tests/templates/test_template_engine.py::TestTemplateEngine::test_if_an_input_template_contains_pkg_function_without_any_arguments_and_without_package_parameter_in_calculate_tag__the_pkg_function_returns_empty_version_value",
"tests/templates/test_template_engine.py::TestTemplateEngine::test_if_an_input_template_calculate_tag_contains_pkg_function_with_an_existing_package_in_its_argument__the_pkg_function_returns_version_value_of_the_package_from_package_parameter_without_any_exceptions",
"tests/templates/test_template_executor.py::TestTemplateAction::test_if_config_file_does_not_exist__a_CalculateConfigFile_object_will_create_one_while_its_initialization",
"tests/templates/test_template_executor.py::TestTemplateAction::test_if_config_directory_is_on_the_config_path_instead_of_config_file__a_CalculateConfigFile_object_throws_TemplateExecutorError_exception",
"tests/templates/test_template_executor.py::TestTemplateAction::test_if_a_CalculateConfigFile_object_is_initialized__the_object_can_be_used_for_setting_hash_sum_for_the_any_file",
"tests/templates/test_template_executor.py::TestTemplateAction::test_if_a_CalculateConfigFile_object_is_initialized__the_object_can_be_used_for_removing_any_file_from_config_file",
"tests/templates/test_template_executor.py::TestTemplateAction::test_if_a_CalculateConfigFile_object_contains_file_with_its_hash_and_the_hash_compared_with_equal_hash__the_compare_md5_method_returns_True",
"tests/templates/test_template_executor.py::TestTemplateAction::test_if_a_CalculateConfigFile_object_contains_file_with_its_hash_and_the_hash_compared_with_not_equal_hash__the_compare_md5_method_returns_False",
"tests/templates/test_template_executor.py::TestTemplateAction::test_if_a_CalculateConfigFile_object_is_used_for_comparing_a_hash_with_a_hash_of_a_file_that_is_not_in_the_config_file__the_compare_md5_method_returns_False",
"tests/templates/test_template_executor.py::TestTemplateAction::test_if_a_CalculateConfigFile_object_was_used_to_make_changes_in_the_config_file__the_save_changes_method_will_save_the_changes",
"tests/templates/test_template_executor.py::TestTemplateAction::test_if_a_TemplateExecutor_object_is_initialized__the_object_can_return_the_set_of_the_supported_values_of_the_append_parameter",
"tests/templates/test_template_executor.py::TestTemplateAction::test_if_the_chown_directory_method_input_is_path_to_the_existing_directory_and_correct_chown_value__the_chown_directory_method_succesfully_changes_directory_chown",
"tests/templates/test_template_executor.py::TestTemplateAction::test_chown_directory",
"tests/templates/test_template_executor.py::TestTemplateAction::test_chmod_directory",
"tests/templates/test_template_executor.py::TestTemplateAction::test_create_directory",
@ -92,6 +102,18 @@
"tests/templates/test_template_wrapper.py::TestTemplateWrapper::test_if_a_target_path_is_FILE_and_a_template_is_executable__the_target_path_is_replaced_with_the_path_to_the_cwd_directory_and_there_is_no_package_type_conflicts_and_other_checks",
"tests/templates/test_template_wrapper.py::TestTemplateWrapper::test_if_a_target_path_is_DIR_and_a_template_is_executable__the_target_path_is_the_same_and_there_is_no_package_type_conflicts_and_other_checks",
"tests/templates/test_template_wrapper.py::TestTemplateWrapper::test_if_a_template_is_executable_and_contains_package_parameter__the_template_updates_the_CONTENTS_file_for_package_from_parameter",
"tests/templates/test_template_wrapper.py::TestTemplateWrapper::test_if_a_TemplateWrapper_object_successfully_initialized_as_FILE__the_object_can_be_used_for_an_adding_the_current_file_to_its_package_and_hash_will_be_calculated_automatically",
"tests/templates/test_template_wrapper.py::TestTemplateWrapper::test_if_a_TemplateWrapper_object_successfully_initialized_as_FILE__the_object_can_be_used_for_an_adding_the_current_file_to_its_package_with_specified_hash",
"tests/templates/test_template_wrapper.py::TestTemplateWrapper::test_if_a_TemplateWrapper_object_successfully_initialized__the_object_can_be_used_for_a_removing_current_file_from_its_package",
"tests/templates/test_template_wrapper.py::TestTemplateWrapper::test_if_a_TemplateWrapper_object_successfully_initialized_as_DIR__the_object_can_be_used_for_a_removing_current_directory_and_all_its_contents_from_its_package",
"tests/templates/test_template_wrapper.py::TestTemplateWrapper::test_if_a_TemplateWrapper_object_successfully_initialized_with_DIR_type__the_object_can_be_used_for_a_removing_all_directory_files_from_its_package",
"tests/templates/test_template_wrapper.py::TestTemplateWrapper::test_if_a_TemplateWrapper_object_successfully_initialized__the_object_can_be_used_for_changing_CONTENTS_using_list_of_changed_files",
"tests/templates/test_template_wrapper.py::TestTemplateWrapper::test_if_a_TemplateWrapper_was_used_to_change_CONTENTS__it_should_be_saved_using_save_changes_method",
"tests/templates/test_template_wrapper.py::TestTemplateWrapper::test_if_after_removing_some_files_thought_TemplateWrapper_some_directories_become_empty__empty_directories_will_be_removed_saving_changes",
"tests/templates/test_template_wrapper.py::TestTemplateWrapper::test_if_mirror_parameter_is_set_and_target_file_does_not_exist__a_TemplateWrapper_object_throws_TemplateExecutorError",
"tests/templates/test_template_wrapper.py::TestTemplateWrapper::test_if_mirror_parameter_is_set_and_file_from_the_source_parameter_does_not_exist__a_TemplateWrapper_object_sets_remove_original_flag_as_True",
"tests/templates/test_template_wrapper.py::TestTemplateWrapper::test_if_run_parameter_is_set_for_template__no_checks_are_carried_out_while_TemplateWrapper_object_initialization",
"tests/templates/test_template_wrapper.py::TestTemplateWrapper::test_if_exec_parameter_is_set_for_template__no_checks_are_carried_out_while_TemplateWrapper_object_initialization",
"tests/templates/format/test_base.py::TestJoinMethod::test_if_inputs_are_dictionaries_with_string_keys_without_any_action_marks__the_dictionaties_just_merged",
"tests/templates/format/test_base.py::TestJoinMethod::test_if_inputs_are_dictionaries_with_tuple_keys_without_any_action_marks_as_their_keys__the_dictionaries_just_merged",
"tests/templates/format/test_base.py::TestJoinMethod::test_if_inputs_are_dictionaries_with_same_sections_which_contain_different_parameters__a_section_from_the_template_added_to_the_same_section_of_original_dictionary",

53
calculate/templates/template_processor.py

@ -185,13 +185,13 @@ class TemplateWrapper:
# Временный флаг для определения того, является ли шаблон userspace.
self.is_userspace = False
self.format_class = None
if self.parameters.run or self.parameters.exec:
# Если есть параметр run или exec, то кроме текста шаблона ничего
# не нужно.
return
self.format_class = None
if self.parameters.append in {'join', 'before', 'after'}:
# Получаем класс соответствующего формата файла.
if self.parameters.format:
@ -207,7 +207,9 @@ class TemplateWrapper:
if checker(target_file_path):
self.target_type = file_type
break
self.target_is_link = os.path.islink(target_file_path)
# Если установлен параметр mirror и есть параметр source,
# содержащий несуществующий путь -- удаляем целевой файл.
if self.parameters.source is True and self.parameters.mirror:
@ -255,8 +257,19 @@ class TemplateWrapper:
def check_conflicts(self):
'''Проверка конфликтов типов.'''
if self.parameters.append == 'link':
if self.parameters.force or self.target_is_link:
if self.parameters.force:
self.remove_original = True
elif self.target_is_link:
if self.template_type != self.target_type:
raise TemplateTypeConflict(
"the target is a link to {} while the template"
"is {} and has append = 'link'".
format('directory' if self.template_type ==
DIR else 'file',
'file' if self.template_type ==
DIR else 'directory'))
else:
self.remove_original = True
elif self.target_type == DIR:
raise TemplateTypeConflict("the target is a directory while "
"the template has append = 'link'")
@ -370,6 +383,7 @@ class TemplateWrapper:
if self.target_path.startswith(protected_path):
self.protected = True
break
# Затем по переменной CONFIG_PROTECT_MASK.
for unprotected_path in self._unprotected_set:
if self.target_path.startswith(unprotected_path):
@ -444,7 +458,6 @@ class TemplateWrapper:
def _get_cfg_path(self, file_path):
'''Метод для получения пути для создания нового ._cfg????_ файла.'''
print(self.cfg_list)
if self.cfg_list:
last_cfg_name = os.path.basename(self.cfg_list[-1])
@ -476,7 +489,7 @@ class TemplateWrapper:
if self.template_type == DIR:
self.target_package.clear_dir(self.target_path)
def add_to_contents(self, file_md5=None, file_path=None):
def add_to_contents(self, file_md5=None):
'''Метод для добавления целевого файла в CONTENTS.'''
if self.parameters.append == 'link':
self.target_package.add_sym(self.target_path,
@ -484,9 +497,10 @@ class TemplateWrapper:
elif self.template_type == DIR:
self.target_package.add_dir(self.target_path)
elif self.template_type == FILE:
self.target_package.add_obj(self.target_path, file_md5)
self.target_package.add_obj(self.target_path, file_md5=file_md5)
def update_contents_from_list(self, changed_list: dict):
'''Метод для изменения CONTENTS по списку измененных файлов.'''
for file_path, mode in changed_list.items():
if mode == "modify":
if os.path.islink(file_path):
@ -537,21 +551,25 @@ class TemplateWrapper:
class TemplateExecutor:
'''Класс исполнительного модуля.'''
def __init__(self, datavars_module=Variables(), chroot_path='/',
cl_config_archive='/var/lib/calculate/config-archive',
cl_config_path='/var/lib/calculate/config',
exec_dir_path='/var/lib/calculate/.execute/'):
execute_archive_path='/var/lib/calculate/.execute/'):
self.datavars_module = datavars_module
self.chroot_path = chroot_path
self.exec_files_directory = '/var/lib/calculate/.execute/'
# Директория для хранения полученных при обработке exec скриптов.
self.execute_archive_path = execute_archive_path
self.directory_default_parameters =\
ParametersProcessor.directory_default_parameters
self.file_default_parameters =\
ParametersProcessor.file_default_parameters
# Отображение имен действий для директорий на методы их реализующие.
self.directory_appends = {'join': self._append_join_directory,
'remove': self._append_remove_directory,
'skip': self._append_skip_directory,
@ -559,6 +577,7 @@ class TemplateExecutor:
'link': self._append_link_directory,
'replace': self._append_replace_directory}
# Отображение имен действий для файлов на методы их реализующие.
self.file_appends = {'join': self._append_join_file,
'after': self._append_after_file,
'before': self._append_before_file,
@ -585,6 +604,7 @@ class TemplateExecutor:
def execute_template(self, target_path, parameters, template_type,
template_text=''):
'''Метод для запуска выполнения шаблонов.'''
# Словарь с данными о результате работы исполнительного метода.
self.executor_output = {'target_path': None,
'stdout': None,
'stderr': None,
@ -611,12 +631,15 @@ class TemplateExecutor:
self._remove_directory(template_object.target_path)
else:
self._remove_file(template_object.target_path)
template_object.remove_from_contents()
# Если был включен mirror, то после удаления файла завершаем
# выполнение шаблона.
if template_object.parameters.mirror:
template_object.save_changes()
return
template_object.target_type = None
if template_object.parameters.run:
@ -1136,15 +1159,16 @@ class TemplateExecutor:
# Получаем путь к директории для хранения файлов .execute.
if (self.chroot_path != '/' and not
self.exec_files_directory.startswith(self.chroot_path)):
exec_files_directory = join_paths(self.chroot_path,
'/var/lib/calculate/.execute/')
self.execute_archive_path.startswith(self.chroot_path)):
self.execute_archive_path = join_paths(
self.chroot_path,
self.execute_archive_path)
# Если директория уже существует получаем номер очередного файла для
# exec по номеру последнего.
exec_number = 0
if os.path.exists(exec_files_directory):
exec_files_list = os.listdir(exec_files_directory)
if os.path.exists(self.execute_archive_path):
exec_files_list = os.listdir(self.execute_archive_path)
if exec_files_list:
exec_number = int(exec_files_list[-1][-4:])
@ -1154,7 +1178,7 @@ class TemplateExecutor:
if len(exec_number) < 4:
exec_number = '0' * (4 - len(exec_number)) + exec_number
exec_file_name = 'exec_{}'.format(exec_number)
exec_file_path = join_paths(exec_files_directory,
exec_file_path = join_paths(self.execute_archive_path,
exec_file_name)
exec_file = write_file(exec_file_path)
@ -1279,6 +1303,7 @@ class TemplateExecutor:
class DirectoryTree:
'''Класс реализующий дерево каталогов для пакета.'''
def __init__(self, base_directory):
self.base_directory = base_directory
self._tree = {}

14
calculate/utils/package.py

@ -726,19 +726,29 @@ class Package:
'''Метод для удаления из CONTENTS файлов и директорий находящихся
внутри удаляемой директории и самой директории.'''
directory_path = self.remove_chroot_path(file_path)
paths_to_remove = []
for file_path in self.contents_dictionary:
if file_path.startswith(directory_path):
self.contents_dictionary.pop(file_path)
paths_to_remove.append(file_path)
for file_path in paths_to_remove:
self.contents_dictionary.pop(file_path)
def clear_dir(self, file_path):
'''Метод для удаления из CONTENTS файлов и директорий находящихся
внутри очищаемой директории.'''
directory_path = self.remove_chroot_path(file_path)
paths_to_remove = []
for file_path in self.contents_dictionary:
if file_path == directory_path:
continue
if file_path.startswith(directory_path):
self.contents_dictionary.pop(file_path)
paths_to_remove.append(file_path)
for file_path in paths_to_remove:
self.contents_dictionary.pop(file_path)
def remove_empty_directories(self):
'''Метод для удаления из CONTENTS директорий, которые после удаления

16
template_action_draft.py

@ -63,11 +63,15 @@ awful_section {
one_more_template_text = '''{% calculate append = 'join', format = 'json',
autoupdate, package = 'test-category/test-package' -%}
{
"Band": "Summoning",
"Song": "Rotting Horse on the Deadly Ground",
"Genre": "Black metal",
"Status": "Unspeakably good song",
"isRecommended": true
"languageserver":
{
"clangd":
{
"command": "clangd",
"rootPatterns": ["compile_flags.txt", "compile_commands.json"],
"filetypes": ["c", "cpp", "objc", "objcpp"]
}
}
}
'''
@ -1305,7 +1309,7 @@ template_engine = TemplateEngine(datavars_module=DATAVARS_MODULE,
target_path = os.path.join(CHROOT_PATH, 'etc/dir/file.conf')
other_target_path = os.path.join(CHROOT_PATH, 'etc/other_file.conf')
another_target_path = os.path.join(CHROOT_PATH, 'not_protected/file.conf')
one_more_target_path = os.path.join(CHROOT_PATH, 'etc/dir/deleted.json')
one_more_target_path = os.path.join(CHROOT_PATH, 'etc/dir/subdir/config.json')
run_target_path = os.path.join(CHROOT_PATH, 'file_to_run.py')
# Применение основного шаблона:

153
tests/templates/test_template_executor.py

@ -1,10 +1,15 @@
import pytest
import os
from calculate.templates.template_processor import TemplateExecutor, DIR, FILE
from calculate.templates.template_processor import TemplateExecutor, DIR,\
FILE, CalculateConfigFile,\
TemplateExecutorError
from calculate.templates.template_engine import ParametersContainer
from calculate.utils.files import join_paths
import hashlib
CHROOT_PATH = os.path.join(os.getcwd(), 'tests/templates/testfiles/test_root')
CHROOT_PATH = os.path.join(os.getcwd(),
'tests/templates/testfiles/test_executor_root')
CL_CONFIG_PATH = os.path.join(CHROOT_PATH, 'var/lib/calculate/config')
CL_CONFIG_ARCHIVE_PATH = os.path.join(CHROOT_PATH,
'var/lib/calculate/config-archive')
@ -12,14 +17,150 @@ CL_EXECUTE_ARCHIVE_PATH = os.path.join(CHROOT_PATH,
'var/lib/calculate/.execute')
template_executor = TemplateExecutor(chroot_path=CHROOT_PATH,
cl_config_archive=CL_CONFIG_ARCHIVE_PATH,
cl_config_path=CL_CONFIG_PATH,
exec_dir_path=CL_EXECUTE_ARCHIVE_PATH)
template_executor = TemplateExecutor(
chroot_path=CHROOT_PATH,
cl_config_archive=CL_CONFIG_ARCHIVE_PATH,
cl_config_path=CL_CONFIG_PATH,
execute_archive_path=CL_EXECUTE_ARCHIVE_PATH)
@pytest.mark.template_executor
class TestTemplateAction:
# Сначала протестируем класс для работы с /var/lib/calculate/config файлом.
def test_if_config_file_does_not_exist__a_CalculateConfigFile_object_will_create_one_while_its_initialization(self):
temporary_chroot = join_paths(
os.getcwd(),
'tests/templates/testfiles/test_config_root_1')
temporary_config_path = join_paths(temporary_chroot,
'var/lib/calculate/config')
calculate_config_file = CalculateConfigFile(
cl_config_path=temporary_config_path,
cl_chroot_path=temporary_chroot)
assert os.path.exists(calculate_config_file.cl_config_path)
os.remove(calculate_config_file.cl_config_path)
def test_if_config_directory_is_on_the_config_path_instead_of_config_file__a_CalculateConfigFile_object_throws_TemplateExecutorError_exception(self):
temporary_chroot = join_paths(
os.getcwd(),
'tests/templates/testfiles/test_config_root_2')
temporary_config_path = join_paths(temporary_chroot,
'var/lib/calculate/config')
with pytest.raises(TemplateExecutorError):
calculate_config_file = CalculateConfigFile(
cl_config_path=temporary_config_path,
cl_chroot_path=temporary_chroot)
def test_if_a_CalculateConfigFile_object_is_initialized__the_object_can_be_used_for_setting_hash_sum_for_the_any_file(self):
calculate_config_file = CalculateConfigFile(
cl_config_path=CL_CONFIG_PATH,
cl_chroot_path=CHROOT_PATH)
md5_value = hashlib.md5(open(join_paths(CHROOT_PATH,
'/etc/file'),
'r').read().encode()).hexdigest()
calculate_config_file.set_files_md5('/etc/file', md5_value)
assert '/etc/file' in calculate_config_file
assert calculate_config_file._config_dictionary['/etc/file'] ==\
md5_value
def test_if_a_CalculateConfigFile_object_is_initialized__the_object_can_be_used_for_removing_any_file_from_config_file(self):
calculate_config_file = CalculateConfigFile(
cl_config_path=CL_CONFIG_PATH,
cl_chroot_path=CHROOT_PATH)
md5_value = hashlib.md5(open(join_paths(CHROOT_PATH,
'/etc/file'),
'r').read().encode()).hexdigest()
calculate_config_file.set_files_md5('/etc/file', md5_value)
assert '/etc/file' in calculate_config_file
calculate_config_file.remove_file('/etc/file')
assert '/etc/file' not in calculate_config_file
def test_if_a_CalculateConfigFile_object_contains_file_with_its_hash_and_the_hash_compared_with_equal_hash__the_compare_md5_method_returns_True(self):
calculate_config_file = CalculateConfigFile(
cl_config_path=CL_CONFIG_PATH,
cl_chroot_path=CHROOT_PATH)
md5_value = hashlib.md5(open(join_paths(CHROOT_PATH,
'/etc/file'),
'r').read().encode()).hexdigest()
calculate_config_file.set_files_md5('/etc/file', md5_value)
assert calculate_config_file.compare_md5('/etc/file', md5_value)
def test_if_a_CalculateConfigFile_object_contains_file_with_its_hash_and_the_hash_compared_with_not_equal_hash__the_compare_md5_method_returns_False(self):
calculate_config_file = CalculateConfigFile(
cl_config_path=CL_CONFIG_PATH,
cl_chroot_path=CHROOT_PATH)
md5_value_1 = hashlib.md5(open(join_paths(CHROOT_PATH,
'/etc/file'),
'r').read().encode()).hexdigest()
calculate_config_file.set_files_md5('/etc/file', md5_value_1)
md5_value_2 = hashlib.md5(open(join_paths(CHROOT_PATH,
'/etc/dir/file.conf'),
'r').read().encode()).hexdigest()
assert not calculate_config_file.compare_md5('/etc/file', md5_value_2)
def test_if_a_CalculateConfigFile_object_is_used_for_comparing_a_hash_with_a_hash_of_a_file_that_is_not_in_the_config_file__the_compare_md5_method_returns_False(self):
calculate_config_file = CalculateConfigFile(
cl_config_path=CL_CONFIG_PATH,
cl_chroot_path=CHROOT_PATH)
md5_value = hashlib.md5(open(join_paths(CHROOT_PATH,
'/etc/file'),
'r').read().encode()).hexdigest()
assert not calculate_config_file.compare_md5('/etc/file', md5_value)
def test_if_a_CalculateConfigFile_object_was_used_to_make_changes_in_the_config_file__the_save_changes_method_will_save_the_changes(self):
temporary_chroot = join_paths(
os.getcwd(),
'tests/templates/testfiles/test_config_root_1')
temporary_config_path = join_paths(temporary_chroot,
'var/lib/calculate/config')
calculate_config_file = CalculateConfigFile(
cl_config_path=temporary_config_path,
cl_chroot_path=temporary_chroot)
md5_value_1 = hashlib.md5(open(join_paths(CHROOT_PATH,
'/etc/file'),
'r').read().encode()).hexdigest()
calculate_config_file.set_files_md5('/etc/file', md5_value_1)
md5_value_2 = hashlib.md5(open(join_paths(CHROOT_PATH,
'/etc/dir/file.conf'),
'r').read().encode()).hexdigest()
calculate_config_file.set_files_md5('/etc/dir/file.conf', md5_value_2)
calculate_config_file.save_changes()
output_text = '/etc/file {}\n/etc/dir/file.conf {}\n'.format(
md5_value_1,
md5_value_2)
assert open(temporary_config_path, 'r').read() == output_text
os.remove(calculate_config_file.cl_config_path)
# Тестируем исполнительный модуль.
# Тестируем сначала кое-какие вспомогательные методы.
def test_if_a_TemplateExecutor_object_is_initialized__the_object_can_return_the_set_of_the_supported_values_of_the_append_parameter(self):
template_executor = TemplateExecutor(
chroot_path=CHROOT_PATH,
cl_config_archive=CL_CONFIG_ARCHIVE_PATH,
cl_config_path=CL_CONFIG_PATH,
execute_archive_path=CL_EXECUTE_ARCHIVE_PATH)
assert template_executor.available_appends
assert 'join' in template_executor.available_appends
assert 'skip' in template_executor.available_appends
assert 'remove' in template_executor.available_appends
# Тестируем методы для работы непосредственно с файловой системой.
def test_if_the_chown_directory_method_input_is_path_to_the_existing_directory_and_correct_chown_value__the_chown_directory_method_succesfully_changes_directory_chown(self):
template_executor._chown_directory(join_paths(
CHROOT_PATH,
'/etc/chown_testfiles/dir_0'),
{'uid': 0, 'gid': 0})
def test_chown_directory(self):
pass

300
tests/templates/test_template_wrapper.py

@ -3,9 +3,11 @@ import os
from calculate.templates.template_engine import ParametersContainer
from calculate.templates.template_processor import TemplateWrapper, FILE, DIR,\
TemplateTypeConflict,\
TemplateCollisionError
TemplateCollisionError,\
TemplateExecutorError
from calculate.utils.package import PackageAtomName, Version
from calculate.utils.files import join_paths
import hashlib
CHROOT_PATH = os.path.join(os.getcwd(),
@ -300,32 +302,24 @@ class TestTemplateWrapper:
def test_if_template_type_is_FILE_with_the_append_link_parameter_and_target_file_is_the_link_to_a_DIR__the_TemplateWrapper_sets_remove_original_flag(self):
parameters_object = ParametersContainer({'package': test_package_name,
'append': 'link'})
try:
with pytest.raises(TemplateTypeConflict):
template_wrapper = TemplateWrapper(
join_paths(CHROOT_PATH,
'/etc/dir_link'),
parameters_object, FILE,
chroot_path=CHROOT_PATH,
config_archive_path=CONFIG_ARCHIVE_PATH)
except Exception as error:
pytest.fail("Unexpected exception: {}".format(str(error)))
assert template_wrapper.remove_original
def test_if_template_type_is_DIR_with_the_append_link_parameter_and_target_file_is_the_link_to_a_FILE__the_TemplateWrapper_sets_remove_original_flag(self):
parameters_object = ParametersContainer({'package': test_package_name,
'append': 'link'})
try:
with pytest.raises(TemplateTypeConflict):
template_wrapper = TemplateWrapper(
join_paths(CHROOT_PATH,
'/etc/file_link'),
parameters_object, DIR,
chroot_path=CHROOT_PATH,
config_archive_path=CONFIG_ARCHIVE_PATH)
except Exception as error:
pytest.fail("Unexpected exception: {}".format(str(error)))
assert template_wrapper.remove_original
def test_if_template_type_is_DIR_with_the_append_link_parameter_and_target_file_is_the_link_to_a_DIR__the_TemplateWrapper_sets_remove_original_flag(self):
parameters_object = ParametersContainer({'package': test_package_name,
@ -912,3 +906,287 @@ class TestTemplateWrapper:
assert template_wrapper.target_package_name == test_package_name
# Тестируем работу с CONTENTS через объект обертки.
def test_if_a_TemplateWrapper_object_successfully_initialized_as_FILE__the_object_can_be_used_for_an_adding_the_current_file_to_its_package_and_hash_will_be_calculated_automatically(self):
parameters_object = ParametersContainer({'package': test_package_name,
'append': 'join',
'format': 'samba'})
try:
template_wrapper = TemplateWrapper(
join_paths(CHROOT_PATH,
'/etc/file'),
parameters_object, FILE,
chroot_path=CHROOT_PATH,
config_archive_path=CONFIG_ARCHIVE_PATH)
except Exception as error:
pytest.fail("Unexpected exception: {}".format(str(error)))
template_wrapper.add_to_contents()
assert '/etc/file' in template_wrapper.target_package
def test_if_a_TemplateWrapper_object_successfully_initialized_as_FILE__the_object_can_be_used_for_an_adding_the_current_file_to_its_package_with_specified_hash(self):
parameters_object = ParametersContainer({'package': test_package_name,
'append': 'join',
'format': 'samba'})
try:
template_wrapper = TemplateWrapper(
join_paths(CHROOT_PATH,
'/etc/file'),
parameters_object, FILE,
chroot_path=CHROOT_PATH,
config_archive_path=CONFIG_ARCHIVE_PATH)
except Exception as error:
pytest.fail("Unexpected exception: {}".format(str(error)))
template_wrapper.add_to_contents(file_md5='666')
assert '/etc/file' in template_wrapper.target_package
assert template_wrapper.target_package.\
contents_dictionary['/etc/file']['md5'] == '666'
def test_if_a_TemplateWrapper_object_successfully_initialized__the_object_can_be_used_for_a_removing_current_file_from_its_package(self):
parameters_object = ParametersContainer({'package': test_package_name,
'append': 'join',
'format': 'samba'})
try:
template_wrapper = TemplateWrapper(
join_paths(CHROOT_PATH,
'/etc/dir/file.conf'),
parameters_object, FILE,
chroot_path=CHROOT_PATH,
config_archive_path=CONFIG_ARCHIVE_PATH)
except Exception as error:
pytest.fail("Unexpected exception: {}".format(str(error)))
template_wrapper.remove_from_contents()
assert '/etc/dir/file.conf' not in template_wrapper.target_package
def test_if_a_TemplateWrapper_object_successfully_initialized_as_DIR__the_object_can_be_used_for_a_removing_current_directory_and_all_its_contents_from_its_package(self):
parameters_object = ParametersContainer({'package': test_package_name,
'append': 'join'})
try:
template_wrapper = TemplateWrapper(
join_paths(CHROOT_PATH,
'/etc/dir'),
parameters_object, DIR,
chroot_path=CHROOT_PATH,
config_archive_path=CONFIG_ARCHIVE_PATH)
except Exception as error:
pytest.fail("Unexpected exception: {}".format(str(error)))
template_wrapper.remove_from_contents()
assert '/etc/dir/subdir' not in template_wrapper.target_package
assert '/etc/dir/subdir/config.json' not in template_wrapper.\
target_package
assert '/etc/dir/file.conf' not in template_wrapper.target_package
assert '/etc/dir' not in template_wrapper.target_package
def test_if_a_TemplateWrapper_object_successfully_initialized_with_DIR_type__the_object_can_be_used_for_a_removing_all_directory_files_from_its_package(self):
parameters_object = ParametersContainer({'package': test_package_name,
'append': 'clear'})
try:
template_wrapper = TemplateWrapper(
join_paths(CHROOT_PATH,
'/etc/dir'),
parameters_object, DIR,
chroot_path=CHROOT_PATH,
config_archive_path=CONFIG_ARCHIVE_PATH)
except Exception as error:
pytest.fail("Unexpected exception: {}".format(str(error)))
template_wrapper.clear_dir_contents()
assert '/etc/dir/subdir' not in template_wrapper.target_package
assert '/etc/dir/subdir/config.json' not in template_wrapper.\
target_package
assert '/etc/dir/file.conf' not in template_wrapper.target_package
assert '/etc/dir' in template_wrapper.target_package
def test_if_a_TemplateWrapper_object_successfully_initialized__the_object_can_be_used_for_changing_CONTENTS_using_list_of_changed_files(self):
parameters_object = ParametersContainer({'package': test_package_name,
'append': 'join',
'format': 'patch'})
changed_files = {join_paths(CHROOT_PATH,
'/etc/dir/subdir/config.json'): 'remove',
join_paths(CHROOT_PATH,
'/etc/file'): 'modify',
join_paths(CHROOT_PATH,
'/etc/dir/subdir/file'): 'modify'}
try:
template_wrapper = TemplateWrapper(
join_paths(CHROOT_PATH,
'/etc/dir'),
parameters_object, DIR,
chroot_path=CHROOT_PATH,
config_archive_path=CONFIG_ARCHIVE_PATH)
except Exception as error:
pytest.fail("Unexpected exception: {}".format(str(error)))
template_wrapper.update_contents_from_list(changed_files)
assert '/etc/dir/subdir/config.json' not in template_wrapper.\
target_package
assert '/etc/file' in template_wrapper.target_package
assert '/etc/dir/subdir/file' in template_wrapper.target_package
new_md5 = hashlib.md5(open(join_paths(CHROOT_PATH,
'/etc/dir/subdir/file'),
'r').read().encode()).hexdigest()
assert template_wrapper.target_package.\
contents_dictionary['/etc/dir/subdir/file']['md5'] == new_md5
def test_if_a_TemplateWrapper_was_used_to_change_CONTENTS__it_should_be_saved_using_save_changes_method(self):
parameters_object = ParametersContainer({'package': test_package_name,
'append': 'join',
'format': 'samba',
'autoupdate': True})
try:
template_wrapper = TemplateWrapper(
join_paths(CHROOT_PATH,
'/etc/file'),
parameters_object, FILE,
chroot_path=CHROOT_PATH,
config_archive_path=CONFIG_ARCHIVE_PATH)
except Exception as error:
pytest.fail("Unexpected exception: {}".format(str(error)))
template_wrapper.add_to_contents()
template_wrapper.save_changes()
try:
template_wrapper = TemplateWrapper(
join_paths(CHROOT_PATH,
'/etc/dir/file.conf'),
parameters_object, FILE,
chroot_path=CHROOT_PATH,
config_archive_path=CONFIG_ARCHIVE_PATH)
except Exception as error:
pytest.fail("Unexpected exception: {}".format(str(error)))
template_wrapper.remove_from_contents()
template_wrapper.save_changes()
try:
template_wrapper = TemplateWrapper(
join_paths(CHROOT_PATH,
'/etc/file'),
parameters_object, FILE,
chroot_path=CHROOT_PATH,
config_archive_path=CONFIG_ARCHIVE_PATH)
except Exception as error:
pytest.fail("Unexpected exception: {}".format(str(error)))
assert '/etc/file' in template_wrapper.target_package
assert '/etc/dir/file.conf' not in template_wrapper.target_package
template_wrapper.remove_from_contents()
template_wrapper.save_changes()
try:
template_wrapper = TemplateWrapper(
join_paths(CHROOT_PATH,
'/etc/dir/file.conf'),
parameters_object, FILE,
chroot_path=CHROOT_PATH,
config_archive_path=CONFIG_ARCHIVE_PATH)
except Exception as error:
pytest.fail("Unexpected exception: {}".format(str(error)))
template_wrapper.add_to_contents()
template_wrapper.save_changes()
assert '/etc/dir/file.conf' in template_wrapper.target_package
assert '/etc/file' not in template_wrapper.target_package
def test_if_after_removing_some_files_thought_TemplateWrapper_some_directories_become_empty__empty_directories_will_be_removed_saving_changes(self):
parameters_object = ParametersContainer({'package': test_package_name,
'append': 'join',
'format': 'samba',
'autoupdate': True})
try:
template_wrapper = TemplateWrapper(
join_paths(CHROOT_PATH,
'/etc/dir/dir_1/config.json'),
parameters_object, FILE,
chroot_path=CHROOT_PATH,
config_archive_path=CONFIG_ARCHIVE_PATH)
except Exception as error:
pytest.fail("Unexpected exception: {}".format(str(error)))
template_wrapper.remove_from_contents()
template_wrapper.save_changes()
assert '/etc/dir/dir_1/config.json' not in template_wrapper.\
target_package
assert '/etc/dir/dir_1' not in template_wrapper.\
target_package
template_wrapper.add_to_contents()
template_wrapper.save_changes()
assert '/etc/dir/dir_1/config.json' in template_wrapper.\
target_package
assert '/etc/dir/dir_1' in template_wrapper.\
target_package
# Тестируем особенности поведения при различных значениях параметров.
def test_if_mirror_parameter_is_set_and_target_file_does_not_exist__a_TemplateWrapper_object_throws_TemplateExecutorError(self):
source = join_paths(CHROOT_PATH, '/etc/file')
parameters_object = ParametersContainer({'package': test_package_name,
'append': 'join',
'format': 'bind',
'source': source,
'mirror': True})
with pytest.raises(TemplateExecutorError):
template_wrapper = TemplateWrapper(
join_paths(CHROOT_PATH,
'/etc/dir/none'),
parameters_object, FILE,
chroot_path=CHROOT_PATH,
config_archive_path=CONFIG_ARCHIVE_PATH)
def test_if_mirror_parameter_is_set_and_file_from_the_source_parameter_does_not_exist__a_TemplateWrapper_object_sets_remove_original_flag_as_True(self):
parameters_object = ParametersContainer({'package': test_package_name,
'append': 'join',
'format': 'samba',
'source': True,
'mirror': True})
# Значение True для параметра означает его наличие.
# Если параметр должен содержать небулево значение, например, путь, но
# для него стоит True -- это значит, что путь оказался некорректным,
# но есть необходимость показать, что параметр в шаблоне присутствовал.
try:
template_wrapper = TemplateWrapper(
join_paths(CHROOT_PATH,
'/etc/dir/file.conf'),
parameters_object, FILE,
chroot_path=CHROOT_PATH,
config_archive_path=CONFIG_ARCHIVE_PATH)
except Exception as error:
pytest.fail("Unexpected exception: {}".format(str(error)))
assert template_wrapper.remove_original
def test_if_run_parameter_is_set_for_template__no_checks_are_carried_out_while_TemplateWrapper_object_initialization(self):
parameters_object = ParametersContainer({'package': test_package_name,
'run': '/usr/bin/python'})
try:
template_wrapper = TemplateWrapper(
join_paths(CHROOT_PATH,
'/etc/dir/file.conf'),
parameters_object, FILE,
chroot_path=CHROOT_PATH,
config_archive_path=CONFIG_ARCHIVE_PATH)
except Exception as error:
pytest.fail("Unexpected exception: {}".format(str(error)))
assert template_wrapper.parameters.run == '/usr/bin/python'
def test_if_exec_parameter_is_set_for_template__no_checks_are_carried_out_while_TemplateWrapper_object_initialization(self):
parameters_object = ParametersContainer({'package': test_package_name,
'exec': '/usr/bin/python'})
try:
template_wrapper = TemplateWrapper(
join_paths(CHROOT_PATH,
'/etc/dir/file.conf'),
parameters_object, FILE,
chroot_path=CHROOT_PATH,
config_archive_path=CONFIG_ARCHIVE_PATH)
except Exception as error:
pytest.fail("Unexpected exception: {}".format(str(error)))
assert template_wrapper.parameters.exec == '/usr/bin/python'

17
tests/templates/testfiles/test_executor_root/etc/dir/dir_1/config.json

@ -0,0 +1,17 @@
{
"languageserver": {
"clangd": {
"command": "clangd",
"rootPatterns": [
"compile_flags.txt",
"compile_commands.json"
],
"filetypes": [
"c",
"cpp",
"objc",
"objcpp"
]
}
}
}

5
tests/templates/testfiles/test_executor_root/etc/dir/file.conf

@ -0,0 +1,5 @@
[section one]
parameter_1 = value
parameter_2 = value_2
[section two]
other_parameter = other_value

17
tests/templates/testfiles/test_executor_root/etc/dir/subdir/config.json

@ -0,0 +1,17 @@
{
"languageserver": {
"clangd": {
"command": "clangd",
"rootPatterns": [
"compile_flags.txt",
"compile_commands.json"
],
"filetypes": [
"c",
"cpp",
"objc",
"objcpp"
]
}
}
}

6
tests/templates/testfiles/test_executor_root/etc/dir/subdir/file

@ -0,0 +1,6 @@
options {
parameter_1 no;
parameter_2 yes;
user_change "blah";
};

3
tests/templates/testfiles/test_executor_root/etc/file

@ -0,0 +1,3 @@
# Source file
[section_name]
rare_parameter = eternal_value

7
tests/templates/testfiles/test_executor_root/etc/terminfo/info.json

@ -0,0 +1,7 @@
{
"Band": "Summoning",
"Song": "Flight of the Nazgul",
"Genre": "Black metal",
"Status": "Damn good song",
"isRecommended": true
}

4177
tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-2.7.16/CONTENTS
File diff suppressed because it is too large
View File

1
tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-2.7.16/SLOT

@ -0,0 +1 @@
2.7

1
tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-2.7.16/USE

@ -0,0 +1 @@
abi_x86_64 amd64 bluetooth elibc_glibc gdbm ipv6 kernel_linux ncurses readline sqlite ssl threads userland_GNU wide-unicode xml

6382
tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-3.6.9/CONTENTS
File diff suppressed because it is too large
View File

1
tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-3.6.9/SLOT

@ -0,0 +1 @@
3.6/3.6m

1
tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-3.6.9/USE

@ -0,0 +1 @@
abi_x86_64 amd64 bluetooth elibc_glibc gdbm ipv6 kernel_linux ncurses readline sqlite ssl threads userland_GNU xml specific_flag

24
tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-exec-2.4.6-r1/CONTENTS

@ -0,0 +1,24 @@
dir /usr
dir /usr/bin
sym /usr/bin/2to3 -> ../lib/python-exec/python-exec2 1573585288
sym /usr/bin/idle -> ../lib/python-exec/python-exec2 1573585288
sym /usr/bin/pydoc -> ../lib/python-exec/python-exec2 1573585288
sym /usr/bin/python -> python-exec2c 1573585287
sym /usr/bin/python-config -> ../lib/python-exec/python-exec2 1573585288
obj /usr/bin/python-exec2c af334205aa0e66aa1231f0dcbf5d24b1 1573585288
sym /usr/bin/python2 -> python-exec2c 1573585287
sym /usr/bin/python2-config -> ../lib/python-exec/python-exec2 1573585288
sym /usr/bin/python3 -> python-exec2c 1573585288
sym /usr/bin/python3-config -> ../lib/python-exec/python-exec2 1573585288
sym /usr/bin/pyvenv -> ../lib/python-exec/python-exec2 1573585288
dir /usr/lib
dir /usr/lib/python-exec
obj /usr/lib/python-exec/python-exec2 7157717ea4b74eedcebcf2d33869972a 1573585287
dir /usr/share
dir /usr/share/doc
dir /usr/share/doc/python-exec-2.4.6-r1
obj /usr/share/doc/python-exec-2.4.6-r1/NEWS.bz2 e590444b323cd9761311fa6a0880aa56 1573585287
obj /usr/share/doc/python-exec-2.4.6-r1/README.bz2 cb19bc40b60019563688808ce1fd21bb 1573585287
dir /etc
dir /etc/python-exec
obj /etc/python-exec/python-exec.conf 88e20913bbc1588292f71940e6ea0b47 1573596811

1
tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-exec-2.4.6-r1/SLOT

@ -0,0 +1 @@
2

1
tests/templates/testfiles/test_executor_root/var/db/pkg/dev-lang/python-exec-2.4.6-r1/USE

@ -0,0 +1 @@
abi_x86_64 amd64 elibc_glibc kernel_linux python_targets_jython2_7 python_targets_pypy python_targets_pypy3 python_targets_python2_7 python_targets_python3_5 python_targets_python3_6 python_targets_python3_7 python_targets_python3_8 userland_GNU

104
tests/templates/testfiles/test_executor_root/var/db/pkg/media-sound/alsa-utils-1.1.8/CONTENTS

@ -0,0 +1,104 @@
dir /lib
dir /lib/udev
dir /lib/udev/rules.d
obj /lib/udev/rules.d/89-alsa-ucm.rules f9db1cbcf4e97e8727d4c449ad42b35d 1553374069
obj /lib/udev/rules.d/90-alsa-restore.rules eda73c697e00c5f0394429047d949cf6 1553374067
dir /usr
dir /usr/bin
obj /usr/bin/aconnect d3c44a62d4b52ae6dd20ceed85a3ab1b 1553374073
obj /usr/bin/alsaloop 77e1a3aa9bbad1f41c57637ee7b1f64e 1553374073
obj /usr/bin/alsamixer 4a44265b08662128c5efd8d1aa3b62a9 1553374073
obj /usr/bin/alsatplg a5384bc6a65381af2c9d5cbddf23f207 1553374073
obj /usr/bin/alsaucm 86f5d6a2eed4499e91a39bce27a08960 1553374073
obj /usr/bin/amidi 0d08379e4af9d37442e064bca059efaa 1553374073
obj /usr/bin/amixer 94b6c5adc1993098f53a658e6d6607a0 1553374073
obj /usr/bin/aplay ca57287a2d773c1c37b8730083785f2b 1553374073
obj /usr/bin/aplaymidi 4de9bb39fd814c229504e673901b91ba 1553374073
sym /usr/bin/arecord -> aplay 1553374068
obj /usr/bin/arecordmidi 785c77b520c38e95840bbff833b71b41 1553374073
obj /usr/bin/aseqdump 7f6ac6dbfd17da25abc4cb9e05080de2 1553374073
obj /usr/bin/aseqnet 9609eb022c1ff825d42433446d620d53 1553374073
obj /usr/bin/axfer 77c040b5aa934d868f08d0d04b334da9 1553374073
obj /usr/bin/changemixer 07e79f41e7828aa10e7e557907243aa1 1574417040
obj /usr/bin/iecset a2d02663381b641d9551227ed067c3d9 1553374073
obj /usr/bin/speaker-test 825fb649528db50d03c7641ee41bc9cc 1553374073
dir /usr/sbin
obj /usr/sbin/alsa-info.sh f4f82df6ef99d173e6ae12be0a76a052 1553374067
obj /usr/sbin/alsactl 8683cc2d1592cef831454c168794c9ea 1553374073
dir /usr/share
dir /usr/share/alsa
dir /usr/share/alsa/init
obj /usr/share/alsa/init/00main 897306b2f40bf7f1366aaf80001ddc8e 1553374067
obj /usr/share/alsa/init/ca0106 6cb822c5baa87c0112813be59ad7ff67 1553374067
obj /usr/share/alsa/init/default 84b05375889f2213644e3ac24820c5c4 1553374067
obj /usr/share/alsa/init/hda 11eeee86df9bfb1edcd2f5ac558ed871 1553374067
obj /usr/share/alsa/init/help 1aefd1542930af5f60dfd687685896d8 1553374067
obj /usr/share/alsa/init/info cfd25aeec5652fae1e7148eaf49666ce 1553374067
obj /usr/share/alsa/init/test 2ba852ea108988355e997fd7f485b15e 1553374067
dir /usr/share/alsa/speaker-test
obj /usr/share/alsa/speaker-test/sample_map.csv 3e1714fbe385fd21c95c75237766055d 1553374068
dir /usr/share/alsa/ucm
obj /usr/share/alsa/ucm/.keep_media-sound_alsa-utils-0.9 d41d8cd98f00b204e9800998ecf8427e 1553374070
dir /usr/share/doc
dir /usr/share/doc/alsa-utils-1.1.8
obj /usr/share/doc/alsa-utils-1.1.8/ChangeLog.bz2 01db0369d8c5b7022da161d18e697e87 1553374069
obj /usr/share/doc/alsa-utils-1.1.8/README.aconnect.bz2 70f8fc56ef82565dbde2b8435db60db4 1553374070
obj /usr/share/doc/alsa-utils-1.1.8/README.aseqnet.bz2 57eefcbba260ca786387921b5034649a 1553374070
obj /usr/share/doc/alsa-utils-1.1.8/README.md.bz2 846eaa95d56f62720b20274e37853e45 1553374069
obj /usr/share/doc/alsa-utils-1.1.8/TODO.bz2 47ceb7afaae5d78b4f04854ab25150f5 1553374069
dir /usr/share/locale
dir /usr/share/locale/de
dir /usr/share/locale/de/LC_MESSAGES
obj /usr/share/locale/de/LC_MESSAGES/alsa-utils.mo 98774207c29da203b9ff360b5141e6fe 1553374067
dir /usr/share/locale/fr
dir /usr/share/locale/fr/LC_MESSAGES
obj /usr/share/locale/fr/LC_MESSAGES/alsa-utils.mo 50ad9af1765aff4d34a78852fe669ad4 1553374067
dir /usr/share/locale/ja
dir /usr/share/locale/ja/LC_MESSAGES
obj /usr/share/locale/ja/LC_MESSAGES/alsa-utils.mo 876f36d7e5119ddc0b3bc378231b541e 1553374067
dir /usr/share/man
dir /usr/share/man/man1
obj /usr/share/man/man1/aconnect.1.bz2 1f0c66620f2157aa0062e4b3319a9ae1 1553374068
obj /usr/share/man/man1/alsa-info.sh.1.bz2 b16daca64295ba8c4ee8801b1dcb6c6f 1553374067
obj /usr/share/man/man1/alsactl.1.bz2 2fc43b11505d45202b19dfa02e6964c9 1553374067
obj /usr/share/man/man1/alsaloop.1.bz2 9d9a868f27f6b1d64959ab8912ebf3ec 1553374068
obj /usr/share/man/man1/alsamixer.1.bz2 38a64ad5adb7717404f3d2804c897d45 1553374067
obj /usr/share/man/man1/amidi.1.bz2 0c9ce5e02942e8c999abbf155af18f63 1553374068
obj /usr/share/man/man1/amixer.1.bz2 06093c16500ce27ede81de98d18c4328 1553374068
obj /usr/share/man/man1/aplay.1.bz2 c3635e4289a32a3b864048646faac7b8 1553374068
obj /usr/share/man/man1/aplaymidi.1.bz2 2328a484ca80179a4abe446683637e4e 1553374068
sym /usr/share/man/man1/arecord.1.bz2 -> aplay.1.bz2 1553374072
obj /usr/share/man/man1/arecordmidi.1.bz2 a28d52ca18f6e6da7a38186086563b80 1553374068
obj /usr/share/man/man1/aseqdump.1.bz2 57c9fdf61ea5b0521fb13177c269a7b5 1553374069
obj /usr/share/man/man1/aseqnet.1.bz2 dc6ff206307918ccc05a1f2fdeac189f 1553374069
obj /usr/share/man/man1/axfer-list.1.bz2 73c8da1f07639b7899097fa12bb758c5 1553374068
obj /usr/share/man/man1/axfer-transfer.1.bz2 692281f53ed3230e6ae70e04deb187e6 1553374068
obj /usr/share/man/man1/axfer.1.bz2 fd900274856971420ffd6dad690445d0 1553374068
obj /usr/share/man/man1/iecset.1.bz2 20f12dc1ce58cabecf7ab90b391cb195 1553374068
obj /usr/share/man/man1/speaker-test.1.bz2 96b29e212234c7da2b115f516d63e84d 1553374068
dir /usr/share/man/man7
dir /usr/share/sounds
dir /usr/share/sounds/alsa
obj /usr/share/sounds/alsa/Front_Center.wav 916147ce6ced50877c27c5570626a54d 1553374068
obj /usr/share/sounds/alsa/Front_Left.wav 31215ca9ec7ddb07343927570604a21f 1553374068
obj /usr/share/sounds/alsa/Front_Right.wav 22ffa2e708e1af92f2e21111ebf0c8da 1553374068
obj /usr/share/sounds/alsa/Noise.wav 82a15bb64a71472ac1352e9ee6bfcf80 1553374068
obj /usr/share/sounds/alsa/Rear_Center.wav f4f15e1d071759f201a089f91c8f2fb6 1553374068
obj /usr/share/sounds/alsa/Rear_Left.wav c86cfb060fc01dc923cac53b7189eee8 1553374068
obj /usr/share/sounds/alsa/Rear_Right.wav b3a26327752d20729edfb1709c80e6e2 1553374068
obj /usr/share/sounds/alsa/Side_Left.wav 61b2bee54ce016bef4934b7e71da13c8 1553374068
obj /usr/share/sounds/alsa/Side_Right.wav cc2f857156dd6a9359a0a0e4c66a8814 1553374068
dir /var
dir /var/lib
dir /var/lib/alsa
obj /var/lib/alsa/.keep_media-sound_alsa-utils-0.9 d41d8cd98f00b204e9800998ecf8427e 1553374070
dir /etc
dir /etc/conf.d
obj /etc/conf.d/alsasound a30ad1df6f85eca2d5615cd3bb72b699 1553374070
dir /etc/init.d
obj /etc/init.d/alsasound 9dc2e0e5955116bd671d6985d8cae893 1553374070
dir /etc/modprobe.d
obj /etc/modprobe.d/alsa.conf ccc2347c7466759e6155c3cdba15ec49 1553374070
dir /etc/runlevels
dir /etc/runlevels/default
sym /etc/runlevels/default/alsasound -> /etc/init.d/alsasound 1553449095

1
tests/templates/testfiles/test_executor_root/var/db/pkg/media-sound/alsa-utils-1.1.8/SLOT

@ -0,0 +1 @@
0.9

1
tests/templates/testfiles/test_executor_root/var/db/pkg/media-sound/alsa-utils-1.1.8/USE

@ -0,0 +1 @@
abi_x86_64 amd64 elibc_glibc kernel_linux libsamplerate ncurses nls userland_GNU

435
tests/templates/testfiles/test_executor_root/var/db/pkg/media-sound/pulseaudio-12.2-r2/CONTENTS

@ -0,0 +1,435 @@
dir /lib
dir /lib/udev
dir /lib/udev/rules.d
obj /lib/udev/rules.d/90-pulseaudio.rules 8f1473737808f8a65bb1b95553e1803f 1573914886
dir /usr
dir /usr/bin
obj /usr/bin/pacat 8b4e33f177a28a07bb59eb9560c550bd 1573914889
obj /usr/bin/pacmd 94790ece1d79f8f730ecb4c1cf9cb2fb 1573914889
obj /usr/bin/pactl bfcd60686c4e9afc3201da50432ef386 1573914889
obj /usr/bin/padsp b1f65d4f923e2eb5b3bbd90038429a01 1573914864
sym /usr/bin/pamon -> pacat 1573914886
sym /usr/bin/paplay -> pacat 1573914886
sym /usr/bin/parec -> pacat 1573914886
sym /usr/bin/parecord -> pacat 1573914886
obj /usr/bin/pasuspender e5ad3938bd2f59c27d89deaf12449e30 1573914889
obj /usr/bin/pax11publish 89574bca600863dece1ab125bb14e295 1573914889
obj /usr/bin/pulseaudio 78590bf952e0bfff43d5d76369dca99f 1573914889
obj /usr/bin/qpaeq 29c96c93da7db1c1e60cef1ff2723c1e 1573914864
obj /usr/bin/start-pulseaudio-x11 7b4cb967d7bc8a8377eee6d4a9b36b3b 1573914864
dir /usr/include
dir /usr/include/pulse
obj /usr/include/pulse/cdecl.h d0412c0287dad88c303237bded8d5a42 1573914886
obj /usr/include/pulse/channelmap.h 6a073838ce73e091816d96bfe11bbbea 1573914886
obj /usr/include/pulse/context.h 98935c0e58076b2619126373ec8e6d0e 1573914886
obj /usr/include/pulse/def.h 18971b84f9777fba5008956fea15afec 1573914886
obj /usr/include/pulse/direction.h cb12d69204c7b63bb0991079b0329e01 1573914886
obj /usr/include/pulse/error.h 64f2f48ca1d40a1c3235b2e605b3aefb 1573914886
obj /usr/include/pulse/ext-device-manager.h 1ee9630945a69ea769f61d9986138af1 1573914886
obj /usr/include/pulse/ext-device-restore.h f698f8616c006fe1f031f60f4d1c50a8 1573914886
obj /usr/include/pulse/ext-stream-restore.h 6528bff16f6f43687e0144b875b587c0 1573914886
obj /usr/include/pulse/format.h 4300eeb6fa661810a14a38b9e7acf66d 1573914886
obj /usr/include/pulse/gccmacro.h 7e112c565ea3cc2bbe2d373a7247aa73 1573914886
obj /usr/include/pulse/glib-mainloop.h eed0971e67d40644b326a63a5feeec78 1573914886
obj /usr/include/pulse/introspect.h 7fe567c7b09652ed630c0c1482451df0 1573914886
obj /usr/include/pulse/mainloop-api.h 47a2670f4a171e957b97b6a877a253a2 1573914886
obj /usr/include/pulse/mainloop-signal.h 843aac36048160f324c22f41dc4c87a1 1573914886
obj /usr/include/pulse/mainloop.h 6964eabc20459c4752d786e560a2e9ed 1573914886
obj /usr/include/pulse/operation.h c75c943fc40a86620ea11497aad03a74 1573914886
obj /usr/include/pulse/proplist.h c44296140d69e5c6ee7a5bd68e19bb91 1573914886
obj /usr/include/pulse/pulseaudio.h efebb0bfa703b93520e391879eab0ce2 1573914886
obj /usr/include/pulse/rtclock.h 29806fb0d79ce30db32d2c278da14e06 1573914886
obj /usr/include/pulse/sample.h 8b017fcefb2bcc4d0a8c997013a6e468 1573914886
obj /usr/include/pulse/scache.h decd4c8b22730b8da648f49a7ad3b7d7 1573914886
obj /usr/include/pulse/simple.h 92f42e0014991202a9ee7a0f1b864422 1573914886
obj /usr/include/pulse/stream.h f538b99faf1c023357599d6488acb23a 1573914886
obj /usr/include/pulse/subscribe.h e8a5d7cbbbfc4d735cb936f365855451 1573914886
obj /usr/include/pulse/thread-mainloop.h 239949bdcaa4eefd561c8aea731b62ec 1573914886
obj /usr/include/pulse/timeval.h e21bef9dff79a35f80011b9289cdca1f 1573914886
obj /usr/include/pulse/utf8.h dba186b6cb3137094c29ee575c79a6b2 1573914886
obj /usr/include/pulse/util.h 3ef421b475b55412a94a9c7400fa4cd6 1573914886
obj /usr/include/pulse/version.h d94cd08574467bcf4cf7387ecb1d02dd 1573914886
obj /usr/include/pulse/volume.h 6a7c8c883185df0479121c2da9fee772 1573914886
obj /usr/include/pulse/xmalloc.h b5dd2885bde4ffbad8a261c74f44e059 1573914886
dir /usr/lib
sym /usr/lib/libpulse-mainloop-glib.so -> libpulse-mainloop-glib.so.0.0.5 1573914862
sym /usr/lib/libpulse-mainloop-glib.so.0 -> libpulse-mainloop-glib.so.0.0.5 1573914862
obj /usr/lib/libpulse-mainloop-glib.so.0.0.5 7f098bcc00a4cea422a9055d5a4271a6 1573914889
sym /usr/lib/libpulse-simple.so -> libpulse-simple.so.0.1.1 1573914862
sym /usr/lib/libpulse-simple.so.0 -> libpulse-simple.so.0.1.1 1573914862
obj /usr/lib/libpulse-simple.so.0.1.1 4406b884a7d2a60093687f113f286fc6 1573914889
sym /usr/lib/libpulse.so -> libpulse.so.0.20.3 1573914862
sym /usr/lib/libpulse.so.0 -> libpulse.so.0.20.3 1573914862
obj /usr/lib/libpulse.so.0.20.3 bf85aea23fd3872151a234d188737b14 1573914889
dir /usr/lib/pkgconfig
obj /usr/lib/pkgconfig/libpulse-mainloop-glib.pc a27ecc6facfe8a19b493f72858ec8082 1573914862
obj /usr/lib/pkgconfig/libpulse-simple.pc 8b77a99d59bab07637b0b104a7397319 1573914862
obj /usr/lib/pkgconfig/libpulse.pc af3a23c18bbd93575f62cceefeaecb52 1573914862
dir /usr/lib/pulseaudio
obj /usr/lib/pulseaudio/libpulsecommon-12.2.so f41edb64eec23a2c61d7fa0f40a14477 1573914889
obj /usr/lib/pulseaudio/libpulsedsp.so f94c3588415c1c94720dbf65ae8eed6f 1573914889
dir /usr/lib64
dir /usr/lib64/cmake
dir /usr/lib64/cmake/PulseAudio
obj /usr/lib64/cmake/PulseAudio/PulseAudioConfig.cmake 6f1ca9a4695bbea9bfce84540ef749f5 1573914888
obj /usr/lib64/cmake/PulseAudio/PulseAudioConfigVersion.cmake 25cee1cf96ff761dd4ea43709a03cbfa 1573914888
sym /usr/lib64/libpulse-mainloop-glib.so -> libpulse-mainloop-glib.so.0.0.5 1573914863
sym /usr/lib64/libpulse-mainloop-glib.so.0 -> libpulse-mainloop-glib.so.0.0.5 1573914863
obj /usr/lib64/libpulse-mainloop-glib.so.0.0.5 aa9cd3abebf3a9f64911a6f79fe386f0 1573914889
sym /usr/lib64/libpulse-simple.so -> libpulse-simple.so.0.1.1 1573914863
sym /usr/lib64/libpulse-simple.so.0 -> libpulse-simple.so.0.1.1 1573914863
obj /usr/lib64/libpulse-simple.so.0.1.1 eb3b0f02663ef5223ef1d3117ae40d14 1573914889
sym /usr/lib64/libpulse.so -> libpulse.so.0.20.3 1573914863
sym /usr/lib64/libpulse.so.0 -> libpulse.so.0.20.3 1573914863
obj /usr/lib64/libpulse.so.0.20.3 ca9e7bcf7dc5484dc24b7a755c059a88 1573914889
dir /usr/lib64/pkgconfig
obj /usr/lib64/pkgconfig/libpulse-mainloop-glib.pc 2fde081585a38c234c8f963f54c8d5cc 1573914888
obj /usr/lib64/pkgconfig/libpulse-simple.pc 7cddcfc7e6b6fe5dcb347f5960c17707 1573914888
obj /usr/lib64/pkgconfig/libpulse.pc f18ee55131559e64c8d9582db2e51dc0 1573914888
dir /usr/lib64/pulse-12.2
dir /usr/lib64/pulse-12.2/modules
obj /usr/lib64/pulse-12.2/modules/libalsa-util.so 2253ea419044a93d46f59e964a63bcbe 1573914890
obj /usr/lib64/pulse-12.2/modules/libbluez5-util.so 8f09a8bbd09c61a902a19283a6da96f1 1573914890
obj /usr/lib64/pulse-12.2/modules/libcli.so fd3c00bfa381d6975f5f1f78f3985ea3 1573914889
obj /usr/lib64/pulse-12.2/modules/libprotocol-cli.so 438584c750ba1c9ff8c5edd0a0841edc 1573914889
obj /usr/lib64/pulse-12.2/modules/libprotocol-http.so ef46f5603d3098438775621505b0eb24 1573914889
obj /usr/lib64/pulse-12.2/modules/libprotocol-native.so 2dff6c7eef25130d19074329c154f51c 1573914889
obj /usr/lib64/pulse-12.2/modules/libprotocol-simple.so 3b3f3ba562d2c14045832f93c4ce5c00 1573914889
obj /usr/lib64/pulse-12.2/modules/libraop.so 3d4409bbe35e83de8bab1e8ee4672a98 1573914890
obj /usr/lib64/pulse-12.2/modules/librtp.so bbf8e20f722e60c9581dbbee9b7acfad 1573914889
obj /usr/lib64/pulse-12.2/modules/libwebrtc-util.so b61eb9461aad4eda5314b0a305f58973 1573914889
obj /usr/lib64/pulse-12.2/modules/module-allow-passthrough.so b60b7db8a716b288cbad9301365173b1 1573914889
obj /usr/lib64/pulse-12.2/modules/module-alsa-card.so 5954197f9d0f10e4042ca852e961b051 1573914890
obj /usr/lib64/pulse-12.2/modules/module-alsa-sink.so c81a09e68ded0868b79ed2cea0e9f880 1573914890
obj /usr/lib64/pulse-12.2/modules/module-alsa-source.so 875f5f494780b40114b9921f55446d41 1573914890
obj /usr/lib64/pulse-12.2/modules/module-always-sink.so a9f0389937ccd5bd89d318d4bd0afd29 1573914889
obj /usr/lib64/pulse-12.2/modules/module-always-source.so 67dd531872312f23d5f2da61f5adddfc 1573914889
obj /usr/lib64/pulse-12.2/modules/module-augment-properties.so 074792ad035f6ba247b3c82af6d31b4e 1573914889
obj /usr/lib64/pulse-12.2/modules/module-bluetooth-discover.so 9fc8772842ba3fb65ac32d9e0439e4ee 1573914890
obj /usr/lib64/pulse-12.2/modules/module-bluetooth-policy.so 27a9541c87a158cb53bf93f74f2de5be 1573914890
obj /usr/lib64/pulse-12.2/modules/module-bluez5-device.so 031eb54f64fcc1170179c1762b5af4ff 1573914890
obj /usr/lib64/pulse-12.2/modules/module-bluez5-discover.so 3e9932b6eed72d960b9ac222a10ff137 1573914890
obj /usr/lib64/pulse-12.2/modules/module-card-restore.so c39d53d61405ede36b83681b9f3636e4 1573914889
obj /usr/lib64/pulse-12.2/modules/module-cli-protocol-tcp.so 1a97a924e1429c3810a832ad54cc387e 1573914889
obj /usr/lib64/pulse-12.2/modules/module-cli-protocol-unix.so 2c991814ae4a294b99dc9a831c3dc2b8 1573914889
obj /usr/lib64/pulse-12.2/modules/module-cli.so f057576306bc499bb7e7bd0ba1e476f6 1573914889
obj /usr/lib64/pulse-12.2/modules/module-combine-sink.so 594afae7ffeb35cd21ba1ce040508808 1573914889
obj /usr/lib64/pulse-12.2/modules/module-combine.so b065a93ab14698af22d3c3dcbcd05ff0 1573914889
obj /usr/lib64/pulse-12.2/modules/module-console-kit.so 8fdf05704c655b47b3017f16426208d4 1573914889
obj /usr/lib64/pulse-12.2/modules/module-dbus-protocol.so 7d2e60980d7d965b401eed0563eb1bfc 1573914890
obj /usr/lib64/pulse-12.2/modules/module-default-device-restore.so 90e68e951d246fab9c282c74ca9fcb2d 1573914889
obj /usr/lib64/pulse-12.2/modules/module-detect.so 3d2b15e08be40e900ab0fe0f65859648 1573914889
obj /usr/lib64/pulse-12.2/modules/module-device-manager.so f99a10c96c22c4fd8143806cc4e0f3ec 1573914889
obj /usr/lib64/pulse-12.2/modules/module-device-restore.so 385f606e8909429a3db7003113adfbde 1573914889
obj /usr/lib64/pulse-12.2/modules/module-echo-cancel.so 81f7a01e8d36149dc385639aab5784b3 1573914889
obj /usr/lib64/pulse-12.2/modules/module-equalizer-sink.so 7846a65b30ea6b7dfc26ed8b072562c9 1573914890
obj /usr/lib64/pulse-12.2/modules/module-filter-apply.so 9b7ee42413bd38c9f6c7ebeb9085d4e5 1573914889
obj /usr/lib64/pulse-12.2/modules/module-filter-heuristics.so a40134bf6cbe78f176d49fa006109873 1573914889
obj /usr/lib64/pulse-12.2/modules/module-gsettings.so 2f3803fa1fa3e3ed3f5eed8c69feb39e 1573914890
obj /usr/lib64/pulse-12.2/modules/module-hal-detect.so 026b39c6822a88b6f621123685c15524 1573914890
obj /usr/lib64/pulse-12.2/modules/module-http-protocol-tcp.so 1c25cc40291d5bdddc1cb8da1b1ac86b 1573914889
obj /usr/lib64/pulse-12.2/modules/module-http-protocol-unix.so 72c209215a037f215ec35cfb6b41945d 1573914889
obj /usr/lib64/pulse-12.2/modules/module-intended-roles.so da9a4bb4870aae4d302213269bfd4ce2 1573914889
obj /usr/lib64/pulse-12.2/modules/module-ladspa-sink.so f789eab8fbe6a8f44ab48f4a24dcf9e4 1573914889
obj /usr/lib64/pulse-12.2/modules/module-loopback.so 25eaa31d2a0c2b8d7f1c8dd7393b640b 1573914889
obj /usr/lib64/pulse-12.2/modules/module-match.so 83a5ae15eaa8bf3e636c34870bcb56b2 1573914890
obj /usr/lib64/pulse-12.2/modules/module-mmkbd-evdev.so b1c87abc2ac830be2d3598369e3b1fc3 1573914890
obj /usr/lib64/pulse-12.2/modules/module-native-protocol-fd.so 257246308c54d371a3ccf719d9bb41f5 1573914889
obj /usr/lib64/pulse-12.2/modules/module-native-protocol-tcp.so 1a8c54258734a7d8a7e8d03e9f9dba22 1573914889
obj /usr/lib64/pulse-12.2/modules/module-native-protocol-unix.so 19ba8b692ea6406eace0e4a03c0b9dc5 1573914890
obj /usr/lib64/pulse-12.2/modules/module-null-sink.so 1c407caaae38c5f795721b2f51ffda70 1573914889
obj /usr/lib64/pulse-12.2/modules/module-null-source.so abde0ed55d5dc58e7857d83b31d377e1 1573914889
obj /usr/lib64/pulse-12.2/modules/module-pipe-sink.so 3a7334656b65a4e08fd437957f0b45b9 1573914890
obj /usr/lib64/pulse-12.2/modules/module-pipe-source.so 327508f1b76ade4dcb8389a8af890a64 1573914890
obj /usr/lib64/pulse-12.2/modules/module-position-event-sounds.so f87540dfb21fe90fb93c85ac526cd9cd 1573914889
obj /usr/lib64/pulse-12.2/modules/module-raop-sink.so a71eed0caaab737728e01334a7f46925 1573914890
obj /usr/lib64/pulse-12.2/modules/module-remap-sink.so ddb1339f0120cdcb467ce16ebc101be3 1573914889
obj /usr/lib64/pulse-12.2/modules/module-remap-source.so c5b49bb44b798da9c82ad14f6e4c08de 1573914889
obj /usr/lib64/pulse-12.2/modules/module-rescue-streams.so 209f61258d6228f675d410c9c181f284 1573914889
obj /usr/lib64/pulse-12.2/modules/module-role-cork.so d502630bd73050064cf41231e0b12682 1573914889
obj /usr/lib64/pulse-12.2/modules/module-role-ducking.so d0f2a250ab8453b93cea049c0fc21475 1573914889
obj /usr/lib64/pulse-12.2/modules/module-rtp-recv.so 6fd4080d7ac07c530c0d843785cfcc58 1573914889
obj /usr/lib64/pulse-12.2/modules/module-rtp-send.so b81b7e9a110848dfe5cbf4b48cd83563 1573914889
obj /usr/lib64/pulse-12.2/modules/module-rygel-media-server.so 010e9fec833a7e3692a59ea6f6aeabfc 1573914890
obj /usr/lib64/pulse-12.2/modules/module-simple-protocol-tcp.so 94497df0d9324ee3b22baf9280a818ba 1573914889
obj /usr/lib64/pulse-12.2/modules/module-simple-protocol-unix.so 864bbe87b5ff21650366cbd313adf4dc 1573914889
obj /usr/lib64/pulse-12.2/modules/module-sine-source.so 6326a4f183a17fb77a140b13c9c0c1ad 1573914889
obj /usr/lib64/pulse-12.2/modules/module-sine.so 858734215fb13075c819c0afe21ef371 1573914889
obj /usr/lib64/pulse-12.2/modules/module-stream-restore.so 372b40d9a0ee1aeaf68b777d5b9a812e 1573914889
obj /usr/lib64/pulse-12.2/modules/module-suspend-on-idle.so 500866e3ee44f46bd581385e357a0620 1573914889
obj /usr/lib64/pulse-12.2/modules/module-switch-on-connect.so c2566fe96d5de5febc3f4dc0fc829c22 1573914889
obj /usr/lib64/pulse-12.2/modules/module-switch-on-port-available.so 61552dbe22e8502972798200698f0c49 1573914889
obj /usr/lib64/pulse-12.2/modules/module-tunnel-sink-new.so 8271f0c96f8283a37a93b5175488f6ce 1573914889
obj /usr/lib64/pulse-12.2/modules/module-tunnel-sink.so b933517fca9f1d2ee7e7d563010a45fa 1573914889
obj /usr/lib64/pulse-12.2/modules/module-tunnel-source-new.so 203b59a845e3cfcaef5628c0d957d86e 1573914889
obj /usr/lib64/pulse-12.2/modules/module-tunnel-source.so 15ea59701c5d3189c400c637562c1a7f 1573914889
obj /usr/lib64/pulse-12.2/modules/module-udev-detect.so fffaa3003bb1b2e109e2d43e46896d77 1573914890
obj /usr/lib64/pulse-12.2/modules/module-virtual-sink.so 48ead35e3045716f0a28e787158018cb 1573914889
obj /usr/lib64/pulse-12.2/modules/module-virtual-source.so 1a7ebfd58d7120f463d44ff3c3134327 1573914889
obj /usr/lib64/pulse-12.2/modules/module-virtual-surround-sink.so 12515888fa243c4d9d148df564ba3525 1573914889
obj /usr/lib64/pulse-12.2/modules/module-volume-restore.so 4127d1904fb16ab9b5ba437be35341a8 1573914889
obj /usr/lib64/pulse-12.2/modules/module-x11-bell.so 4c38abac2591ac274b8749451ea6b81e 1573914890
obj /usr/lib64/pulse-12.2/modules/module-x11-cork-request.so ab2cdd509e8b62de88e57e473973ab64 1573914890
obj /usr/lib64/pulse-12.2/modules/module-x11-publish.so 7e911440ee3f02b067a23e334ce8af44 1573914890
obj /usr/lib64/pulse-12.2/modules/module-x11-xsmp.so 1b96e25f6b084b33b44ea3524e0c2a72 1573914890
dir /usr/lib64/pulseaudio
obj /usr/lib64/pulseaudio/libpulsecommon-12.2.so b762ca1afe11c2fc0c8191b1db4086dc 1573914889
obj /usr/lib64/pulseaudio/libpulsecore-12.2.so 5d2a2afba11f4ff63d023808f650b868 1573914889
obj /usr/lib64/pulseaudio/libpulsedsp.so 3faf1c71786acef976ad724e5633aac8 1573914890
dir /usr/libexec
dir /usr/libexec/pulse
obj /usr/libexec/pulse/gsettings-helper e51c6733226c8fc5bf75cd9752969ded 1573914890
dir /usr/share
dir /usr/share/GConf
dir /usr/share/GConf/gsettings
obj /usr/share/GConf/gsettings/pulseaudio.convert b0e8d68b21d353bed70ef67217cff78c 1573914886
dir /usr/share/bash-completion
dir /usr/share/bash-completion/completions
sym /usr/share/bash-completion/completions/pacat -> pulseaudio 1573914888
sym /usr/share/bash-completion/completions/pacmd -> pulseaudio 1573914888
sym /usr/share/bash-completion/completions/pactl -> pulseaudio 1573914888
sym /usr/share/bash-completion/completions/padsp -> pulseaudio 1573914888
sym /usr/share/bash-completion/completions/paplay -> pulseaudio 1573914888
sym /usr/share/bash-completion/completions/parec -> pulseaudio 1573914888
sym /usr/share/bash-completion/completions/parecord -> pulseaudio 1573914888
sym /usr/share/bash-completion/completions/pasuspender -> pulseaudio 1573914888
obj /usr/share/bash-completion/completions/pulseaudio 5e911128bd6f5ff43a05db70a81a5ac5 1573914888
dir /usr/share/doc
dir /usr/share/doc/pulseaudio-12.2-r2
obj /usr/share/doc/pulseaudio-12.2-r2/NEWS.bz2 ba2e25544b35c5213312bc78eee53740 1573914888
obj /usr/share/doc/pulseaudio-12.2-r2/README.bz2 e16e21f8d6a29f3915ecc0c8e248a379 1573914888
obj /usr/share/doc/pulseaudio-12.2-r2/todo.bz2 ac4eb0ec5d0008c9b57685ef14f1ea47 1573914888
dir /usr/share/glib-2.0
dir /usr/share/glib-2.0/schemas
obj /usr/share/glib-2.0/schemas/org.freedesktop.pulseaudio.gschema.xml 5b3333bce5d3d9bb13fcb71bca2a57fa 1573914887
dir /usr/share/locale
dir /usr/share/locale/as
dir /usr/share/locale/as/LC_MESSAGES
obj /usr/share/locale/as/LC_MESSAGES/pulseaudio.mo 03a8b583a797689e8880eff0568a02ed 1573914887
dir /usr/share/locale/be
dir /usr/share/locale/be/LC_MESSAGES
obj /usr/share/locale/be/LC_MESSAGES/pulseaudio.mo fb7120bad4cb26b0b0375e50bd7e48ec 1573914887
dir /usr/share/locale/bn_IN
dir /usr/share/locale/bn_IN/LC_MESSAGES
obj /usr/share/locale/bn_IN/LC_MESSAGES/pulseaudio.mo 20cd8cf9aa724f99f8dca5ee16711468 1573914887
dir /usr/share/locale/ca
dir /usr/share/locale/ca/LC_MESSAGES
obj /usr/share/locale/ca/LC_MESSAGES/pulseaudio.mo 8d18548b11bd13a2b8702a1c6f95379f 1573914887
dir /usr/share/locale/cs
dir /usr/share/locale/cs/LC_MESSAGES
obj /usr/share/locale/cs/LC_MESSAGES/pulseaudio.mo c91416bad8a326f205c61cf7fedac0fd 1573914887
dir /usr/share/locale/de
dir /usr/share/locale/de/LC_MESSAGES
obj /usr/share/locale/de/LC_MESSAGES/pulseaudio.mo 7879657084a39560dbc056ceaf5369a0 1573914887
dir /usr/share/locale/de_CH
dir /usr/share/locale/de_CH/LC_MESSAGES
obj /usr/share/locale/de_CH/LC_MESSAGES/pulseaudio.mo 4e7d3317cc7a68356bcd2794f11e27c5 1573914887
dir /usr/share/locale/el
dir /usr/share/locale/el/LC_MESSAGES
obj /usr/share/locale/el/LC_MESSAGES/pulseaudio.mo 3d907306cd1aa6cef64d298bb7f084c2 1573914887
dir /usr/share/locale/es
dir /usr/share/locale/es/LC_MESSAGES
obj /usr/share/locale/es/LC_MESSAGES/pulseaudio.mo 9b2f51d2ad74d96746c142f37b5768fd 1573914887
dir /usr/share/locale/fi
dir /usr/share/locale/fi/LC_MESSAGES
obj /usr/share/locale/fi/LC_MESSAGES/pulseaudio.mo 65132eb7874c895ea1c1a8a29ab0779e 1573914887
dir /usr/share/locale/fr
dir /usr/share/locale/fr/LC_MESSAGES
obj /usr/share/locale/fr/LC_MESSAGES/pulseaudio.mo 8f54332e1baf178f8746e73603a92fdb 1573914887
dir /usr/share/locale/gl
dir /usr/share/locale/gl/LC_MESSAGES
obj /usr/share/locale/gl/LC_MESSAGES/pulseaudio.mo 550a21d3c763664ae0e70b68b4ba7134 1573914887
dir /usr/share/locale/gu
dir /usr/share/locale/gu/LC_MESSAGES
obj /usr/share/locale/gu/LC_MESSAGES/pulseaudio.mo 7e39bb441e3cfaf7b35e057751f33808 1573914887
dir /usr/share/locale/he
dir /usr/share/locale/he/LC_MESSAGES
obj /usr/share/locale/he/LC_MESSAGES/pulseaudio.mo 938347246d1789928e974128d4d7ca49 1573914887
dir /usr/share/locale/hi
dir /usr/share/locale/hi/LC_MESSAGES
obj /usr/share/locale/hi/LC_MESSAGES/pulseaudio.mo 3c6ed7e46fb185450ce301a85a0ea58a 1573914887
dir /usr/share/locale/hr
dir /usr/share/locale/hr/LC_MESSAGES
obj /usr/share/locale/hr/LC_MESSAGES/pulseaudio.mo 3e541beb549eb4390ebc1393ffaae19b 1573914887
dir /usr/share/locale/hu
dir /usr/share/locale/hu/LC_MESSAGES
obj /usr/share/locale/hu/LC_MESSAGES/pulseaudio.mo 19bc7766a5891fa9139abf894f2d85f6 1573914887
dir /usr/share/locale/id
dir /usr/share/locale/id/LC_MESSAGES
obj /usr/share/locale/id/LC_MESSAGES/pulseaudio.mo 6eca5b566f129e53134a9f3c8cb338d4 1573914887
dir /usr/share/locale/it
dir /usr/share/locale/it/LC_MESSAGES
obj /usr/share/locale/it/LC_MESSAGES/pulseaudio.mo b62ee6a42d1db03474bf6955f9f279e7 1573914887
dir /usr/share/locale/ja
dir /usr/share/locale/ja/LC_MESSAGES
obj /usr/share/locale/ja/LC_MESSAGES/pulseaudio.mo 71c63fbb7a474d19cf2ce4e548125df1 1573914887
dir /usr/share/locale/kn
dir /usr/share/locale/kn/LC_MESSAGES
obj /usr/share/locale/kn/LC_MESSAGES/pulseaudio.mo 5599e310e3ee0c113aaf3a2e085c6198 1573914887
dir /usr/share/locale/ko
dir /usr/share/locale/ko/LC_MESSAGES
obj /usr/share/locale/ko/LC_MESSAGES/pulseaudio.mo 857e0bd21d0b7634aa008d1b880f0911 1573914887
dir /usr/share/locale/lt
dir /usr/share/locale/lt/LC_MESSAGES
obj /usr/share/locale/lt/LC_MESSAGES/pulseaudio.mo d8e14b44dd05e16b3649706536389d23 1573914887
dir /usr/share/locale/ml
dir /usr/share/locale/ml/LC_MESSAGES
obj /usr/share/locale/ml/LC_MESSAGES/pulseaudio.mo 663a9f5bc8a10fd31834756d345abe55 1573914887
dir /usr/share/locale/mr
dir /usr/share/locale/mr/LC_MESSAGES
obj /usr/share/locale/mr/LC_MESSAGES/pulseaudio.mo 4c6ab0296a8259029165ad503d1b39b1 1573914887
dir /usr/share/locale/nl
dir /usr/share/locale/nl/LC_MESSAGES
obj /usr/share/locale/nl/LC_MESSAGES/pulseaudio.mo e8ed0cae0d82a821f64307e84e4087ff 1573914887
dir /usr/share/locale/nn
dir /usr/share/locale/nn/LC_MESSAGES
obj /usr/share/locale/nn/LC_MESSAGES/pulseaudio.mo 516bde81acdbd5263904881c951b7ea1 1573914887
dir /usr/share/locale/oc
dir /usr/share/locale/oc/LC_MESSAGES
obj /usr/share/locale/oc/LC_MESSAGES/pulseaudio.mo b61fc4fc8b8cb2ed0f7666b60c6b536e 1573914887
dir /usr/share/locale/or
dir /usr/share/locale/or/LC_MESSAGES
obj /usr/share/locale/or/LC_MESSAGES/pulseaudio.mo 78f3c8b62bb6352a8b643e9e9b170dd2 1573914887
dir /usr/share/locale/pa
dir /usr/share/locale/pa/LC_MESSAGES
obj /usr/share/locale/pa/LC_MESSAGES/pulseaudio.mo 007a13d037a70de1ebb1277c7c2d97db 1573914887
dir /usr/share/locale/pl
dir /usr/share/locale/pl/LC_MESSAGES
obj /usr/share/locale/pl/LC_MESSAGES/pulseaudio.mo 61b26f73aa4c5c79d5e76b2b28d9dfdb 1573914887
dir /usr/share/locale/pt
dir /usr/share/locale/pt/LC_MESSAGES
obj /usr/share/locale/pt/LC_MESSAGES/pulseaudio.mo 4481912a4f39f0748732765e5c09d6b4 1573914887
dir /usr/share/locale/pt_BR
dir /usr/share/locale/pt_BR/LC_MESSAGES
obj /usr/share/locale/pt_BR/LC_MESSAGES/pulseaudio.mo f2cc2306e1ce9234eec6f7c60a1b87cd 1573914887
dir /usr/share/locale/ru
dir /usr/share/locale/ru/LC_MESSAGES
obj /usr/share/locale/ru/LC_MESSAGES/pulseaudio.mo 570c62a6e8b35f5cf42c3c773a360526 1573914887
dir /usr/share/locale/sk
dir /usr/share/locale/sk/LC_MESSAGES
obj /usr/share/locale/sk/LC_MESSAGES/pulseaudio.mo 8e12c143c14e71b437dde3f83cb8151a 1573914887
dir /usr/share/locale/sr
dir /usr/share/locale/sr/LC_MESSAGES
obj /usr/share/locale/sr/LC_MESSAGES/pulseaudio.mo 49b4eb765798c4c4a46f2e1c424018be 1573914887
dir /usr/share/locale/sr@latin
dir /usr/share/locale/sr@latin/LC_MESSAGES
obj /usr/share/locale/sr@latin/LC_MESSAGES/pulseaudio.mo 0c8487cd56c1413e96c0dd8f7cb2ec66 1573914887
dir /usr/share/locale/sv
dir /usr/share/locale/sv/LC_MESSAGES
obj /usr/share/locale/sv/LC_MESSAGES/pulseaudio.mo f8668b4d30ff6a713daddb46e7f5cb82 1573914888
dir /usr/share/locale/ta
dir /usr/share/locale/ta/LC_MESSAGES
obj /usr/share/locale/ta/LC_MESSAGES/pulseaudio.mo d4ad76e917b6dadb0026033792fb7a19 1573914888
dir /usr/share/locale/te
dir /usr/share/locale/te/LC_MESSAGES
obj /usr/share/locale/te/LC_MESSAGES/pulseaudio.mo ef3b58d9d796303c30ea6982ecbf78bc 1573914888
dir /usr/share/locale/tr
dir /usr/share/locale/tr/LC_MESSAGES
obj /usr/share/locale/tr/LC_MESSAGES/pulseaudio.mo 72c25dfb0cf87897d6502fc4e2667731 1573914888
dir /usr/share/locale/uk
dir /usr/share/locale/uk/LC_MESSAGES
obj /usr/share/locale/uk/LC_MESSAGES/pulseaudio.mo 1619b7edc5989fbfbff93181b812ec3b 1573914888
dir /usr/share/locale/zh_CN
dir /usr/share/locale/zh_CN/LC_MESSAGES
obj /usr/share/locale/zh_CN/LC_MESSAGES/pulseaudio.mo ef9866e783313be17ccfa804ed04db07 1573914888
dir /usr/share/locale/zh_TW
dir /usr/share/locale/zh_TW/LC_MESSAGES
obj /usr/share/locale/zh_TW/LC_MESSAGES/pulseaudio.mo 4888255c043422e266ce78d0cf2ee328 1573914888
dir /usr/share/man
dir /usr/share/man/man1
obj /usr/share/man/man1/pacat.1.bz2 523d2f389087a97a66092c507587ca2b 1573914887
obj /usr/share/man/man1/pacmd.1.bz2 d3ac2a5552b2344ffc4e1d3898899669 1573914887
obj /usr/share/man/man1/pactl.1.bz2 2e9b8222da9b1bb527ccb336903572ea 1573914887
obj /usr/share/man/man1/padsp.1.bz2 08f08edb4968826eec3fc9d039990f78 1573914887
sym /usr/share/man/man1/pamon.1.bz2 -> pacat.1.bz2 1573914889
sym /usr/share/man/man1/paplay.1.bz2 -> pacat.1.bz2 1573914889
sym /usr/share/man/man1/parec.1.bz2 -> pacat.1.bz2 1573914889
sym /usr/share/man/man1/parecord.1.bz2 -> pacat.1.bz2 1573914889
obj /usr/share/man/man1/pasuspender.1.bz2 e549bbe86211a0bde3702552f58d24c9 1573914887
obj /usr/share/man/man1/pax11publish.1.bz2 b822a06fd2f231c69ad2bdf663150975 1573914887
obj /usr/share/man/man1/pulseaudio.1.bz2 b5f4b7ac20b671497db411dffeb1fe8d 1573914887
obj /usr/share/man/man1/start-pulseaudio-x11.1.bz2 b7d4488be01e0ee728219a8506253f3f 1573914887
dir /usr/share/man/man5
obj /usr/share/man/man5/default.pa.5.bz2 de85e8d8c1ff626fd46bd051754b4fe0 1573914887
obj /usr/share/man/man5/pulse-cli-syntax.5.bz2 9726381421e422f2d91a3c6ff01e5e6a 1573914887
obj /usr/share/man/man5/pulse-client.conf.5.bz2 052db80831166c49bff2403a52c28b34 1573914887
obj /usr/share/man/man5/pulse-daemon.conf.5.bz2 10fe8ce77b62246b8b2f592d2bf267e7 1573914887
dir /usr/share/pulseaudio
dir /usr/share/pulseaudio/alsa-mixer
dir /usr/share/pulseaudio/alsa-mixer/paths
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-input-aux.conf 01c9bec90862529ef0cfc03230e07cbd 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-input-dock-mic.conf 817abd44777671d164bcc8ec0f8e3007 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-input-fm.conf b4796f9f7b5368564687f32b368960d7 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-input-front-mic.conf d3253ea318740187c50557e89296d0cf 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-input-headphone-mic.conf 6fba61b3fd66f1b42a745d4f6885dd25 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-input-headset-mic.conf fdd237cfb6488324d8dc846e590b43be 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-input-internal-mic-always.conf 58c4ec44a8ae4c2baa3494e1dd2ac965 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-input-internal-mic.conf c9c758a158aca197041375576d2a3861 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-input-linein.conf c8c5447753f7728a5c0effa3ad5078fe 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-input-mic-line.conf 8d0ec780a4863cf595ceb2c8aec0e109 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-input-mic.conf 557cfe06acd609cce6524b6c1cf495d6 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-input-mic.conf.common 727a3b3f6f8de050c82babb1c649b5b6 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-input-rear-mic.conf a3c8d52fda21bc7f3f5db6ec4831396d 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-input-tvtuner.conf 1633669b2fadc7bb0cb26302dc3288db 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-input-video.conf 22cfb30eb7cbb0bf26684102ceb0863a 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-input.conf 478f53b49fc1eb8b4cc99d4681f4d008 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-input.conf.common 780219dfbe146b6e81e73d9b9d5aaf6d 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-output-headphones-2.conf ed7ff23099053639e176d7ed858ca748 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-output-headphones.conf cbf323f5cb80d504a5eee5c4da645500 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-output-lineout.conf 2f2f7de80eb35c9266d886510b38411e 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-output-mono.conf 658164f871504e9258732711bd871ea0 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-output-speaker-always.conf e3f9cf7a28a75fcd774a6c4584ef7a01 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-output-speaker.conf 7e238b6fd3acbf194737a0860fea46e3 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-output.conf 77f6dd1d67fc970c5b5a923314b2e86c 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/analog-output.conf.common 435d77cadd7306087baa534983aefadc 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/hdmi-output-0.conf 37f2082a057c0722c1e738c69f22413b 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/hdmi-output-1.conf 8f283087e40fd9640583dace8c3a8548 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/hdmi-output-2.conf fb969a20c40cdbcec205da6b6448ae84 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/hdmi-output-3.conf aa4e4035eabf6406d3ecf36e5f0efef3 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/hdmi-output-4.conf 8e48753bc83eb64b9aeb9fca220e8a47 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/hdmi-output-5.conf ee8d5ac868d7c4e159a99b7adf2b7b05 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/hdmi-output-6.conf e6cb41d2123b47ff110c0cfcb55d3b45 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/hdmi-output-7.conf 4f9851f1d787aa9d560a8c4b0b4e4768 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/iec958-stereo-input.conf 31803849f4972424c66a7a3fd192cc7e 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/iec958-stereo-output.conf ac40111b91df894be1849670963f1ff3 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/steelseries-arctis-input.conf 2a68f9d0ee3a89c47d0c7781c8f46ce0 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/steelseries-arctis-output-mono.conf 3a1e43bd734b538b18d75886dd93f819 1573914886
obj /usr/share/pulseaudio/alsa-mixer/paths/steelseries-arctis-output-stereo.conf e8ca5d47324c9b0504e131e9919e109d 1573914886
dir /usr/share/pulseaudio/alsa-mixer/profile-sets
obj /usr/share/pulseaudio/alsa-mixer/profile-sets/default.conf 6c917dcab4ffe2190d7082181bc597a5 1573914886
obj /usr/share/pulseaudio/alsa-mixer/profile-sets/dell-dock-tb16-usb-audio.conf 31745df6bd23bfd756486ef2255744c4 1573914886
obj /usr/share/pulseaudio/alsa-mixer/profile-sets/force-speaker-and-int-mic.conf f2ec38f442e0a1093bbe4b81f867084a 1573914886
obj /usr/share/pulseaudio/alsa-mixer/profile-sets/force-speaker.conf 5c7d9c0cd1ece17ad6cbf88b86121e61 1573914886
obj /usr/share/pulseaudio/alsa-mixer/profile-sets/kinect-audio.conf 5c101ef72604b5ab739cbb4291b70dea 1573914886
obj /usr/share/pulseaudio/alsa-mixer/profile-sets/maudio-fasttrack-pro.conf 299571cdfc7b56d6a119b2814b37d2be 1573914886
obj /usr/share/pulseaudio/alsa-mixer/profile-sets/native-instruments-audio4dj.conf abfd88b83ede3f0b08834cf60fb7fc4b 1573914886
obj /usr/share/pulseaudio/alsa-mixer/profile-sets/native-instruments-audio8dj.conf b98048862a8814095b4d5e49b783fc3a 1573914886
obj /usr/share/pulseaudio/alsa-mixer/profile-sets/native-instruments-korecontroller.conf f2a9f721c3447c7bfd4d06dddad39588 1573914886
obj /usr/share/pulseaudio/alsa-mixer/profile-sets/native-instruments-traktor-audio10.conf 15acfe002fd1d90214dc854cb8efa3a0 1573914886
obj /usr/share/pulseaudio/alsa-mixer/profile-sets/native-instruments-traktor-audio2.conf 6555fce180df55031deaa9386b8f6ffb 1573914886
obj /usr/share/pulseaudio/alsa-mixer/profile-sets/native-instruments-traktor-audio6.conf 1341780ad2887db4f71bd71e1427d14d 1573914886
obj /usr/share/pulseaudio/alsa-mixer/profile-sets/native-instruments-traktorkontrol-s4.conf 9509fc328c9819566064c98018ef9cb9 1573914886
obj /usr/share/pulseaudio/alsa-mixer/profile-sets/sb-omni-surround-5.1.conf 1e2b7c2907dbdb57f11ada379e11a67e 1573914886
obj /usr/share/pulseaudio/alsa-mixer/profile-sets/steelseries-arctis-usb-audio.conf b16786cf6b6fd16fe54fbd5770db7447 1573914886
dir /usr/share/vala
dir /usr/share/vala/vapi
obj /usr/share/vala/vapi/libpulse-mainloop-glib.deps 3df65bfd9794bf187296c8b172d42a18 1573914888
obj /usr/share/vala/vapi/libpulse-mainloop-glib.vapi 49d2a3fc637de68e65ddb82b9cb4de96 1573914888
obj /usr/share/vala/vapi/libpulse-simple.deps 3e267e825e5f8bd09660e420ecc70afa 1573914888
obj /usr/share/vala/vapi/libpulse-simple.vapi f027517ee60dc0f2581b14787baa17bc 1573914888
obj /usr/share/vala/vapi/libpulse.deps 5bbfe9d379e8319f29b1582be8e1f342 1573914888
obj /usr/share/vala/vapi/libpulse.vapi 3a590639c78ff9fb7bc4e75dbf8c7b6d 1573914888
dir /usr/share/zsh
dir /usr/share/zsh/site-functions
obj /usr/share/zsh/site-functions/_pulseaudio 59a13cca8d094f04832173dadde76cb0 1573914888
dir /etc
dir /etc/dbus-1
dir /etc/dbus-1/system.d
dir /etc/pulse
obj /etc/pulse/client.conf c860faa4a69c542420c74c8d6a7d3289 1574417494
obj /etc/pulse/daemon.conf 5b3ba0b0cd101844fc8a95e08a37d0d7 1574417040
obj /etc/pulse/default.pa 3bde1df1452115a9b6e8060caf571678 1573914886
obj /etc/pulse/system.pa 0d542e43d6d39523f3022efdd6d70139 1573914886
dir /etc/xdg
dir /etc/xdg/autostart
obj /etc/xdg/autostart/pulseaudio.desktop 60d2ddb5fc4bd84ced592bbf50c7c775 1574417494

1
tests/templates/testfiles/test_executor_root/var/db/pkg/media-sound/pulseaudio-12.2-r2/SLOT

@ -0,0 +1 @@
0

1
tests/templates/testfiles/test_executor_root/var/db/pkg/media-sound/pulseaudio-12.2-r2/USE

@ -0,0 +1 @@
X abi_x86_32 abi_x86_64 alsa alsa-plugin amd64 asyncns bluetooth caps dbus elibc_glibc equalizer gdbm glib gtk ipv6 kernel_linux native-headset ofono-headset orc ssl tcpd udev userland_GNU webrtc-aec

10
tests/templates/testfiles/test_executor_root/var/db/pkg/test-category/other-package-1.1/CONTENTS

@ -0,0 +1,10 @@
dir /etc
obj /etc/other_file.conf 61b82a7891c5233b92a5bde68535a71d 1591343936
dir /etc/dir_0
obj /etc/dir_0/file 84bcceb2c8e6de79849ea5f3304f2411 1591343236
dir /etc/dir_1
obj /etc/dir_1/file 84bcceb2c8e6de79849ea5f3304f2411 1591343236
dir /etc/dir_2
obj /etc/dir_2/file 84bcceb2c8e6de79849ea5f3304f2411 1591343236
dir /not_protected
obj /not_protected/file.conf 687594ba5f93d0673abce62d0bd649ec 1591352448

11
tests/templates/testfiles/test_executor_root/var/db/pkg/test-category/test-package-1.0/CONTENTS

@ -0,0 +1,11 @@
dir /etc
dir /etc/dir
dir /etc/terminfo
obj /etc/terminfo/info.json 7a374d90a202b969ee338ac4334fb14b 1591354184
obj /etc/dir/deleted.json 11e3a79fe51cce828d973dba8702adaa 1591356795
dir /etc/dir/subdir
obj /etc/dir/subdir/config.json 506649cf099878124deda2c2452c3693 1591605050
obj /etc/dir/subdir/file 84bcceb2c8e6de79849ea5f3304f2411 1591343236
obj /etc/dir/file.conf 0b87fea7f5b65cac5012baa2bf647e72 1591196541
dir /etc/dir/dir_1
obj /etc/dir/dir_1/config.json 506649cf099878124deda2c2452c3693 1591617024

202
<