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.
278 lines
15 KiB
278 lines
15 KiB
import pytest
|
|
import os
|
|
from calculate.templates.template_engine import ParametersProcessor, DIR,\
|
|
FILE, IncorrectParameter,\
|
|
ParametersContainer
|
|
from calculate.templates.template_processor import TemplateExecutor
|
|
from calculate.utils.files import join_paths
|
|
|
|
|
|
CHROOT_PATH = os.path.join(
|
|
os.getcwd(),
|
|
'tests/templates/testfiles/test_parameters_processor_root')
|
|
|
|
|
|
parameters_processor = ParametersProcessor(chroot_path=CHROOT_PATH)
|
|
parameters_processor.available_appends = TemplateExecutor(
|
|
cl_config_path=join_paths(
|
|
CHROOT_PATH,
|
|
'test_root/var/lib/calculate/config')
|
|
).available_appends
|
|
|
|
|
|
@pytest.mark.parameters_processor
|
|
class TestTemplateParameters:
|
|
def test_if_TemplateParameters_object_is_initialized_accoding_to_dictionary_of_correct_template_parameters__the_TemplateParameters_object_contains_processed_parameters_as_its_attributes_including_default_values(self):
|
|
parameters = {'append': 'join',
|
|
'chmod': '600',
|
|
'force': True}
|
|
|
|
parameters_object = ParametersContainer()
|
|
parameters_processor.set_parameters_container(parameters_object)
|
|
for parameter_name, parameter_value in parameters.items():
|
|
parameters_processor.check_template_parameter(parameter_name,
|
|
parameter_value,
|
|
DIR, 1)
|
|
|
|
parameters_processor.check_postparse_parameters()
|
|
assert (parameters_object.append == 'join' and
|
|
parameters_object.chmod == 0o600 and
|
|
parameters_object.force and
|
|
not parameters_object.autoupdate)
|
|
|
|
def test_if_TemplateParameters_object_is_intialized_using_dictionary_with_append_parameter__a_value_of_the_parameter_will_be_checked(self):
|
|
parameters = {'append': 'join'}
|
|
|
|
parameters_object = ParametersContainer()
|
|
parameters_processor.set_parameters_container(parameters_object)
|
|
try:
|
|
for parameter_name, parameter_value in parameters.items():
|
|
parameters_processor.check_template_parameter(parameter_name,
|
|
parameter_value,
|
|
FILE, 1)
|
|
parameters_processor.check_postparse_parameters()
|
|
except Exception as error:
|
|
pytest.fail('Unexpected exception: {0}'.
|
|
format(str(error)))
|
|
|
|
assert parameters_object.append == 'join'
|
|
|
|
def test_if_TemplateParameters_object_is_intialized_using_dictionary_with_correct_source_parameter__the_object_will_be_initialized_successfully(self):
|
|
parameters = {'source': '/test_dir_1/file.test'}
|
|
|
|
parameters_object = ParametersContainer()
|
|
parameters_processor.set_parameters_container(parameters_object)
|
|
try:
|
|
for parameter_name, parameter_value in parameters.items():
|
|
parameters_processor.check_template_parameter(parameter_name,
|
|
parameter_value,
|
|
FILE, 1)
|
|
parameters_processor.check_postparse_parameters()
|
|
except Exception as error:
|
|
pytest.fail('Unexpected exception: {0}'.
|
|
format(str(error)))
|
|
|
|
assert parameters_object.source == join_paths(
|
|
CHROOT_PATH,
|
|
'/test_dir_1/file.test')
|
|
|
|
def test_if_TemplateParameters_object_is_intialized_as_dir_parameters_object_using_correct_source_parameter_with_append_link__the_object_will_be_initialized_successfully(self):
|
|
parameters = {'append': 'link', 'source': '/test_dir_1'}
|
|
|
|
parameters_object = ParametersContainer()
|
|
parameters_processor.set_parameters_container(parameters_object)
|
|
try:
|
|
for parameter_name, parameter_value in parameters.items():
|
|
parameters_processor.check_template_parameter(parameter_name,
|
|
parameter_value,
|
|
DIR, 1)
|
|
|
|
parameters_processor.check_postparse_parameters()
|
|
except Exception as error:
|
|
pytest.fail('Unexpected exception: {0}'.
|
|
format(str(error)))
|
|
|
|
assert parameters_object.source == join_paths(CHROOT_PATH,
|
|
'/test_dir_1')
|
|
|
|
def test_if_TemplateParameters_object_is_intialized_using_source_parameter_with_unexisting_file_path__the_initialization_of_the_object_will_be_failed(self):
|
|
parameters = {'source': '/test_dir_1/unexisted_file.test'}
|
|
parameters_object = ParametersContainer()
|
|
parameters_processor.set_parameters_container(parameters_object)
|
|
|
|
with pytest.raises(IncorrectParameter):
|
|
for parameter_name, parameter_value in parameters.items():
|
|
parameters_processor.check_template_parameter(parameter_name,
|
|
parameter_value,
|
|
DIR, 1)
|
|
parameters_processor.check_postparse_parameters()
|
|
|
|
def test_if_TemplateParameters_object_is_intialized_as_dir_parameters_object_using_source_parameter_but_without_append_link__the_initialization_of_the_object_will_be_failed(self):
|
|
parameters = {'source': '/test_dir_1/file.test'}
|
|
parameters_object = ParametersContainer()
|
|
parameters_processor.set_parameters_container(parameters_object)
|
|
|
|
with pytest.raises(IncorrectParameter):
|
|
for parameter_name, parameter_value in parameters.items():
|
|
parameters_processor.check_template_parameter(parameter_name,
|
|
parameter_value,
|
|
DIR, 1)
|
|
parameters_processor.check_postparse_parameters()
|
|
|
|
def test_if_TemplateParameters_object_is_intialized_using_dictionary_with_correct_force_parameter__the_object_will_be_initialized_successfully(self):
|
|
parameters = {'force': True}
|
|
parameters_object = ParametersContainer()
|
|
parameters_processor.set_parameters_container(parameters_object)
|
|
|
|
try:
|
|
for parameter_name, parameter_value in parameters.items():
|
|
parameters_processor.check_template_parameter(parameter_name,
|
|
parameter_value,
|
|
DIR, 1)
|
|
parameters_processor.check_postparse_parameters()
|
|
except Exception as error:
|
|
pytest.fail('Unexpected exception: {0}'.
|
|
format(str(error)))
|
|
|
|
assert parameters_object.force
|
|
|
|
def test_if_TemplateParameters_object_is_intialized_using_dictionary_with_incorrect_force_parameter__the_initialization_of_the_object_will_be_failed(self):
|
|
parameters = {'force': 'value'}
|
|
parameters_object = ParametersContainer()
|
|
parameters_processor.set_parameters_container(parameters_object)
|
|
|
|
with pytest.raises(IncorrectParameter):
|
|
for parameter_name, parameter_value in parameters.items():
|
|
parameters_processor.check_template_parameter(parameter_name,
|
|
parameter_value,
|
|
FILE, 1)
|
|
parameters_processor.check_postparse_parameters()
|
|
|
|
def test_if_TemplateParameters_object_is_intialized_using_dictionary_with_autoupdate_parameter__a_value_of_the_parameter_will_be_checked(self):
|
|
parameters = {'autoupdate': True}
|
|
parameters_object = ParametersContainer()
|
|
parameters_processor.set_parameters_container(parameters_object)
|
|
|
|
try:
|
|
for parameter_name, parameter_value in parameters.items():
|
|
parameters_processor.check_template_parameter(parameter_name,
|
|
parameter_value,
|
|
FILE, 1)
|
|
parameters_processor.check_postparse_parameters()
|
|
except Exception as error:
|
|
pytest.fail('Unexpected exception: {0}'.
|
|
format(str(error)))
|
|
|
|
assert parameters_object.autoupdate
|
|
|
|
def test_if_TemplateParameters_object_is_intialized_using_dictionary_with_incorrect_autoupdate_parameter__the_initialization_of_the_object_will_be_failed(self):
|
|
parameters = {'autoupdate': 'value'}
|
|
parameters_object = ParametersContainer()
|
|
parameters_processor.set_parameters_container(parameters_object)
|
|
|
|
with pytest.raises(IncorrectParameter):
|
|
for parameter_name, parameter_value in parameters.items():
|
|
parameters_processor.check_template_parameter(parameter_name,
|
|
parameter_value,
|
|
FILE, 1)
|
|
parameters_processor.check_postparse_parameters()
|
|
|
|
def test_if_TemplateParameters_object_is_intialized_using_dictionary_with_correct_chown_parameter__the_object_will_be_initialized_successfully(self):
|
|
parameters = {'chown': 'root:root'}
|
|
parameters_object = ParametersContainer()
|
|
parameters_processor.set_parameters_container(parameters_object)
|
|
|
|
try:
|
|
for parameter_name, parameter_value in parameters.items():
|
|
parameters_processor.check_template_parameter(parameter_name,
|
|
parameter_value,
|
|
FILE, 1)
|
|
parameters_processor.check_postparse_parameters()
|
|
except Exception as error:
|
|
pytest.fail('Unexpected exception: {0}'.
|
|
format(str(error)))
|
|
|
|
assert parameters_object.chown == {'uid': 0, 'gid': 0}
|
|
|
|
def test_if_TemplateParameters_object_is_initialized_using_dictionary_with_correct_chown_parameter_and_new_chroot_path__the_object_will_be_initialized_successfully(self):
|
|
parameters = {'chown': 'divanov:guest'}
|
|
parameters_object = ParametersContainer()
|
|
parameters_processor.set_parameters_container(parameters_object)
|
|
|
|
try:
|
|
for parameter_name, parameter_value in parameters.items():
|
|
parameters_processor.check_template_parameter(parameter_name,
|
|
parameter_value,
|
|
FILE, 1)
|
|
parameters_processor.check_postparse_parameters()
|
|
except Exception as error:
|
|
pytest.fail('Unexpected exception: {0}'.
|
|
format(str(error)))
|
|
|
|
assert parameters_object.chown == {'uid': 666, 'gid': 1000}
|
|
|
|
def test_if_TemplateParameters_object_is_intialized_using_dictionary_with_correct_chown_parameter_in_its_digital_form__the_object_will_be_initialized_successfully(self):
|
|
uid = os.getuid()
|
|
gid = os.getgid()
|
|
parameters = {'chown': '{0}:{1}'.format(uid, gid)}
|
|
parameters_object = ParametersContainer()
|
|
parameters_processor.set_parameters_container(parameters_object)
|
|
|
|
try:
|
|
for parameter_name, parameter_value in parameters.items():
|
|
parameters_processor.check_template_parameter(parameter_name,
|
|
parameter_value,
|
|
FILE, 1)
|
|
parameters_processor.check_postparse_parameters()
|
|
except Exception as error:
|
|
pytest.fail('Unexpected exception: {0}'.
|
|
format(str(error)))
|
|
|
|
assert parameters_object.chown == {'uid': uid, 'gid': gid}
|
|
|
|
def test_if_TemplateParameters_object_is_intialized_using_dictionary_with_incorrect_chown_parameter__the_initialization_of_the_object_will_be_failed(self):
|
|
parameters = {'chown': 'wrong_user_name:wrong_group_name'}
|
|
parameters_object = ParametersContainer()
|
|
parameters_processor.set_parameters_container(parameters_object)
|
|
|
|
with pytest.raises(IncorrectParameter):
|
|
for parameter_name, parameter_value in parameters.items():
|
|
parameters_processor.check_template_parameter(parameter_name,
|
|
parameter_value,
|
|
FILE, 1)
|
|
parameters_processor.check_postparse_parameters()
|
|
|
|
def test_if_TemplateParameters_object_is_intialized_using_dictionary_with_correct_chmod_parameter__the_object_will_be_initialized_successfully(self):
|
|
parameters = {'chmod': 'rw-r--r--'}
|
|
parameters_object = ParametersContainer()
|
|
parameters_processor.set_parameters_container(parameters_object)
|
|
|
|
try:
|
|
for parameter_name, parameter_value in parameters.items():
|
|
parameters_processor.check_template_parameter(parameter_name,
|
|
parameter_value,
|
|
FILE, 1)
|
|
parameters_processor.check_postparse_parameters()
|
|
except Exception as error:
|
|
pytest.fail('Unexpected exception: {0}'.
|
|
format(str(error)))
|
|
|
|
assert parameters_object.chmod == 0o644
|
|
|
|
def test_if_TemplateParameters_object_is_intialized_using_dictionary_with_correct_chmod_parameter_in_its_digital_form__the_object_will_be_initialized_successfully(self):
|
|
parameters = {'chmod': '600'}
|
|
parameters_object = ParametersContainer()
|
|
parameters_processor.set_parameters_container(parameters_object)
|
|
|
|
try:
|
|
for parameter_name, parameter_value in parameters.items():
|
|
parameters_processor.check_template_parameter(parameter_name,
|
|
parameter_value,
|
|
FILE, 1)
|
|
parameters_processor.check_postparse_parameters()
|
|
except Exception as error:
|
|
pytest.fail('Unexpected exception: {0}'.
|
|
format(str(error)))
|
|
|
|
assert parameters_object.chmod == 0o600
|