def test_loop_maple(self): steps = Steps() data = {'maple': True, 'section': '{\n"package":"maple.plugins.user.LoopPlugins"'\ ',\n"method":"single_iterable_loop",\n"options":[\n {"iterable_name": "front_ports"},\n'\ ' {"start": "0"},\n {"stop": "1"},\n {"step": "1"}\n ]\n}', 'actions': [ {'execute': {'device': 'PE1', 'command': 'show interface ethernet 1/%VARIABLES{front_ports}', 'save': [{'variable_name': 'step-1_rule-1_match_unmatch'}]}, 'maple_search': { 'search_string': '%VARIABLES{step-1_rule-1_match_unmatch}', 'device': 'PE1', 'include': ['.*o.*']}}]} side_effect = [{ 'loop_continue': True, 'matchObjs': { 'front_ports': 'b' } }, { 'loop_continue': False }] with patch('plugins.user.LoopPlugins.single_iterable_loop', side_effect=side_effect) as func: self.kwargs.update({'steps': steps, 'action_item': data}) loop(**self.kwargs) func.assert_called() self.assertEqual(steps.result, Passed)
def test_loop_range(self): steps = Steps() data = yaml.safe_load(self.loop_range) self.kwargs.update({'steps': steps, 'action_item': data}) out = loop(**self.kwargs) self.assertEqual(steps.result, Passed)
def test_loop_with_parallel_errored(self): steps = Steps() data = yaml.safe_load(self.loop_parallel_error) self.kwargs.update({'steps': steps, 'action_item': data}) out = loop(**self.kwargs) self.assertEqual(steps.result, Errored)
def test_loop_with_loop_until(self): self.testbed.devices['PE1'].side_effect = [Exception, Exception, 'oop'] steps = Steps() data = yaml.safe_load(self.loop_until) self.kwargs.update({'steps': steps, 'action_item': data}) out = loop(**self.kwargs) self.assertEqual(out['substeps'], []) self.assertEqual(steps.result, Passed)
def test_loop_with_dict_val(self): steps = Steps() data = yaml.safe_load(self.loop_with_dict_val) self.kwargs.update({'steps': steps, 'action_item': data}) out = loop(**self.kwargs) self.assertEqual(len(out['substeps']), 2) self.assertEqual(out['substeps'][0]['device'], 'PE1') self.assertEqual(out['substeps'][1]['device'], 'PE2')
def test_loop_init(self): steps = Steps() data = yaml.safe_load(self.loop_with_val) self.kwargs.update({'steps': steps, 'action_item': data}) out = loop(**self.kwargs) expected = { "action": "loop", "step_result": Failed, "substeps": [{ "device": "PE1", "continue_": True, "action": "execute", "description": "", "step_result": Passed, "alias": "execute_id", "saved_vars": { "execute_id": "passed" } }, { "device": "PE1", "continue_": True, "action": "parse", "description": "", "step_result": Passed, "alias": None, "saved_vars": {} }, { "device": "PE1", "continue_": True, "action": "execute", "description": "", "step_result": Failed, "alias": "execute_id", "saved_vars": { "execute_id": "failed" } }, { "device": "PE1", "continue_": True, "action": "parse", "description": "", "step_result": Passed, "alias": None, "saved_vars": {} }], "advanced_action": True, "loop_until": None } self.assertEqual(out, expected) self.assertEqual(steps.result, Failed) self.assertEqual(steps.details[2].result, Passed)
def test_until_condition_true(self): steps = Steps() data = yaml.safe_load(self.loop_with_until) self.blitz_obj.parameters.setdefault('save_variable_name', {}) self.blitz_obj.parameters['save_variable_name']['nbc'] = '07.33' self.kwargs.update({ 'self': self.blitz_obj, 'steps': steps, 'action_item': data }) out = loop(**self.kwargs) func = self.testbed.devices['PE1'].parse func.assert_not_called() self.assertEqual(out['substeps'], [])
def test_do_until_condition_true(self): steps = Steps() data = yaml.safe_load(self.loop_with_do_until_1) self.blitz_obj.parameters.setdefault('save_variable_name', {}) self.blitz_obj.parameters['save_variable_name']['nbc'] = '07.33' self.kwargs.update({ 'self': self.blitz_obj, 'steps': steps, 'action_item': data }) out = loop(**self.kwargs) expected = { "action": "loop", "step_result": Passed, "substeps": [{ "device": "PE1", "continue_": True, "action": "parse", "description": "", "step_result": Passed, "alias": None, "saved_vars": { "nbc": "07.33" }, "filters": "get_values('bios_version', 0)" }], "advanced_action": True, "loop_until": None } func = self.testbed.devices['PE1'].parse func.assert_called_once() self.assertEqual(out, expected)
def test_until_condition_false(self): steps = Steps() data = yaml.safe_load(self.loop_with_until) self.blitz_obj.parameters.setdefault('save_variable_name', {}) self.blitz_obj.parameters['save_variable_name']['nbc'] = '06.33' self.kwargs.update({'steps': steps, 'action_item': data}) out = loop(**self.kwargs) expected = [{ 'device': 'PE1', 'continue_': True, 'action': 'parse', 'description': '', 'step_result': Passed, 'alias': None, 'saved_vars': { 'nbc': '07.33' }, 'filters': "get_values('bios_version', 0)" }] func = self.testbed.devices['PE1'].parse func.assert_called_once() self.assertEqual(out['substeps'], expected)
def test_loop_over_device(self): steps = Steps() data = yaml.safe_load(self.loop_over_device) self.kwargs.update({'steps': steps, 'action_item': data}) out = loop(**self.kwargs) expected = { "action": "loop", "step_result": Passed, "substeps": [{ "device": "PE1", "continue_": True, "action": "configure", "description": "", "step_result": Passed, "alias": None, "saved_vars": {} }, { "device": "PE2", "continue_": True, "action": "configure", "description": "", "step_result": Passed, "alias": None, "saved_vars": {} }], "advanced_action": True, "loop_until": None } self.assertEqual(out, expected) self.assertEqual(steps.result, out['step_result'])