def test_on_complete(stc):
    sequencer = CStcSystem.Instance().GetObject("Sequencer")
    project = CStcSystem.Instance().GetObject("Project")
    ctor = CScriptableCreator()
    proto_mix = ctor.Create("StmProtocolMix", project)
    proto_mix.Set("MixInfo", get_example_mix_info())
    cmd = ctor.Create(PKG + ".CreateProtocolMixCommand", sequencer)
    cmd.Set("MixInfo", get_example_mix_info())
    cmd.Set("MixTagName", "test_StmProtoMix")
    cmd.SetCollection("PortGroupTagList", ["port group tag"])
    cmd.Set("StmTemplateMix", proto_mix.GetObjectHandle())
    cmd.Set("AutoExpandTemplateMix", False)
    CreateProtoMixCmd.get_this_cmd = MagicMock(return_value=cmd)
    CreateProtoMixCmd.on_complete([])

    # Check the MixInfo
    mi = proto_mix.Get("MixInfo")
    err_str, mi_dict = json_utils.load_json(mi)
    assert err_str == ""
    assert "deviceCount" in mi_dict.keys()
    assert mi_dict["deviceCount"] == 100
    assert "components" in mi_dict.keys()
    ti_count = 0
    for item in mi_dict["components"]:
        assert "weight" in item.keys()
        assert item["weight"] == "12.1 %"
        assert "devicesPerBlock" in item.keys()
        assert item["devicesPerBlock"] == 0
        assert "baseTemplateFile" in item.keys()
        assert item["baseTemplateFile"] == "IPv4_NoVlan.xml"
        ti_count = ti_count + 1
    assert ti_count == 1
def test_on_complete_multi_row(stc):
    sequencer = CStcSystem.Instance().GetObject("Sequencer")
    project = CStcSystem.Instance().GetObject("Project")
    ctor = CScriptableCreator()
    plLogger = PLLogger.GetLogger("methodology")
    plLogger.LogInfo("start_test_on_complete_multi_row")

    # Create MixInfo with multiple rows
    err_str, mix_info = json_utils.load_json(get_example_mix_info())
    assert err_str == ""
    components = mix_info["components"]

    # Duplicate row 4x and change weight
    row_template = components[0]
    row_1 = dict.copy(row_template)
    row_1["weight"] = "50.0 %"
    row_2 = dict.copy(row_template)
    row_2["weight"] = "25.0 %"
    row_3 = dict.copy(row_template)
    row_3["weight"] = "15.0 %"
    row_4 = dict.copy(row_template)
    row_4["weight"] = "10.0 %"

    mix_info["components"] = [row_1, row_2, row_3, row_4]
    proto_mix = ctor.Create("StmProtocolMix", project)
    proto_mix.Set("MixInfo", str(json.dumps(mix_info)))
    cmd = ctor.Create(PKG + ".CreateProtocolMixCommand", sequencer)
    cmd.Set("MixInfo", str(mix_info))
    cmd.Set("MixTagName", "test_StmProtoMix_multirows")
    cmd.SetCollection("PortGroupTagList", ["port group tag"])
    cmd.Set("StmTemplateMix", proto_mix.GetObjectHandle())
    cmd.Set("AutoExpandTemplateMix", False)
    CreateProtoMixCmd.get_this_cmd = MagicMock(return_value=cmd)
    CreateProtoMixCmd.on_complete([])

    # Check the MixInfo
    mi = proto_mix.Get("MixInfo")
    err_str, mi_dict = json_utils.load_json(mi)
    assert err_str == ""
    plLogger.LogInfo("mi: " + str(mi))
    plLogger.LogInfo("mi_dict: " + str(mi_dict))
    assert "deviceCount" in mi_dict.keys()
    assert mi_dict["deviceCount"] == 100
    assert "components" in mi_dict.keys()
    assert len(mi_dict["components"]) == 4
    a_row_1 = mi_dict["components"][0]
    assert a_row_1["weight"] == "50.0 %"
    a_row_2 = mi_dict["components"][1]
    assert a_row_2["weight"] == "25.0 %"
    a_row_3 = mi_dict["components"][2]
    assert a_row_3["weight"] == "15.0 %"
    a_row_4 = mi_dict["components"][3]
    assert a_row_4["weight"] == "10.0 %"