def test_void_stonith_check_for_action(self): assert_report_item_list_equal( primitive.validate_resource_instance_attributes_create( _fixture_void(stonith=True), { "param1": "", "action": "reboot", "param2": "value2", }, etree.Element("resources"), ), [ fixture.error( reports.codes.INVALID_OPTION_VALUE, option_name="param1", option_value="", allowed_values=None, cannot_be_empty=True, forbidden_characters=None, ), fixture.error( reports.codes.DEPRECATED_OPTION, force_code=reports.codes.FORCE, option_type="stonith", option_name="action", replaced_by=["pcmk_off_action", "pcmk_reboot_action"], ), ], )
def test_stonith_reports(self): assert_report_item_list_equal( primitive.validate_resource_instance_attributes_create( _fixture_stonith(), { "unknown": "option", }, etree.Element("resources"), ), [ fixture.error( reports.codes.INVALID_OPTIONS, force_code=reports.codes.FORCE, option_names=["unknown"], allowed=["action", "optional", "required"], option_type="stonith", allowed_patterns=[], ), fixture.error( reports.codes.REQUIRED_OPTIONS_ARE_MISSING, force_code=reports.codes.FORCE, option_type="stonith", option_names=["required"], ), ], )
def test_set_unknown_params_forced(self): assert_report_item_list_equal( primitive.validate_resource_instance_attributes_create( _fixture_agent(), { "required1_new": "A", "required2_new": "B", "unknown1": "C", "unknown2": "D", }, etree.Element("resources"), force=True, ), [ fixture.warn( reports.codes.INVALID_OPTIONS, option_names=["unknown1", "unknown2"], allowed=[ "action", "optional1_new", "optional1_old", "optional2_new", "optional2_old", "required1_new", "required1_old", "required2_new", "required2_old", ], option_type="resource", allowed_patterns=[], ), ], )
def test_set_all_required_and_optional_params_one_deprecated_one_new(self): assert_report_item_list_equal( primitive.validate_resource_instance_attributes_create( _fixture_agent(), { "required1_new": "A", "required2_old": "B", "optional1_new": "C", "optional2_old": "D", }, etree.Element("resources"), ), [ fixture.warn( reports.codes.DEPRECATED_OPTION, option_type="resource", option_name="required2_old", replaced_by=["required2_new"], ), fixture.warn( reports.codes.DEPRECATED_OPTION, option_type="resource", option_name="optional2_old", replaced_by=["optional2_new"], ), ], )
def test_set_empty_string(self): options = [ "required1_new", "required2_old", "optional1_new", "optional1_old", "unknown", ] assert_report_item_list_equal( primitive.validate_resource_instance_attributes_create( _fixture_agent(), {name: "" for name in options}, etree.Element("resources"), ), [ fixture.error( reports.codes.INVALID_OPTION_VALUE, option_name=name, option_value="", allowed_values=None, cannot_be_empty=True, forbidden_characters=None, ) for name in options ] + [ fixture.error( reports.codes.INVALID_OPTIONS, force_code=reports.codes.FORCE, option_names=["unknown"], allowed=[ "action", "optional1_new", "optional1_old", "optional2_new", "optional2_old", "required1_new", "required1_old", "required2_new", "required2_old", ], option_type="resource", allowed_patterns=[], ), fixture.warn( reports.codes.DEPRECATED_OPTION, option_type="resource", option_name="required2_old", replaced_by=["required2_new"], ), fixture.warn( reports.codes.DEPRECATED_OPTION, option_type="resource", option_name="optional1_old", replaced_by=["optional1_new"], ), ], )
def test_stonith_action_not_set(self): assert_report_item_list_equal( primitive.validate_resource_instance_attributes_create( _fixture_stonith(), { "required": "value", }, etree.Element("resources"), ), [], )
def test_resource_action_not_deprecated(self): assert_report_item_list_equal( primitive.validate_resource_instance_attributes_create( _fixture_agent(), { "action": "reboot", "required1_new": "value", "required2_new": "value", }, etree.Element("resources"), ), [], )
def test_stonith_action_deprecated_forced(self): assert_report_item_list_equal( primitive.validate_resource_instance_attributes_create( _fixture_stonith(), { "action": "reboot", "required": "value", }, etree.Element("resources"), force=True, ), [ fixture.warn( reports.codes.DEPRECATED_OPTION, option_type="stonith", option_name="action", replaced_by=["pcmk_off_action", "pcmk_reboot_action"], ), ], )
def test_void_checks_for_empty_strings(self): assert_report_item_list_equal( primitive.validate_resource_instance_attributes_create( _fixture_void(), { "param1": "", "param2": "value2", }, etree.Element("resources"), ), [ fixture.error( reports.codes.INVALID_OPTION_VALUE, option_name="param1", option_value="", allowed_values=None, cannot_be_empty=True, forbidden_characters=None, ), ], )
def test_stonith_action_empty(self): assert_report_item_list_equal( primitive.validate_resource_instance_attributes_create( _fixture_stonith(), { "action": "", "required": "value", }, etree.Element("resources"), ), [ fixture.error( reports.codes.INVALID_OPTION_VALUE, option_name="action", option_value="", allowed_values=None, cannot_be_empty=True, forbidden_characters=None, ), ], )
def test_deprecation_loop(self): # Meta-data are broken - there are obsoleting loops. The point of the # test is to make sure pcs does not crash or loop forever. Error # reports are not that important, since meta-data are broken. assert_report_item_list_equal( primitive.validate_resource_instance_attributes_create( _fixture_agent_deprecated_loop(), { "loop3b": "value", }, etree.Element("resources"), ), [ fixture.warn( reports.codes.DEPRECATED_OPTION, option_type="resource", option_name="loop3b", replaced_by=["loop3c"], ), ], )
def test_missing_required_forced(self): assert_report_item_list_equal( primitive.validate_resource_instance_attributes_create( _fixture_agent(), {}, etree.Element("resources"), force=True, ), [ fixture.warn( reports.codes.REQUIRED_OPTION_OF_ALTERNATIVES_IS_MISSING, option_type="resource", option_names=["required1_new", "required1_old"], deprecated_names=["required1_old"], ), fixture.warn( reports.codes.REQUIRED_OPTION_OF_ALTERNATIVES_IS_MISSING, option_type="resource", option_names=["required2_new", "required2_old"], deprecated_names=["required2_old"], ), ], )