def test_get_port_rate_info_port_based(stc):
    ctor = CScriptableCreator()
    project = CStcSystem.Instance().GetObject("project")
    port = ctor.Create("port", project)

    # default streamblock
    ctor.Create("streamblock", port)
    assert tsc.get_port_rate_info(port, False)["FpsLoad"] == 84459
    assert tsc.get_port_rate_info(port, False)["PercentLoad"] == 10
    assert tsc.get_port_rate_info(port, False)["AvgPacketSize"] == 128

    generator = port.GetObject("generator")
    gen_config = generator.GetObject("generatorconfig")

    # set fixed port rate
    gen_config.Set("FixedLoad", 1.0)
    update_generator(generator)
    assert tsc.get_port_rate_info(port, False)["FpsLoad"] == 8445
    assert tsc.get_port_rate_info(port, False)["PercentLoad"] == 1
    assert tsc.get_port_rate_info(port, False)["AvgPacketSize"] == 128

    # set random port rate
    gen_config.Set("RandomMinLoad", 1.0)
    gen_config.Set("RandomMaxLoad", 3.0)
    gen_config.Set("LoadMode", "RANDOM")
    update_generator(generator)
    assert tsc.get_port_rate_info(port, False)["FpsLoad"] == 16891
    assert tsc.get_port_rate_info(port, False)["PercentLoad"] == 2
    assert tsc.get_port_rate_info(port, False)["AvgPacketSize"] == 128
def test_get_port_rate_info_priority_based(stc):
    ctor = CScriptableCreator()
    project = CStcSystem.Instance().GetObject("project")
    port = ctor.Create("port", project)

    # default streamblock
    streamblocks = [ctor.Create("streamblock", port)]
    assert round(tsc.get_port_rate_info(port, False)["FpsLoad"], 0) == 84459
    assert tsc.get_port_rate_info(port, False)["PercentLoad"] == 10
    assert (round(tsc.get_port_rate_info(port, False)["AvgPacketSize"], 2)
            == 128)

    generator = port.GetObject("generator")
    gen_config = generator.GetObject("generatorconfig")

    # set fixed port rate - should be ignored
    gen_config.Set("FixedLoad", 1.0)

    # priority mode -- until it's oversubscribed, the same as rate mode
    gen_config.Set("SchedulingMode", "PRIORITY_BASED")
    streamblocks[0].Set("Load", 3.0)
    update_generator(generator)
    assert round(tsc.get_port_rate_info(port, False)["FpsLoad"], 0) == 25338
    assert tsc.get_port_rate_info(port, False)["PercentLoad"] == 3
    assert (round(tsc.get_port_rate_info(port, False)["AvgPacketSize"], 2)
            == 128)

    # inactive streamblock
    streamblocks += [ctor.Create("streamblock", port)]
    streamblocks[1].Set("Active", False)
    assert round(tsc.get_port_rate_info(port, False)["FpsLoad"], 0) == 25338
    assert tsc.get_port_rate_info(port, False)["PercentLoad"] == 3
    assert (round(tsc.get_port_rate_info(port, False)["AvgPacketSize"], 2)
            == 128)

    # two active streamblocks
    streamblocks[1].Set("Active", True)
    streamblocks[1].Set("Load", 2.0)
    update_generator(generator)
    assert round(tsc.get_port_rate_info(port, False)["FpsLoad"], 0) == 42230
    assert tsc.get_port_rate_info(port, False)["PercentLoad"] == 5
    assert (round(tsc.get_port_rate_info(port, False)["AvgPacketSize"], 2)
            == 128)

    # different lengths
    streamblocks[0].Set("FixedFrameLength", 168)
    update_generator(generator)
    assert round(tsc.get_port_rate_info(port, False)["FpsLoad"], 0) == 36839
    assert tsc.get_port_rate_info(port, False)["PercentLoad"] == 5
    assert (round(tsc.get_port_rate_info(port, False)["AvgPacketSize"], 2)
            == 149.66)

    # random lengths
    streamblocks[0].Set("FrameLengthMode", "INCR")
    streamblocks[0].Set("MinFrameLength", 64)
    streamblocks[0].Set("MaxFrameLength", 1024)
    update_generator(generator)
    assert round(tsc.get_port_rate_info(port, False)["FpsLoad"], 0) == 23541
    assert tsc.get_port_rate_info(port, False)["PercentLoad"] == 5
    assert (round(tsc.get_port_rate_info(port, False)["AvgPacketSize"], 2)
            == 245.5)
    streamblocks[0].Set("FrameLengthMode", "FIXED")

    # oversubscribe first streamblock - second one not sent
    streamblocks[0].Set("Load", 101.0)
    update_generator(generator)
    assert round(tsc.get_port_rate_info(port, False)["FpsLoad"], 0) == 664894
    assert tsc.get_port_rate_info(port, False)["PercentLoad"] == 100
    assert (round(tsc.get_port_rate_info(port, False)["AvgPacketSize"], 2)
            == 168)

    # oversubscribe second streamblock - first still sent
    streamblocks[0].Set("Load", 50.0)
    streamblocks[1].Set("Load", 100.0)
    update_generator(generator)
    assert round(tsc.get_port_rate_info(port, False)["FpsLoad"], 0) == 754744
    assert tsc.get_port_rate_info(port, False)["PercentLoad"] == 100
    assert (round(tsc.get_port_rate_info(port, False)["AvgPacketSize"], 2)
            == 145.62)
def test_get_port_rate_info_rate_based(stc):
    ctor = CScriptableCreator()
    project = CStcSystem.Instance().GetObject("project")
    port = ctor.Create("port", project)

    # default streamblock
    streamblocks = [ctor.Create("streamblock", port)]
    assert tsc.get_port_rate_info(port, False)["FpsLoad"] == 84459
    assert tsc.get_port_rate_info(port, False)["PercentLoad"] == 10
    assert tsc.get_port_rate_info(port, False)["AvgPacketSize"] == 128

    generator = port.GetObject("generator")
    gen_config = generator.GetObject("generatorconfig")

    # set fixed port rate - should be ignored
    gen_config.Set("FixedLoad", 1.0)

    # set block rate
    gen_config.Set("SchedulingMode", "RATE_BASED")
    streamblocks[0].Set("Load", 3.0)
    update_generator(generator)
    assert round(tsc.get_port_rate_info(port, False)["FpsLoad"], 0) == 25338
    assert tsc.get_port_rate_info(port, False)["PercentLoad"] == 3
    assert (round(tsc.get_port_rate_info(port, False)["AvgPacketSize"], 2)
            == 128)

    # inactive streamblock
    streamblocks += [ctor.Create("streamblock", port)]
    streamblocks[1].Set("Active", False)
    assert round(tsc.get_port_rate_info(port, False)["FpsLoad"], 0) == 25338
    assert tsc.get_port_rate_info(port, False)["PercentLoad"] == 3
    assert (round(tsc.get_port_rate_info(port, False)["AvgPacketSize"], 2)
            == 128)

    # two active streamblocks
    streamblocks[1].Set("Active", True)
    streamblocks[1].Set("Load", 2.0)
    update_generator(generator)
    assert round(tsc.get_port_rate_info(port, False)["FpsLoad"], 0) == 42230
    assert tsc.get_port_rate_info(port, False)["PercentLoad"] == 5
    assert (round(tsc.get_port_rate_info(port, False)["AvgPacketSize"], 2)
            == 128)

    # different lengths
    streamblocks[0].Set("FixedFrameLength", 168)
    update_generator(generator)
    assert round(tsc.get_port_rate_info(port, False)["FpsLoad"], 0) == 36839
    assert tsc.get_port_rate_info(port, False)["PercentLoad"] == 5
    assert (round(tsc.get_port_rate_info(port, False)["AvgPacketSize"], 2)
            == 149.66)

    # random lengths
    streamblocks[0].Set("FrameLengthMode", "INCR")
    streamblocks[0].Set("MinFrameLength", 64)
    streamblocks[0].Set("MaxFrameLength", 1024)
    update_generator(generator)
    assert round(tsc.get_port_rate_info(port, False)["FpsLoad"], 0) == 23541
    assert tsc.get_port_rate_info(port, False)["PercentLoad"] == 5
    assert (round(tsc.get_port_rate_info(port, False)["AvgPacketSize"], 2)
            == 245.5)