def test_run_txml_proc_util(stc): plLogger = PLLogger.GetLogger("test_run_txml_proc_util") mod_name = "unit_test_proc_funcs" pf_dict = [get_original_input_dict()] kv_dict = {"someKey": ["2", "4"], "anotherKey": ["3", "9"]} gui_kv_dict = {"weight": ["5.0", "60.0"], "beta": ["10", "2"]} # Create unit test proc funcs file meth_home = meth_man_utils.get_methodology_base_dir() plLogger.LogInfo("meth_home: " + str(meth_home)) script_dir = os.path.join(meth_home, "Scripts") plLogger.LogInfo("script_dir: " + str(script_dir)) script_full_path = os.path.join(script_dir, mod_name + ".py") script_comp_full_path = os.path.join(script_dir, mod_name + ".pyc") plLogger.LogInfo("script_full_path: " + str(script_full_path)) ret_val = False try: if not os.path.exists(script_dir): plLogger.LogInfo("making script dir...") os.makedirs(script_dir) with open(script_full_path, "w") as f: f.write(get_ut_proc_func_file_content()) plLogger.LogInfo("wrote contents of file to " + str(script_full_path)) ret_val = RunCmd.run_txml_proc_util(pf_dict, kv_dict, gui_kv_dict) finally: os.remove(script_full_path) if os.path.exists(script_comp_full_path): os.remove(script_comp_full_path) assert ret_val
def test_create_and_tag_ports(stc): ctor = CScriptableCreator() stc_sys = CStcSystem.Instance() project = stc_sys.GetObject("Project") tags = project.GetObject("Tags") target1 = ctor.Create('Tag', tags) target1.Set("Name", "EastPortGroup") target2 = ctor.Create('Tag', tags) target2.Set("Name", "WestPortGroup") # Expose properties (loaded at some other step) exposed_config = ctor.Create("ExposedConfig", project) xp = ctor.Create("ExposedProperty", exposed_config) xp.AddObject(target1, RelationType("ScriptableExposedProperty")) xp.Set("EPClassId", 'Tag') xp.Set("EPNameId", "Tag.Name.1") xp = ctor.Create("ExposedProperty", exposed_config) xp.AddObject(target2, RelationType("ScriptableExposedProperty")) xp.Set("EPClassId", 'Tag') xp.Set("EPNameId", "Tag.Name.2") port_list = ["Tag.Name.2=//offline/2/1,//offline/2/2", "Tag.Name.1=//1.2.3.4/1/1"] ports, offline = RunCmd.create_and_tag_ports(port_list) assert len(ports) == 3 assert len(target2.GetObjects("Port", RelationType("UserTag", 1))) == 2 assert len(target1.GetObjects("Port", RelationType("UserTag", 1))) == 1 assert offline is True port_list = ["Tag.Name.2=//1.2.1.2/2/1", "Tag.Name.1=//1.2.3.4/1/1"] ports, offline = RunCmd.create_and_tag_ports(port_list) assert len(ports) == 2 assert len(target2.GetObjects("Port", RelationType("UserTag", 1))) == 3 assert len(target1.GetObjects("Port", RelationType("UserTag", 1))) == 2 assert offline is False return
def test_parse_txml_keys_values(stc): plLogger = PLLogger.GetLogger("test_parse_txml_keys_values") plLogger.LogInfo("begin") attr1 = "Object.Property1" attr2 = "Object.Property2" attr3 = "Object.Property3" attr4 = "Object.Property4" val1 = 12 val2 = "twelve" val3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] val4 = "12" # Input XML input_xml = str( "<test>" + "<wizard displayName=\"Unit Test Parse Key Vals\" " + "description=\"test parsing key values in TXML\" " + "image=\"\">" + "<page displayName=\"stuff\" description=\"descript\" >" + "<group displayName=\"gbox\">" + "<property id=\"" + attr1 + "\" value=\"" + str(val1) + "\" " + "displayName=\"attr1\" />" + "<property id=\"" + attr2 + "\" value=\"" + str(val2) + "\" " + "displayName=\"attr2\" />" + "<property id=\"" + attr3 + "\" value=\"" + str(val3) + "\" " + "displayName=\"attr3\" />" + "</group></page>" + "<page displayName=\"page2\" description=\"descript\">" + "<group displayName=\"gbox\">" + "<property id=\"" + attr4 + "\" value=\"" + str(val4) + "\" " + "displayName=\"attr4\" />" + "</group></page></wizard></test>") plLogger.LogInfo("input_xml: " + str(input_xml)) root = etree.fromstring(input_xml) assert root is not None key_val_dict, gui_key_val_dict = RunCmd.parse_txml_keys_values(root) assert key_val_dict is not None assert gui_key_val_dict == {} plLogger.LogInfo("key_val_dict: " + str(key_val_dict)) assert len(key_val_dict.keys()) == 4 # Check the keys for kv_pair in zip([attr1, attr2, attr3, attr4], [str(val1), str(val2), str(val3), str(val4)]): assert kv_pair[0] in key_val_dict.keys() assert key_val_dict[kv_pair[0]] == kv_pair[1]
def test_get_txml_proc_dict(stc): # Input XML input_xml = "<test>" + \ "<processingFunctions>" + \ "<processingDictionary inputDict='{\"test1\": \"blah1\"}'>" + \ "</processingDictionary>" + \ "<processingDictionary inputDict='{\"test2\": \"blah2\"}'>" + \ "</processingDictionary>" + \ "</processingFunctions>" + \ "</test>" root = etree.fromstring(input_xml) input_dict_list = RunCmd.get_txml_proc_dicts(root) assert input_dict_list is not None assert len(input_dict_list) == 2 assert input_dict_list[0]["test1"] == "blah1" assert input_dict_list[1]["test2"] == "blah2"
def disabled_test_run_txml_proc_func_error_in_proc_func(stc): plLogger = PLLogger.GetLogger("test_run_txml_proc_func_error") mod_name = "unit_test_proc_funcs" pf_key = "procFunc1" pf_dict = {} pf_dict["id_list"] = [pf_key] pf_dict[pf_key] = {} pf_dict[pf_key]["script"] = "unit_test_proc_funcs" + ".py" pf_dict[pf_key]["entry_fn"] = "recombine_alpha_beta" pf_dict[pf_key]["input_id_list"] = ["in_1", "in_2", "in_3"] pf_dict[pf_key]["in_1"] = {"src_id": "alpha", "script_var": "Alpha", "default": None} pf_dict[pf_key]["in_2"] = {"src_id": "beta", "script_var": None, "default": None} pf_dict[pf_key]["in_3"] = {"src_id": None, "script_var": "myConst", "default": "5"} pf_dict[pf_key]["output_id_list"] = ["out_1", "out_2", "out_3"] pf_dict[pf_key]["out_1"] = { "ep_key": "Object.AlphaTimesBeta200", "script_var": "AlphaTimesBeta"} pf_dict[pf_key]["out_2"] = { "ep_key": "Object.AlphaBetaAvg12", "script_var": "AlphaBetaAvgPlusConst"} pf_dict[pf_key]["out_3"] = { "ep_key": "Object.AlphaPlusBeta1", "script_var": "AlphaPlusBeta"} kv_dict = {"someKey": "someVal", "anotherKey": "anotherVal"} gui_kv_dict = {"alpha": "a", "beta": "b"} # Create unit test proc funcs file meth_home = meth_man_utils.get_methodology_base_dir() plLogger.LogInfo("meth_home: " + str(meth_home)) script_dir = os.path.join(meth_home, "Scripts") plLogger.LogInfo("script_dir: " + str(script_dir)) script_full_path = os.path.join(script_dir, mod_name + ".py") script_comp_full_path = os.path.join(script_dir, mod_name + ".pyc") plLogger.LogInfo("script_full_path: " + str(script_full_path)) ret_val = False try: if not os.path.exists(script_dir): plLogger.LogInfo("making script dir...") os.makedirs(script_dir) with open(script_full_path, "w") as f: f.write(get_ut_proc_func_file_content()) plLogger.LogInfo("wrote contents of file to " + str(script_full_path)) ret_val = RunCmd.run_txml_proc_funcs(pf_dict, kv_dict, gui_kv_dict) finally: os.remove(script_full_path) if os.path.exists(script_comp_full_path): os.remove(script_comp_full_path) assert not ret_val # kv_dict should be unchanged assert "someKey" in kv_dict.keys() assert "anotherKey" in kv_dict.keys() assert kv_dict["someKey"] == "someVal" assert kv_dict["anotherKey"] == "anotherVal"
def test_parse_input_data(stc): kv_dict = {"someKey": "someVal", "anotherKey": ["one", "two"]} gui_kv_dict = {"weight": 5.0, "beta": "10"} updated_input_dict = RunCmd.parse_input_data(get_original_input_dict(), kv_dict, gui_kv_dict) assert updated_input_dict["id"] == "Left.CreateProtocolMix.TableData" assert updated_input_dict["scriptFile"] == "txml_processing_functions.py" assert updated_input_dict["entryFunction"] == "config_table_data" customDict = {} customDict["EnableVlan"] = "someVal" customDict["Weight"] = 5.0 assert updated_input_dict["input"]["customDict"] == customDict # Check interface dictionary list(ipv4 and eth) interfaceDict = updated_input_dict["input"]["interfaceDict"] assert len(interfaceDict) == 2 # Check IPv4 Inteface ipv4 = {} ipv4["ParentTagName"] = "ttIpv4If" ipv4["ClassName"] = "Ipv4If" ipv4["StmPropertyModifierDict"] = {} ipv4["StmPropertyModifierDict"]["Address"] = {} ipv4["StmPropertyModifierDict"]["Address"]["Start"] = "someVal" ipv4["StmPropertyModifierDict"]["Address"]["Step"] = ["one", "two"] ipv4["StmPropertyModifierDict"]["Gateway"] = {} ipv4["StmPropertyModifierDict"]["Gateway"]["Start"] = "10" ipv4["StmPropertyModifierDict"]["Gateway"]["Step"] = "10" assert ipv4 in interfaceDict # Check EthII Interface eth = {} eth["ParentTagName"] = "ttEthIIIf" eth["ClassName"] = "EthIIIf" eth["StmPropertyModifierDict"] = {} eth["StmPropertyModifierDict"]["SourceMac"] = {} eth["StmPropertyModifierDict"]["SourceMac"]["Start"] = "someVal" eth["StmPropertyModifierDict"]["SourceMac"]["Step"] = ["one", "two"] assert eth in interfaceDict # Check protocol dictionary list(bgp and ldp) protocolDict = updated_input_dict["input"]["protocolDict"] assert len(protocolDict) == 2 # Check BgpRouterConfig bgp = {} bgp["EnableProperty"] = "someVal" bgp["ParentTagName"] = "ttBgpRouterConfig" bgp["ClassName"] = "BgpRouterConfig" bgp["PropertyValueDict"] = {} bgp["PropertyValueDict"]["IpVersion"] = "someVal" bgp["PropertyValueDict"]["EnableBfd"] = ["one", "two"] bgp["StmPropertyModifierDict"] = {} bgp["StmPropertyModifierDict"]["AsNum"] = {} bgp["StmPropertyModifierDict"]["AsNum"]["Start"] = "10" bgp["StmPropertyModifierDict"]["AsNum"]["Step"] = "1" bgp["StmPropertyModifierDict"]["DutAsNum"] = {} bgp["StmPropertyModifierDict"]["DutAsNum"]["Start"] = "someVal" bgp["StmPropertyModifierDict"]["DutAsNum"]["Step"] = "1" assert bgp in protocolDict # Check LdpRouterConfig ldp = {} ldp["EnableProperty"] = "someVal" ldp["ParentTagName"] = "ttLdpRouterConfig" ldp["ClassName"] = "LdpRouterConfig" ldp["PropertyValueDict"] = {} ldp["PropertyValueDict"]["HelloVersion"] = "someVal" ldp["PropertyValueDict"]["EnableBfd"] = "10" assert ldp in protocolDict # Check output data output = {} output["scriptVarName"] = "TableData" output["epKey"] = "TestMethodologyCreateProtocolMixCommand3TableData" assert updated_input_dict["output"][0] == output
def test_parse_proc_funcs(stc): plLogger = PLLogger.GetLogger("test_parse_proc_funcs") pf_id = "procFunc1" ep_key1 = "Object.AlphaPlusBeta1" ep_key2 = "Object.AlphaTimesBeta200" ep_key3 = "Object.AlphaBetaAvg12" # Input XML input_xml = "<test>" + \ "<processingFunctions>" + \ "<processingFunction id=\"" + pf_id + "\" " + \ "scriptFile=\"utProcFuncScript.py\" " + \ "entryFunction=\"recombine_alpha_beta\">" + \ "<input srcId=\"alpha\" scriptVarName=\"Alpha\" />" + \ "<input srcId=\"beta\" />" + \ "<input scriptVarName=\"myConst\" " + \ "default=\"5\" />" + \ "<output epKey=\"" + ep_key1 + "\" " + \ "scriptVarName=\"AlphaPlusBeta\" />" + \ "<output scriptVarName=\"AlphaTimesBeta\" " + \ "epKey=\"" + ep_key2 + "\" />" + \ "<output epKey=\"" + ep_key3 + "\" " + \ "scriptVarName=\"AlphaBetaAvg\" />" + \ "</processingFunction>" + \ "</processingFunctions>" + \ "</test>" root = etree.fromstring(input_xml) pf_dict = RunCmd.parse_txml_proc_funcs(root) plLogger.LogInfo("pf_dict: " + str(pf_dict)) assert pf_dict is not None assert "id_list" in pf_dict.keys() assert pf_id in pf_dict.keys() assert "script" in pf_dict[pf_id].keys() assert pf_dict[pf_id]["script"] == "utProcFuncScript.py" assert "entry_fn" in pf_dict[pf_id].keys() assert pf_dict[pf_id]["entry_fn"] == "recombine_alpha_beta" assert "input_id_list" in pf_dict[pf_id].keys() assert len(pf_dict[pf_id]["input_id_list"]) == 3 assert "in_1" in pf_dict[pf_id]["input_id_list"] assert "in_2" in pf_dict[pf_id]["input_id_list"] assert "in_3" in pf_dict[pf_id]["input_id_list"] assert "src_id" in pf_dict[pf_id]["in_1"].keys() assert pf_dict[pf_id]["in_1"]["src_id"] == "alpha" assert "script_var" in pf_dict[pf_id]["in_1"].keys() assert pf_dict[pf_id]["in_1"]["script_var"] == "Alpha" assert "default" in pf_dict[pf_id]["in_1"].keys() assert pf_dict[pf_id]["in_1"]["default"] is None assert "src_id" in pf_dict[pf_id]["in_2"].keys() assert pf_dict[pf_id]["in_2"]["src_id"] == "beta" assert "script_var" in pf_dict[pf_id]["in_2"].keys() assert pf_dict[pf_id]["in_2"]["script_var"] is None assert "default" in pf_dict[pf_id]["in_2"].keys() assert pf_dict[pf_id]["in_2"]["default"] is None assert "src_id" in pf_dict[pf_id]["in_3"].keys() assert pf_dict[pf_id]["in_3"]["src_id"] is None assert "script_var" in pf_dict[pf_id]["in_3"].keys() assert pf_dict[pf_id]["in_3"]["script_var"] == "myConst" assert "default" in pf_dict[pf_id]["in_3"].keys() assert pf_dict[pf_id]["in_3"]["default"] == "5" assert "output_id_list" in pf_dict[pf_id].keys() assert len(pf_dict[pf_id]["output_id_list"]) == 3 assert "out_1" in pf_dict[pf_id]["output_id_list"] assert "out_2" in pf_dict[pf_id]["output_id_list"] assert "out_3" in pf_dict[pf_id]["output_id_list"] assert "ep_key" in pf_dict[pf_id]["out_1"].keys() assert pf_dict[pf_id]["out_1"]["ep_key"] == ep_key1 assert "script_var" in pf_dict[pf_id]["out_1"].keys() assert pf_dict[pf_id]["out_1"]["script_var"] == "AlphaPlusBeta" assert "ep_key" in pf_dict[pf_id]["out_2"].keys() assert pf_dict[pf_id]["out_2"]["ep_key"] == ep_key2 assert "script_var" in pf_dict[pf_id]["out_2"].keys() assert pf_dict[pf_id]["out_2"]["script_var"] == "AlphaTimesBeta" assert "ep_key" in pf_dict[pf_id]["out_3"].keys() assert pf_dict[pf_id]["out_3"]["ep_key"] == ep_key3 assert "script_var" in pf_dict[pf_id]["out_3"].keys() assert pf_dict[pf_id]["out_3"]["script_var"] == "AlphaBetaAvg"
def test_parse_port_groups(): plLogger = PLLogger.GetLogger("test_parse_port_groups") plLogger.LogInfo("begin") ctor = CScriptableCreator() stc_sys = CStcSystem.Instance() # project = stc_sys.GetObject("Project") # sequencer = CStcSystem.Instance().GetObject("Sequencer") # hnd_reg = CHandleRegistry.Instance() common_data_path = stc_sys.GetApplicationCommonDataPath() meth_name = "test_RunStmTestCaseCommand_test_parse_port_groups" test_name = "test_parse_port_groups" # Clean up the fake installed methodology (if it exists) if os.path.exists(os.path.join(common_data_path, mgr_const.MM_TEST_METH_DIR, meth_name)): meth_man_utils.methodology_rmdir(meth_name) # Create a fake installed methodology home_dir = meth_man_utils.get_methodology_home_dir() assert home_dir is not None meth_dir = meth_man_utils.methodology_mkdir(meth_name) assert meth_dir is not None test_dir = meth_man_utils.methodology_test_case_mkdir(meth_name, test_name) assert test_dir is not None # Create a fake TXML file txml_content = get_test_txml() txml_file = os.path.join(test_dir, mgr_const.MM_META_FILE_NAME) f = open(txml_file, "w") f.write(txml_content) f.close() meth_man = stc_sys.GetObject("StmMethodologyManager") if meth_man is None: meth_man = ctor.Create("StmMethodologyManager", stc_sys) assert meth_man test_meth = ctor.Create("StmMethodology", meth_man) test_case = ctor.Create("StmTestCase", test_meth) test_case.Set("Path", txml_file) root = RunCmd.get_txml_file_root(txml_file) assert root is not None port_group_dict = RunCmd.parse_txml_port_groups(root) assert port_group_dict is not None assert len(port_group_dict.keys()) == 2 assert "Tag.Name.1632" in port_group_dict.keys() assert "Tag.Name.1633" in port_group_dict.keys() assert len(port_group_dict["Tag.Name.1632"]) == 2 assert "//10.14.16.27/1/1" in port_group_dict["Tag.Name.1632"] assert "//10.14.16.27/1/2" in port_group_dict["Tag.Name.1632"] assert len(port_group_dict["Tag.Name.1633"]) == 2 assert "//10.14.16.27/2/1" in port_group_dict["Tag.Name.1633"] assert "//10.14.16.27/2/2" in port_group_dict["Tag.Name.1633"] # Test the list constructor for the MethdologyGroupCommand prop_val = RunCmd.build_port_group_list(port_group_dict) plLogger.LogInfo("key_val_list: " + str(prop_val)) assert len(prop_val) == 2 assert "Tag.Name.1632=//10.14.16.27/1/1,//10.14.16.27/1/2" in prop_val assert "Tag.Name.1633=//10.14.16.27/2/1,//10.14.16.27/2/2" in prop_val # Clean up the fake installed methodology if os.path.exists(os.path.join(common_data_path, mgr_const.MM_TEST_METH_DIR, meth_name)): meth_man_utils.methodology_rmdir(meth_name)
def test_parse_txml_table_keys_values(stc): plLogger = PLLogger.GetLogger("test_parse_table_txml_keys_values") plLogger.LogInfo("begin") attr1 = "Object.Property1" attr2 = "Object.Property2" attr3 = "Object.Property3" attr4 = "Object.Property4" val1 = 12 val2 = "twelve" val3 = True val4 = "331" # Input XML input_xml = str( "<test>" + "<wizard displayName=\"Unit Test Parse Key Vals\" " + "description=\"test parsing key values in TXML\" " + "image=\"\">" + "<page displayName=\"stuff\" description=\"descript\" >" + "<group displayName=\"gbox\">" + "<property id=\"" + attr1 + "\" value=\"" + str(val1) + "\" " + "displayName=\"attr1\">" + "<data>13</data>" + "<data>14</data>" + "<data>15.5</data>" + "</property>" + "<property id=\"" + attr2 + "\" value=\"" + str(val2) + "\" " + "displayName=\"attr2\">" + "<data>thirteen</data>" + "<data>fourteen</data>" + "<data>fifteen and a half</data>" + "</property>" + "<property id=\"" + attr3 + "\" value=\"" + str(val3) + "\" " + "displayName=\"attr3\">" + "<data>True</data>" + "<data>False</data>" + "<data>True</data>" + "</property>" + "<property id=\"" + attr4 + "\" value=\"" + str(val4) + "\" " + "displayName=\"attr4\" />" + "</group></page></wizard></test>") plLogger.LogInfo("input_xml: " + str(input_xml)) root = etree.fromstring(input_xml) assert root is not None key_val_dict, gui_key_val_dict = RunCmd.parse_txml_keys_values(root) assert key_val_dict is not None assert gui_key_val_dict == {} plLogger.LogInfo("key_val_dict: " + str(key_val_dict)) assert len(key_val_dict.keys()) == 4 # Check the key-value pairs (single property) assert attr4 in key_val_dict.keys() assert key_val_dict[attr4] == val4 # Check the key-value pairs (table) for exp_kv_pair in zip([attr1, attr2, attr3], [["13", "14", "15.5"], ["thirteen", "fourteen", "fifteen and a half"], ["True", "False", "True"]]): assert exp_kv_pair[0] in key_val_dict.keys() assert key_val_dict[exp_kv_pair[0]] == exp_kv_pair[1]