def test_update_template_using_src_tag_list(stc):
    test_xml = get_test_xml()
    root = etree.fromstring(test_xml)
    serial_ele_list = root.findall('.//*[@serializationBase="true"]')
    assert len(serial_ele_list) == 2

    # Empty SrcTagList
    res = ExpTmplCmd.update_template_using_src_tag_list(root, [])
    assert len(res) == 2
    tags_ele = None
    dev_ele = None
    for obj_ele in res:
        if obj_ele.tag == "EmulatedDevice":
            dev_ele = obj_ele
        elif obj_ele.tag == "Tags":
            tags_ele = obj_ele
    assert tags_ele is not None
    assert dev_ele is not None
    serial_ele_list = root.findall('.//*[@serializationBase="true"]')
    assert len(serial_ele_list) == 2
    assert tags_ele in serial_ele_list
    assert dev_ele in serial_ele_list

    # SrcTagList with invalid tag name(s)
    src_tag_list = ["InvalidTagName1", "InvalidTagName2"]
    res = ExpTmplCmd.update_template_using_src_tag_list(root, src_tag_list)
    assert len(res) == 0

    # SrcTagList with valid tag
    src_tag_list = ["Dhcpv4"]
    res = ExpTmplCmd.update_template_using_src_tag_list(root, src_tag_list)
    assert len(res) == 2

    tags_ele = None
    dhcp_ele = None
    for obj_ele in res:
        if obj_ele.tag == "Dhcpv4BlockConfig":
            dhcp_ele = obj_ele
        elif obj_ele.tag == "Tags":
            tags_ele = obj_ele
    assert tags_ele is not None
    assert dhcp_ele is not None

    # As the SrcTagList takes precedence, the elements that were originally
    # marked with serializationBase are no longer marked as such.
    serial_ele_list = root.findall('.//*[@serializationBase="true"]')
    assert len(serial_ele_list) == 2
    assert tags_ele in serial_ele_list
    assert dhcp_ele in serial_ele_list
def test_check_load_src_to_target(stc):
    # Load BgpRouterConfig on an EmulatedDevice
    bgp = etree.fromstring("<BgpRouterConfig />")
    dev = etree.fromstring("<EmulatedDevice />")
    res = ExpTmplCmd.check_load_src_to_target([bgp], "EmulatedDevice")
    assert res == ""

    # Load an Ipv4NetworkBlock and a Tag on an Ipv4Group
    net_block = etree.fromstring("<Ipv4NetworkBlock />")
    tag = etree.fromstring('<Tag name="Tag1" id="123" />')
    res = ExpTmplCmd.check_load_src_to_target([net_block, tag], "Ipv4Group")
    assert res == ""

    # Load an Ipv4NetworkBlock, a Tag, and a BgpRouterConfig
    # on an EmulatedDevice
    res = ExpTmplCmd.check_load_src_to_target([net_block, tag, bgp], "EmulatedDevice")
    assert res == ""

    # Load an EmulatedDevice on a BgpRouterConfig
    res = ExpTmplCmd.check_load_src_to_target([dev], "BgpRouterConfig")
    assert res == "BgpRouterConfig is not a valid parent " + "for EmulatedDevice."