import pytest import os from calculate.templates.template_engine import ParametersProcessor, DIR,\ FILE, IncorrectParameter,\ ParametersContainer from calculate.templates.template_processor import TemplateAction from calculate.utils.files import join_paths CHROOT_PATH = os.path.join(os.getcwd(), 'tests/templates/testfiles') parameters_processor = ParametersProcessor() parameters_processor.available_appends = TemplateAction().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) 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) assert parameters_object.append == 'join' except Exception as error: pytest.fail('Unexpected exception: {0}'. format(str(error))) 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) parameters_processor.chroot_path = CHROOT_PATH try: for parameter_name, parameter_value in parameters.items(): parameters_processor.check_template_parameter(parameter_name, parameter_value, FILE, 1) assert parameters_object.source == join_paths( CHROOT_PATH, '/test_dir_1/file.test') except Exception as error: pytest.fail('Unexpected exception: {0}'. format(str(error))) finally: parameters_processor.chroot_path = '/' 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) parameters_processor.chroot_path = CHROOT_PATH try: for parameter_name, parameter_value in parameters.items(): parameters_processor.check_template_parameter(parameter_name, parameter_value, DIR, 1) assert parameters_processor.source == join_paths(CHROOT_PATH, '/test_dir_1') except Exception as error: pytest.fail('Unexpected exception: {0}'. format(str(error))) finally: parameters_processor.chroot_path = '/' 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) 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) parameters_processor.chroot_path = CHROOT_PATH with pytest.raises(IncorrectParameter): for parameter_name, parameter_value in parameters.items(): parameters_processor.check_template_parameter(parameter_name, parameter_value, DIR, 1) 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) parameters_processor.chroot_path = '/' try: for parameter_name, parameter_value in parameters.items(): parameters_processor.check_template_parameter(parameter_name, parameter_value, DIR, 1) assert parameters_processor.force except Exception as error: pytest.fail('Unexpected exception: {0}'. format(str(error))) 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) 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) assert parameters_processor.autoupdate except Exception as error: pytest.fail('Unexpected exception: {0}'. format(str(error))) 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) 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) assert parameters_processor.chown == {'uid': 0, 'gid': 0} except Exception as error: pytest.fail('Unexpected exception: {0}'. format(str(error))) 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) assert parameters_processor.chown == {'uid': uid, 'gid': gid} except Exception as error: pytest.fail('Unexpected exception: {0}'. format(str(error))) 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) 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) assert parameters_processor.chmod == 0o644 except Exception as error: pytest.fail('Unexpected exception: {0}'. format(str(error))) 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) assert parameters_processor.chmod == 0o600 except Exception as error: pytest.fail('Unexpected exception: {0}'. format(str(error)))