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

    # single streamblock
    streamblocks = [ctor.Create("streamblock", port)]
    assert tsc.get_port_stream_info(port, False)["StreamBlockCount"] == 1
    assert tsc.get_port_stream_info(port, False)["StreamCount"] == 1
    assert tsc.get_port_stream_info(port, False)["FlowCount"] == 1

    # additional streamblock
    streamblocks += [ctor.Create("streamblock", port)]
    assert tsc.get_port_stream_info(port, False)["StreamBlockCount"] == 2
    assert tsc.get_port_stream_info(port, False)["StreamCount"] == 2
    assert tsc.get_port_stream_info(port, False)["FlowCount"] == 2

    # bind first stream with 100 devices
    other_port = ctor.Create("port", project)
    dev = create_devices(port, 100)
    ip = dev.GetObject("ipv4if")
    other_dev = create_devices(other_port, 100)
    other_ip = other_dev.GetObject("ipv4if")
    streamblocks[0].AddObject(ip, RelationType("srcbinding"))
    streamblocks[0].AddObject(other_ip, RelationType("dstbinding"))
    assert tsc.get_port_stream_info(port, False)["StreamBlockCount"] == 2
    assert tsc.get_port_stream_info(port, False)["StreamCount"] == 101
    assert tsc.get_port_stream_info(port, False)["FlowCount"] == 101
def test_get_port_stream_info_mod_count(stc):
    ctor = CScriptableCreator()
    project = CStcSystem.Instance().GetObject("project")
    port = ctor.Create("port", project)

    # none
    assert tsc.get_port_stream_info(port, False)["AvgModifierCount"] == 0

    # single streamblock
    streamblocks = [ctor.Create("streamblock", port)]
    assert tsc.get_port_stream_info(port, False)["AvgModifierCount"] == 0

    # add a range modifier
    range_mod = ctor.Create("rangemodifier", streamblocks[0])
    range_mod.Set("OffsetReference", "ip_1.tosDiffserv.tos")
    range_mod.Set("Mask", "1")

    assert tsc.get_port_stream_info(port, False)["AvgModifierCount"] == 1

    # add a table modifier
    ctor.Create("tablemodifier", streamblocks[0])
    assert tsc.get_port_stream_info(port, False)["AvgModifierCount"] == 2

    # add a stream block
    streamblocks += [ctor.Create("streamblock", port)]
    assert tsc.get_port_stream_info(port, False)["AvgModifierCount"] == 1

    # add another stream block
    streamblocks += [ctor.Create("streamblock", port)]
    assert (round(tsc.get_port_stream_info(port, False)["AvgModifierCount"], 2)
            == 0.67)