def test_run_integer(stc):
    ctor = CScriptableCreator()
    stc_sys = CStcSystem.Instance()
    proj = stc_sys.GetObject('Project')
    port = ctor.Create('Port', proj)
    seq = stc_sys.GetObject('Sequencer')
    # Create the traffic mix
    traf_mix = ctor.Create('StmTrafficMix', proj)
    traf_mix.Set('MixInfo',
                 '<MixInfo Load="10.0" LoadUnit="FRAMES_PER_SECOND" WeightList="" />')
    mix_elem = etree.fromstring(traf_mix.Get('MixInfo'))
    mix_elem.set('WeightList', "10.0")
    traf_mix.Set('MixInfo', etree.tostring(mix_elem))
    cmd = ctor.Create(PKG + '.AllocateTrafficMixLoad1Command', seq)
    cmd.Set('StmTrafficMix', traf_mix.GetObjectHandle())
    cmd.Set('LoadUnit', 'FRAMES_PER_SECOND')
    ret = command.run(cmd.Get('StmTrafficMix'), cmd.Get('TagName'),
                      cmd.Get('Load'), cmd.Get('LoadUnit'))
    # This will fail because we have 1 weight with zero templates
    assert False is ret
    mix_elem.set('WeightList', "15.0 25.0")
    traf_mix.Set('MixInfo', etree.tostring(mix_elem))
    tmpl_list = []
    sb_list = []
    tmpl_list.append(ctor.Create('StmTemplateConfig', traf_mix))
    sb1 = ctor.Create('StreamBlock', port)
    sb_list.append(sb1)
    tmpl_list[-1].AddObject(sb1, RelationType('GeneratedObject'))
    tmpl_list.append(ctor.Create('StmTemplateConfig', traf_mix))
    sb2 = ctor.Create('StreamBlock', port)
    sb_list.append(sb2)
    tmpl_list[-1].AddObject(sb2, RelationType('GeneratedObject'))
    ret = command.run(cmd.Get('StmTrafficMix'), cmd.Get('TagName'),
                      cmd.Get('Load'), cmd.Get('LoadUnit'))
    assert True is ret
    lp_list = [sb.GetObject('StreamBlockLoadProfile',
                            RelationType('AffiliationStreamBlockLoadProfile'))
               for sb in sb_list]
    load_list = [lp.Get('Load') for lp in lp_list]
    assert [2, 2] == load_list
    gen = port.GetObject("Generator")
    assert gen is not None
    gen_conf = gen.GetObject("GeneratorConfig")
    assert gen_conf is not None
    assert gen_conf.Get('schedulingmode') == 'RATE_BASED'
def test_run_fail_no_mix(stc):
    ctor = CScriptableCreator()
    stc_sys = CStcSystem.Instance()
    seq = stc_sys.GetObject('Sequencer')
    cmd = ctor.Create(PKG + '.AllocateTrafficMixLoad1Command', seq)
    command.get_this_cmd = MagicMock(return_value=cmd)
    ret = command.run(cmd.Get('StmTrafficMix'), cmd.Get('TagName'),
                      cmd.Get('Load'), cmd.Get('LoadUnit'))
    assert False is ret
def test_run_with_tag(stc):
    ctor = CScriptableCreator()
    stc_sys = CStcSystem.Instance()
    proj = stc_sys.GetObject('Project')
    port = ctor.Create('Port', proj)
    seq = stc_sys.GetObject('Sequencer')
    # Create the traffic mix
    traf_mix = ctor.Create('StmTrafficMix', proj)
    traf_mix.Set('MixInfo',
                 '<MixInfo Load="10.0" LoadUnit="PERCENT_LINE_RATE" WeightList="" />')
    mix_elem = etree.fromstring(traf_mix.Get('MixInfo'))
    mix_elem.set('WeightList', "10.0")
    traf_mix.Set('MixInfo', etree.tostring(mix_elem))
    tag_utils.add_tag_to_object(traf_mix, 'MixTag')
    cmd = ctor.Create(PKG + '.AllocateTrafficMixLoad1Command', seq)
    cmd.Set('TagName', 'MixTag')
    ret = command.run(cmd.Get('StmTrafficMix'), cmd.Get('TagName'),
                      cmd.Get('Load'), cmd.Get('LoadUnit'))
    # This will fail because we have 1 weight with zero templates
    assert False is ret
    mix_elem.set('WeightList', "15.0 25.0")
    traf_mix.Set('MixInfo', etree.tostring(mix_elem))
    tmpl_list = []
    sb_list = []
    tmpl_list.append(ctor.Create('StmTemplateConfig', traf_mix))
    sb1 = ctor.Create('StreamBlock', port)
    sb_list.append(sb1)
    tmpl_list[-1].AddObject(sb1, RelationType('GeneratedObject'))
    tmpl_list.append(ctor.Create('StmTemplateConfig', traf_mix))
    sb2 = ctor.Create('StreamBlock', port)
    sb_list.append(sb2)
    tmpl_list[-1].AddObject(sb2, RelationType('GeneratedObject'))
    ret = command.run(cmd.Get('StmTrafficMix'), cmd.Get('TagName'),
                      cmd.Get('Load'), cmd.Get('LoadUnit'))
    assert True is ret
    lp_list = [sb.GetObject('StreamBlockLoadProfile',
                            RelationType('AffiliationStreamBlockLoadProfile'))
               for sb in sb_list]
    load_list = [lp.Get('Load') for lp in lp_list]
    assert [1.5, 2.5] == load_list
def test_run_fail_invalid_mix(stc):
    ctor = CScriptableCreator()
    stc_sys = CStcSystem.Instance()
    proj = stc_sys.GetObject('Project')
    seq = stc_sys.GetObject('Sequencer')
    # Create the traffic mix
    traf_mix = ctor.Create('StmTrafficMix', proj)
    cmd = ctor.Create(PKG + '.AllocateTrafficMixLoad1Command', seq)
    command.get_this_cmd = MagicMock(return_value=cmd)
    cmd.Set('StmTrafficMix', traf_mix.GetObjectHandle())
    ret = command.run(cmd.Get('StmTrafficMix'), cmd.Get('TagName'),
                      cmd.Get('Load'), cmd.Get('LoadUnit'))
    assert False is ret