Ejemplo n.º 1
0
    def test_SetReadOnlyAttribute(self, dvs, testlog):

        db = swsscommon.DBConnector(swsscommon.ASIC_DB, dvs.redis_sock, 0)

        tbl = swsscommon.Table(db, "ASIC_STATE:SAI_OBJECT_TYPE_SWITCH")

        keys = tbl.getKeys()

        assert len(keys) == 1

        swVid = keys[0]

        r = redis.Redis(unix_socket_path=dvs.redis_sock, db=swsscommon.ASIC_DB)

        swRid = r.hget("VIDTORID", swVid)

        assert swRid is not None

        ntf = swsscommon.NotificationProducer(db, "SAI_VS_UNITTEST_CHANNEL")

        fvp = swsscommon.FieldValuePairs()

        ntf.send("enable_unittests", "true", fvp)

        fvp = swsscommon.FieldValuePairs([('SAI_SWITCH_ATTR_PORT_MAX_MTU',
                                           '42')])

        key = "SAI_OBJECT_TYPE_SWITCH:" + swRid

        print key

        ntf.send("set_ro", key, fvp)
Ejemplo n.º 2
0
    def update_bfd_session_state(self, dvs, session, state):
        bfd_sai_state = {
            "Admin_Down": "SAI_BFD_SESSION_STATE_ADMIN_DOWN",
            "Down": "SAI_BFD_SESSION_STATE_DOWN",
            "Init": "SAI_BFD_SESSION_STATE_INIT",
            "Up": "SAI_BFD_SESSION_STATE_UP"
        }

        ntf = swsscommon.NotificationProducer(dvs.adb, "NOTIFICATIONS")
        fvp = swsscommon.FieldValuePairs()
        ntf_data = "[{\"bfd_session_id\":\"" + session + "\",\"session_state\":\"" + bfd_sai_state[
            state] + "\"}]"
        ntf.send("bfd_session_state_change", ntf_data, fvp)
Ejemplo n.º 3
0
    def set_counter(self, dvs, obj_type, obj_id, attr, val):

        db = swsscommon.DBConnector(swsscommon.ASIC_DB, dvs.redis_sock, 0)
        ntf = swsscommon.NotificationProducer(db, "SAI_VS_UNITTEST_CHANNEL")

        r = redis.Redis(unix_socket_path=dvs.redis_sock, db=swsscommon.ASIC_DB)
        rid = r.hget("VIDTORID", obj_id)

        assert rid is not None

        fvp = swsscommon.FieldValuePairs([(attr, val)])
        key = rid

        ntf.send("set_stats", key, fvp)
Ejemplo n.º 4
0
def test_Notification():
    db = swsscommon.DBConnector("APPL_DB", 0, True)
    ntfc = swsscommon.NotificationConsumer(db, "testntf")
    sel = swsscommon.Select()
    sel.addSelectable(ntfc)
    fvs = swsscommon.FieldValuePairs([('a', 'b')])
    ntfp = swsscommon.NotificationProducer(db, "testntf")
    ntfp.send("aaa", "bbb", fvs)
    (state, c) = sel.select()
    assert state == swsscommon.Select.OBJECT
    (op, data, cfvs) = ntfc.pop()
    assert op == "aaa"
    assert data == "bbb"
    assert len(cfvs) == 1
    assert cfvs[0] == ('a', 'b')
Ejemplo n.º 5
0
    def set_counter(self, dvs, obj_type, obj_id, attr, val):

        db = swsscommon.DBConnector(swsscommon.ASIC_DB, dvs.redis_sock, 0)
        ntf = swsscommon.NotificationProducer(db, "SAI_VS_UNITTEST_CHANNEL")

        r = redis.Redis(unix_socket_path=dvs.redis_sock, db=swsscommon.ASIC_DB,
                        encoding="utf-8", decode_responses=True)
        rid = r.hget("VIDTORID", obj_id)

        assert rid is not None

        fvp = swsscommon.FieldValuePairs([(attr, val)])
        key = rid

        # explicit convert unicode string to str for python2
        ntf.send("set_stats", str(key), fvp)
Ejemplo n.º 6
0
    def setReadOnlyAttr(self, obj, attr, val):
        db = swsscommon.DBConnector(swsscommon.ASIC_DB, self.redis_sock, 0)
        tbl = swsscommon.Table(db, "ASIC_STATE:{0}".format(obj))
        keys = tbl.getKeys()

        assert len(keys) == 1

        swVid = keys[0]
        r = redis.Redis(unix_socket_path=self.redis_sock, db=swsscommon.ASIC_DB)
        swRid = r.hget("VIDTORID", swVid)

        assert swRid is not None

        ntf = swsscommon.NotificationProducer(db, "SAI_VS_UNITTEST_CHANNEL")
        fvp = swsscommon.FieldValuePairs()
        ntf.send("enable_unittests", "true", fvp)
        fvp = swsscommon.FieldValuePairs([(attr, val)])
        key = "SAI_OBJECT_TYPE_SWITCH:" + swRid

        ntf.send("set_ro", key, fvp)
Ejemplo n.º 7
0
 def enable_unittests(self, dvs, status):
     db = swsscommon.DBConnector(swsscommon.ASIC_DB, dvs.redis_sock, 0)
     ntf = swsscommon.NotificationProducer(db, "SAI_VS_UNITTEST_CHANNEL")
     fvp = swsscommon.FieldValuePairs()
     ntf.send("enable_unittests", status, fvp)
Ejemplo n.º 8
0
def test_evpnFdbP2MP(dvs, testlog):
    vxlan_obj = VxlanTunnel()
    helper = VxlanEvpnHelper()
    dvs.setup_db()

    dvs.clear_fdb()
    time.sleep(2)

    #Find switch_id
    switch_id = dvs.getSwitchOid()
    print("Switch_id=" + str(switch_id))

    vlan_before = helper.how_many_entries_exist(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_VLAN")

    # create vlan
    print("Creating Vlan3")
    dvs.create_vlan("3")
    time.sleep(2)

    vlan_after = helper.how_many_entries_exist(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_VLAN")
    assert vlan_after - vlan_before == 1, "The Vlan3 wasn't created"
    print("Vlan3 is created")

    # Find the vlan_oid to be used in DB communications
    vlan_oid_3 = dvs.getVlanOid("3")
    assert vlan_oid_3 is not None, "Could not find Vlan_oid"
    print("Vlan-3 vlan_oid=" + str(vlan_oid_3))

    bp_before = helper.how_many_entries_exist(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_BRIDGE_PORT")
    vm_before = helper.how_many_entries_exist(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_VLAN_MEMBER")

    print("Making Ethernet0 as a member of Vlan3")
    dvs.create_vlan_member("3", "Ethernet0")
    time.sleep(2)

    # check that the vlan information was propagated
    bp_after = helper.how_many_entries_exist(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_BRIDGE_PORT")
    vm_after = helper.how_many_entries_exist(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_VLAN_MEMBER")

    assert bp_after - bp_before == 1, "The bridge port wasn't created"
    assert vm_after - vm_before == 1, "The vlan member wasn't added"
    print("Ethernet0 is a member of Vlan3")

    # Get mapping between interface name and its bridge port_id
    iface_2_bridge_port_id = dvs.get_map_iface_bridge_port_id(dvs.adb)

    #create SIP side of tunnel
    source_tnl_name = "source_vtep_name"
    source_tnl_ip = "7.7.7.7"
    vxlan_obj.create_vxlan_tunnel(dvs, source_tnl_name, source_tnl_ip)
    time.sleep(1)

    nvo_name = "evpn_nvo"
    vxlan_obj.create_evpn_nvo(dvs, nvo_name, source_tnl_name)
    time.sleep(1)

    map_name_vlan_3 = "map_3_3"
    vxlan_obj.create_vxlan_tunnel_map(dvs, source_tnl_name, map_name_vlan_3,
                                      "3", "Vlan3")
    time.sleep(1)

    remote_ip_6 = "6.6.6.6"
    vxlan_obj.create_evpn_remote_vni(dvs, "Vlan3", remote_ip_6, "3")
    remote_ip_8 = "8.8.8.8"
    vxlan_obj.create_evpn_remote_vni(dvs, "Vlan3", remote_ip_8, "3")
    time.sleep(1)

    #UT-1 Evpn Mac add from remote when tunnels are already created
    mac = "52:54:00:25:06:E9"
    print("Creating Evpn FDB Vlan3:" + mac.lower() + ":6.6.6.6 in APP-DB")
    helper.create_entry_pst(dvs.pdb, "VXLAN_FDB_TABLE", "Vlan3:" + mac.lower(),
                            [("remote_vtep", remote_ip_6), ("type", "dynamic"),
                             ("vni", "3")])
    time.sleep(1)

    tnl_bp_oid_6 = get_vxlan_p2mp_tunnel_bp(dvs.adb, source_tnl_ip)

    # check that the FDB entry is inserted into ASIC DB
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", mac), ("bvid", vlan_oid_3)], [
            ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC"),
            ("SAI_FDB_ENTRY_ATTR_ALLOW_MAC_MOVE", "true"),
            ("SAI_FDB_ENTRY_ATTR_ENDPOINT_IP", remote_ip_6),
            ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", str(tnl_bp_oid_6)),
        ])
    assert ok == True, str(extra)
    print("EVPN FDB Vlan3:" + mac.lower() + ":" + remote_ip_6 +
          " is created in ASIC-DB")

    time.sleep(1)

    #UT-2 Evpn Mac del from remote
    mac = "52:54:00:25:06:E9"
    print("Deleting Evpn FDB Vlan3:" + mac.lower() + ":6.6.6.6 in APP-DB")
    helper.delete_entry_pst(dvs.pdb, "VXLAN_FDB_TABLE", "Vlan3:" + mac.lower())
    time.sleep(1)

    # check that the FDB entry is deleted from ASIC DB
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", mac), ("bvid", vlan_oid_3)], [
            ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC"),
            ("SAI_FDB_ENTRY_ATTR_ALLOW_MAC_MOVE", "true"),
            ("SAI_FDB_ENTRY_ATTR_ENDPOINT_IP", remote_ip_6),
            ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", str(tnl_bp_oid_6)),
        ])
    assert ok == False, str(extra)
    print("EVPN FDB Vlan3:" + mac.lower() + ":" + remote_ip_6 +
          " is deleted from ASIC-DB")

    time.sleep(1)

    #UT-3 Evpn Mac add from remote when local mac is already present
    mac = "52:54:00:25:06:E9"

    print("Creating Local dynamic FDB Vlan3:" + mac.lower() +
          ":Ethernet0 in APP-DB")
    # Create Dynamic MAC entry in APP DB
    helper.create_entry_pst(dvs.pdb, "FDB_TABLE", "Vlan3:" + mac.lower(), [
        ("port", "Ethernet0"),
        ("type", "dynamic"),
    ])

    time.sleep(1)

    # check that the FDB entry was added in ASIC DB
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", mac), ("bvid", vlan_oid_3)],
        [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"),
         ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID",
          iface_2_bridge_port_id["Ethernet0"])])
    assert ok, str(extra)
    print("Dynamic FDB Vlan3:" + mac.lower() +
          ":Ethernet0 is created in Asic-DB")

    # check that the FDB entry was added in STATE DB
    mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE",
                                                  "Vlan3:" + mac.lower(), [
                                                      ("port", "Ethernet0"),
                                                      ("type", "dynamic"),
                                                  ])
    assert mac1_found, str(extra)
    print("FDB Vlan3:" + mac + ":Ethernet0 is created in STATE-DB")

    print("Creating Evpn FDB Vlan3:" + mac.lower() + ":6.6.6.6 in APP-DB")
    helper.create_entry_pst(dvs.pdb, "VXLAN_FDB_TABLE", "Vlan3:" + mac.lower(),
                            [("remote_vtep", remote_ip_6), ("type", "dynamic"),
                             ("vni", "3")])
    time.sleep(1)

    # check that the FDB entry is inserted into ASIC DB
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", mac), ("bvid", str(dvs.getVlanOid("3")))], [
            ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC"),
            ("SAI_FDB_ENTRY_ATTR_ALLOW_MAC_MOVE", "true"),
            ("SAI_FDB_ENTRY_ATTR_ENDPOINT_IP", remote_ip_6),
            ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", str(tnl_bp_oid_6)),
        ])
    assert ok, str(extra)
    print("EVPN FDB Vlan3:" + mac.lower() + ":" + remote_ip_6 +
          " is created in ASIC-DB")

    # check that the Local FDB entry is deleted from STATE DB
    mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE",
                                                  "Vlan3:" + mac.lower(), [
                                                      ("port", "Ethernet0"),
                                                      ("type", "dynamic"),
                                                  ])
    assert mac1_found == False, str(extra)
    print("FDB Vlan3:" + mac + ":Ethernet0 is deleted from STATE-DB")

    time.sleep(1)

    #UT-4 Evpn Sticky Mac add from remote
    mac = "52:54:00:25:06:E9"
    print("Creating Evpn Sticky FDB Vlan3:" + mac.lower() +
          ":6.6.6.6 in APP-DB")
    helper.create_entry_pst(dvs.pdb, "VXLAN_FDB_TABLE", "Vlan3:" + mac.lower(),
                            [("remote_vtep", remote_ip_6), ("type", "static"),
                             ("vni", "3")])
    time.sleep(1)

    # check that the FDB entry is inserted into ASIC DB
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", mac), ("bvid", str(dvs.getVlanOid("3")))], [
            ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC"),
            ("SAI_FDB_ENTRY_ATTR_ENDPOINT_IP", remote_ip_6),
            ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", str(tnl_bp_oid_6)),
        ])
    assert ok, str(extra)
    print("EVPN Sticky FDB Vlan3:" + mac.lower() + ":" + remote_ip_6 +
          " is created in ASIC-DB")

    #UT-8 Evpn Mac add from remote when tunnels are already created
    mac = "52:54:00:25:06:E9"
    print("Creating Evpn FDB Vlan3:" + mac.lower() + ":6.6.6.6 in APP-DB")
    helper.create_entry_pst(dvs.pdb, "VXLAN_FDB_TABLE", "Vlan3:" + mac.lower(),
                            [("remote_vtep", remote_ip_6), ("type", "dynamic"),
                             ("vni", "3")])
    time.sleep(1)

    # check that the FDB entry is inserted into ASIC DB
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", mac), ("bvid", vlan_oid_3)], [
            ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC"),
            ("SAI_FDB_ENTRY_ATTR_ALLOW_MAC_MOVE", "true"),
            ("SAI_FDB_ENTRY_ATTR_ENDPOINT_IP", remote_ip_6),
            ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", str(tnl_bp_oid_6)),
        ])
    assert ok == True, str(extra)
    print("EVPN FDB Vlan3:" + mac.lower() + ":" + remote_ip_6 +
          " is created in ASIC-DB")

    time.sleep(1)

    tnl_bp_oid_8 = get_vxlan_p2mp_tunnel_bp(dvs.adb, source_tnl_ip)

    print("Creating Evpn FDB Vlan3:" + mac.lower() + ":8.8.8.8 in APP-DB")
    helper.create_entry_pst(dvs.pdb, "VXLAN_FDB_TABLE", "Vlan3:" + mac.lower(),
                            [("remote_vtep", remote_ip_8), ("type", "dynamic"),
                             ("vni", "3")])
    time.sleep(1)

    # check that the FDB entry is inserted into ASIC DB
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", mac), ("bvid", vlan_oid_3)], [
            ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC"),
            ("SAI_FDB_ENTRY_ATTR_ALLOW_MAC_MOVE", "true"),
            ("SAI_FDB_ENTRY_ATTR_ENDPOINT_IP", remote_ip_8),
            ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", str(tnl_bp_oid_8)),
        ])
    assert ok == True, str(extra)
    print("EVPN FDB Vlan3:" + mac.lower() + ":" + remote_ip_8 +
          " is created in ASIC-DB")

    time.sleep(1)

    #UT-9 Local mac move (delete and learn) when remote is already added
    mac = "52:54:00:25:06:E9"
    print("Deleting FDB Vlan3:52-54-00-25-06-E9:8.8.8.8 in ASIC-DB")
    helper.delete_entry_tbl(
        dvs.adb, "ASIC_STATE",
        "SAI_OBJECT_TYPE_FDB_ENTRY:{\"bvid\":\"" + vlan_oid_3 +
        "\",\"mac\":\"" + mac + "\",\"switch_id\":\"" + switch_id + "\"}")

    ntf = swsscommon.NotificationProducer(dvs.adb, "NOTIFICATIONS")
    fvp = swsscommon.FieldValuePairs()
    ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_3 + "\\\",\\\"mac\\\":\\\"" + mac + "\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_AGED\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + str(
        tnl_bp_oid_8) + "\"}]}]"
    ntf.send("fdb_event", ntf_data, fvp)

    time.sleep(2)

    print("Creating FDB Vlan3:52-54-00-25-06-E9:Ethernet0 in ASIC-DB")
    helper.create_entry_tbl(
        dvs.adb, "ASIC_STATE", "SAI_OBJECT_TYPE_FDB_ENTRY:{\"bvid\":\"" +
        vlan_oid_3 + "\",\"mac\":\"52:54:00:25:06:E9\",\"switch_id\":\"" +
        switch_id + "\"}", [
            ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"),
            ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID",
             iface_2_bridge_port_id["Ethernet0"]),
        ])

    ntf = swsscommon.NotificationProducer(dvs.adb, "NOTIFICATIONS")
    fvp = swsscommon.FieldValuePairs()
    ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_3 + "\\\",\\\"mac\\\":\\\"52:54:00:25:06:E9\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_LEARNED\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + iface_2_bridge_port_id[
        "Ethernet0"] + "\"}]}]"
    ntf.send("fdb_event", ntf_data, fvp)

    time.sleep(2)

    # check that the FDB entry was added in ASIC DB
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", "52:54:00:25:06:E9"), ("bvid", vlan_oid_3)],
        [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"),
         ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID",
          iface_2_bridge_port_id["Ethernet0"])])
    assert ok, str(extra)
    print("FDB Vlan3:52-54-00-25-06-E9:Ethernet0 is created in ASIC-DB")

    # check that the FDB entry was added in STATE DB
    mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE",
                                                  "Vlan3:52:54:00:25:06:e9", [
                                                      ("port", "Ethernet0"),
                                                      ("type", "dynamic"),
                                                  ])
    assert mac1_found, str(extra)
    print("FDB Vlan3:52-54-00-25-06-E9:Ethernet0 is created in STATE-DB")

    dvs.remove_vlan_member("3", "Ethernet0")
    dvs.remove_vlan("3")
Ejemplo n.º 9
0
def test_negativeFDB(dvs, testlog):
    dvs.setup_db()

    #dvs.runcmd("sonic-clear fdb all")
    time.sleep(2)

    #Find switch_id
    switch_id = dvs.getSwitchOid()
    print("Switch_id=" + str(switch_id))

    vlan_before = how_many_entries_exist(dvs.adb,
                                         "ASIC_STATE:SAI_OBJECT_TYPE_VLAN")
    bp_before = how_many_entries_exist(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_BRIDGE_PORT")
    vm_before = how_many_entries_exist(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_VLAN_MEMBER")

    # create vlan
    dvs.create_vlan("2")
    dvs.create_vlan_member("2", "Ethernet0")
    dvs.create_vlan_member("2", "Ethernet4")
    # Find the vlan_oid_2 to be used in DB communications
    vlan_oid_2 = dvs.getVlanOid("2")
    assert vlan_oid_2 is not None, "Could not find Vlan_oid"
    print("VLan-2 vlan_oid=" + str(vlan_oid_2))

    # create vlan
    dvs.create_vlan("4")
    dvs.create_vlan_member("4", "Ethernet8")
    # Find the vlan_oid_4 to be used in DB communications
    vlan_oid_4 = dvs.getVlanOid("4")
    assert vlan_oid_4 is not None, "Could not find Vlan_oid"
    print("VLan-4 vlan_oid=" + str(vlan_oid_4))

    dvs.create_vlan("10")
    dvs.create_vlan_member("10", "Ethernet12")
    # Find the vlan_oid_10 to be used in DB communications
    vlan_oid_10 = dvs.getVlanOid("10")
    assert vlan_oid_10 is not None, "Could not find Vlan_oid"
    print("VLan-10 vlan_oid=" + str(vlan_oid_10))

    # check that the vlan information was propagated
    vlan_after = how_many_entries_exist(dvs.adb,
                                        "ASIC_STATE:SAI_OBJECT_TYPE_VLAN")
    bp_after = how_many_entries_exist(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_BRIDGE_PORT")
    vm_after = how_many_entries_exist(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_VLAN_MEMBER")

    assert vlan_after - vlan_before == 3, "The Vlan2/Vlan4 wasn't created"
    assert bp_after - bp_before == 4, "The bridge port wasn't created"
    assert vm_after - vm_before == 4, "The vlan member wasn't added"

    # Get mapping between interface name and its bridge port_id
    iface_2_bridge_port_id = dvs.get_map_iface_bridge_port_id(dvs.adb)

    #dvs.runcmd("swssloglevel -l DEBUG -c orchagent")
    #dvs.runcmd("swssloglevel -l DEBUG -c vlanmgrd")

    print("NEG1 - Add MAC address to an out of range vlan and later delete it")
    mac = "52:54:00:25:06:E9"
    #dvs.runcmd("config mac add " + mac.lower() + " 3 Ethernet0")
    print("ACTION: Creating static FDB Vlan33333|" + mac.lower() +
          "|Ethernet0 in CONFIG-DB")
    create_entry_tbl(dvs.cdb, "FDB", "Vlan33333|" + mac.lower(), [
        ("port", "Ethernet0"),
    ])
    time.sleep(2)

    # check that the FDB entry was added in Config DB
    print("CHECK: Static FDB Vlan33333:" + mac.lower() +
          ":Ethernet0 is created in Config-DB")
    mac1_found, extra = dvs.is_table_entry_exists(dvs.cdb, "FDB",
                                                  "Vlan33333\|" + mac.lower(),
                                                  [("port", "Ethernet0")])
    assert mac1_found, str(extra)
    print("CONFIRM: Static FDB Vlan33333:" + mac.lower() +
          ":Ethernet0 is created in Config-DB")

    # check that the FDB entry was not added in APP DB
    print("CHECK: Static FDB Vlan33333:" + mac.lower() +
          ":Ethernet0 is not created in APP-DB")
    mac1_found, extra = dvs.is_table_entry_exists(dvs.pdb, "FDB_TABLE",
                                                  "Vlan33333:" + mac.lower(), [
                                                      ("port", "Ethernet0"),
                                                      ("type", "static"),
                                                  ])
    assert mac1_found == False, str(extra)
    print("CONFIRM: Static FDB Vlan33333:" + mac.lower() +
          ":Ethernet0 is not created in APP-DB")

    print("ACTION: Deleting Static FDB Vlan33333:" + mac.lower() +
          ":Ethernet0")
    remove_entry_tbl(dvs.cdb, "FDB", "Vlan33333|" + mac.lower())
    time.sleep(2)

    #Check the mac is removed from config-db
    print("CHECK: Static FDB Vlan33333:" + mac.lower() +
          ":Ethernet0 is deleted from Config-DB")
    mac1_found, extra = dvs.is_table_entry_exists(dvs.cdb, "FDB",
                                                  "Vlan33333\|" + mac.lower(),
                                                  [("port", "Ethernet0")])
    assert mac1_found == False, str(extra)
    print("CONFIRM: Static FDB Vlan33333:" + mac.lower() +
          ":Ethernet0 is deleted from Config-DB")

    print(
        "NEG2 - Add MAC address to a vlan which does not exist and later delete it"
    )
    mac = "52:54:00:25:06:E9"
    #dvs.runcmd("config mac add " + mac.lower() + " 3 Ethernet0")
    print("ACTION: Creating static FDB Vlan3:" + mac.lower() +
          ":Ethernet0 in CONFIG-DB")
    create_entry_tbl(dvs.cdb, "FDB", "Vlan3|" + mac.lower(), [
        ("port", "Ethernet0"),
    ])
    time.sleep(2)

    # check that the FDB entry was added in Config DB
    print("CHECK: Static FDB Vlan3:" + mac.lower() +
          ":Ethernet0 is created in Config-DB")
    mac1_found, extra = dvs.is_table_entry_exists(dvs.cdb, "FDB",
                                                  "Vlan3\|" + mac.lower(),
                                                  [("port", "Ethernet0")])
    assert mac1_found, str(extra)
    print("CONFIRM: Static FDB Vlan3:" + mac.lower() +
          ":Ethernet0 is created in Config-DB")

    # check that the FDB entry was added in APP DB
    print("CHECK: Static FDB Vlan3:" + mac.lower() +
          ":Ethernet0 is created in APP-DB")
    mac1_found, extra = dvs.is_table_entry_exists(dvs.pdb, "FDB_TABLE",
                                                  "Vlan3:" + mac.lower(), [
                                                      ("port", "Ethernet0"),
                                                      ("type", "static"),
                                                  ])
    assert mac1_found, str(extra)
    print("CONFIRM: Static FDB Vlan3:" + mac.lower() +
          ":Ethernet0 is created in APP-DB")

    # check that the FDB entry is not inserted into ASIC DB
    print("CHECK: Static FDB Vlan3:" + mac.lower() +
          ":Ethernet0 is not created in ASIC-DB")
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", mac.lower())],
        [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC")])
    assert ok == False, str(extra)
    print("CONFIRM: Static FDB Vlan3:" + mac.lower() +
          ":Ethernet0 is not created in ASIC-DB")

    print("ACTION: Deleting Static FDB Vlan3:" + mac.lower() + "Ethernet0")
    remove_entry_tbl(dvs.cdb, "FDB", "Vlan3|" + mac.lower())
    time.sleep(2)

    #Check the mac is removed from config-db
    print("CHECK: Static FDB Vlan3:" + mac.lower() +
          ":Ethernet0 is deleted from Config-DB")
    mac1_found, extra = dvs.is_table_entry_exists(dvs.cdb, "FDB",
                                                  "Vlan3\|" + mac.lower(),
                                                  [("port", "Ethernet0")])
    assert mac1_found == False, str(extra)
    print("CONFIRM: Static FDB Vlan3:" + mac.lower() +
          ":Ethernet0 is deleted from Config-DB")

    # check that the FDB entry is removed from APP DB
    print("CHECK: Static FDB Vlan3:" + mac.lower() +
          ":Ethernet0 is deleted from APP-DB")
    mac1_found, extra = dvs.is_table_entry_exists(dvs.pdb, "FDB_TABLE",
                                                  "Vlan3:" + mac.lower(), [
                                                      ("port", "Ethernet0"),
                                                      ("type", "static"),
                                                  ])
    assert mac1_found == False, str(extra)
    print("CONFIRM: Static FDB Vlan3:" + mac.lower() +
          ":Ethernet0 is deleted from APP-DB")

    print(
        "NEG3 - Add MAC address to an invalid port which does not exist and later delete it"
    )
    mac = "52:54:00:25:06:E9"
    #dvs.runcmd("config mac add " + mac.lower() + " 3 Ethernet0")
    print("ACTION: Creating static FDB Vlan2:" + mac.lower() +
          ":Port0 in CONFIG-DB")
    create_entry_tbl(dvs.cdb, "FDB", "Vlan2|" + mac.lower(), [
        ("port", "Port0"),
    ])
    time.sleep(2)

    # check that the FDB entry was added in Config DB
    print("CHECK: Static FDB Vlan2:" + mac.lower() +
          ":Port0 is created in Config-DB")
    mac1_found, extra = dvs.is_table_entry_exists(dvs.cdb, "FDB",
                                                  "Vlan2\|" + mac.lower(),
                                                  [("port", "Port0")])
    assert mac1_found, str(extra)
    print("CONFIRM: Static FDB Vlan2:" + mac.lower() +
          ":Port0 is created in Config-DB")

    # check that the FDB entry was added in APP DB
    print("CHECK: Static FDB Vlan2:" + mac.lower() +
          ":Port0 is created in APP-DB")
    mac1_found, extra = dvs.is_table_entry_exists(dvs.pdb, "FDB_TABLE",
                                                  "Vlan2:" + mac.lower(), [
                                                      ("port", "Port0"),
                                                      ("type", "static"),
                                                  ])
    assert mac1_found, str(extra)
    print("CONFIRM: Static FDB Vlan2:" + mac.lower() +
          "Port0 is created in APP-DB")

    # check that the FDB entry is not inserted into ASIC DB
    print("CHECK: Static FDB Vlan2:" + mac.lower() +
          ":Port0 is not created in ASIC-DB")
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", mac.lower())],
        [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC")])
    assert ok == False, str(extra)
    print("CONFIRM: Static FDB Vlan2:" + mac.lower() +
          ":Port0 is not created in ASIC-DB")

    print("ACTION: Removing static FDB Vlan2:" + mac.lower() +
          ":Port0 from CONFIG-DB")
    remove_entry_tbl(dvs.cdb, "FDB", "Vlan2|" + mac.lower())
    time.sleep(2)

    #Check the mac is removed from config-db
    print("CHECK: Static FDB Vlan2:" + mac.lower() +
          ":Port0 is deleted from Config-DB")
    mac1_found, extra = dvs.is_table_entry_exists(dvs.cdb, "FDB",
                                                  "Vlan2\|" + mac.lower(),
                                                  [("port", "Port0")])
    assert mac1_found == False, str(extra)
    print("CONFIRM: Static FDB Vlan2:" + mac.lower() +
          ":Port0 is deleted from Config-DB")

    # check that the FDB entry is removed from APP DB
    print("CHECK: Static FDB Vlan2:" + mac.lower() +
          ":Port0 is deleted from APP-DB")
    mac1_found, extra = dvs.is_table_entry_exists(dvs.pdb, "FDB_TABLE",
                                                  "Vlan2:" + mac.lower(), [
                                                      ("port", "Port0"),
                                                      ("type", "static"),
                                                  ])
    assert mac1_found == False, str(extra)
    print("CONFIRM: Static FDB Vlan2:" + mac.lower() +
          ":Port0 is deleted from APP-DB")

    print(
        "NEG4 - simulate mac learn event for a port which is not part of vlan")
    bp_eth8 = iface_2_bridge_port_id["Ethernet8"]
    dvs.remove_vlan_member("4", "Ethernet8")

    print("ACTION Creating FDB Vlan4:52-54-00-25-06-E9:Ethernet8 in ASIC-DB")
    create_entry_tbl(
        dvs.adb, "ASIC_STATE", "SAI_OBJECT_TYPE_FDB_ENTRY:{\"bvid\":\"" +
        vlan_oid_4 + "\",\"mac\":\"52:54:00:25:06:E9\",\"switch_id\":\"" +
        switch_id + "\"}", [
            ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"),
            ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth8),
        ])

    ntf = swsscommon.NotificationProducer(dvs.adb, "FDB_NOTIFICATIONS")
    fvp = swsscommon.FieldValuePairs()
    ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_4 + "\\\",\\\"mac\\\":\\\"52:54:00:25:06:E9\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_LEARNED\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + bp_eth8 + "\"}]}]"
    ntf.send("fdb_event", ntf_data, fvp)

    time.sleep(2)

    # check that the FDB entry was added in ASIC DB
    print("CHECK: FDB Vlan4:52-54-00-25-06-E9:Ethernet8 is created in ASIC-DB")
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", "52:54:00:25:06:E9"), ("bvid", vlan_oid_4)],
        [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"),
         ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth8)])
    assert ok, str(extra)
    print(
        "CONFIRM: FDB Vlan4:52-54-00-25-06-E9:Ethernet8 is created in ASIC-DB")

    # check that the FDB entry was not added in STATE DB
    print(
        "CHECK: FDB Vlan4:52-54-00-25-06-E9:Ethernet8 is not created in STATE-DB"
    )
    mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE",
                                                  "Vlan4:52:54:00:25:06:e9", [
                                                      ("port", "Ethernet8"),
                                                      ("type", "dynamic"),
                                                  ])
    assert mac1_found == False, str(extra)
    print(
        "CONFIRM: FDB Vlan4:52-54-00-25-06-E9:Ethernet8 is not created in STATE-DB"
    )

    print("NEG5 - simulate mac learn event for a vlan which does not exist")
    bp_eth12 = iface_2_bridge_port_id["Ethernet12"]
    dvs.remove_vlan_member("10", "Ethernet12")
    dvs.remove_vlan("10")

    print(
        "ACTION: Creating FDB Vlan10:52-54-00-25-06-E9:Ethernet12 in ASIC-DB")
    create_entry_tbl(
        dvs.adb, "ASIC_STATE", "SAI_OBJECT_TYPE_FDB_ENTRY:{\"bvid\":\"" +
        vlan_oid_10 + "\",\"mac\":\"52:54:00:25:06:E9\",\"switch_id\":\"" +
        switch_id + "\"}", [
            ("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"),
            ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth12),
        ])

    ntf = swsscommon.NotificationProducer(dvs.adb, "FDB_NOTIFICATIONS")
    fvp = swsscommon.FieldValuePairs()
    ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_10 + "\\\",\\\"mac\\\":\\\"52:54:00:25:06:E9\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_LEARNED\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + bp_eth12 + "\"}]}]"
    ntf.send("fdb_event", ntf_data, fvp)

    time.sleep(2)

    # check that the FDB entry was added in ASIC DB
    print(
        "CHECK: FDB Vlan10:52-54-00-25-06-E9:Ethernet12 is created in ASIC-DB")
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", "52:54:00:25:06:E9"), ("bvid", vlan_oid_10)],
        [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"),
         ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth12)])
    assert ok, str(extra)
    print(
        "CONFIRM: FDB Vlan10:52-54-00-25-06-E9:Ethernet12 is created in ASIC-DB"
    )

    # check that the FDB entry was not added in STATE DB
    print(
        "CHECK: FDB Vlan10:52-54-00-25-06-E9:Ethernet12 is not created in STATE-DB"
    )
    mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE",
                                                  "Vlan10:52:54:00:25:06:e9", [
                                                      ("port", "Ethernet12"),
                                                      ("type", "dynamic"),
                                                  ])
    assert mac1_found == False, str(extra)
    print(
        "CONFIRM: FDB Vlan10:52-54-00-25-06-E9:Ethernet12 is not created in STATE-DB"
    )

    print("NEG6 - simulate mac age event for a vlan which does not exist")

    print(
        "ACTION: Deleting FDB Vlan10:52-54-00-25-06-E9:Ethernet12 from ASIC-DB"
    )
    remove_entry_tbl(
        dvs.adb, "ASIC_STATE", "SAI_OBJECT_TYPE_FDB_ENTRY:{\"bvid\":\"" +
        vlan_oid_10 + "\",\"mac\":\"52:54:00:25:06:E9\",\"switch_id\":\"" +
        switch_id + "\"}")

    ntf = swsscommon.NotificationProducer(dvs.adb, "FDB_NOTIFICATIONS")
    fvp = swsscommon.FieldValuePairs()
    ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_10 + "\\\",\\\"mac\\\":\\\"52:54:00:25:06:E9\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_AGED\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + bp_eth12 + "\"}]}]"
    ntf.send("fdb_event", ntf_data, fvp)

    time.sleep(2)

    # check that the FDB entry is not present ASIC DB
    print(
        "CHECK: FDB Vlan10:52-54-00-25-06-E9:Ethernet12 is not found in ASIC-DB"
    )
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", "52:54:00:25:06:E9"), ("bvid", vlan_oid_10)],
        [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"),
         ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth12)])
    assert ok == False, str(extra)
    print(
        "CONFIRM: FDB Vlan10:52-54-00-25-06-E9:Ethernet12 is not found in ASIC-DB"
    )

    # check that the FDB entry was not found in STATE DB
    print(
        "CHECK: FDB Vlan10:52-54-00-25-06-E9:Ethernet12 is not found in STATE-DB"
    )
    mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE",
                                                  "Vlan10:52:54:00:25:06:e9", [
                                                      ("port", "Ethernet12"),
                                                      ("type", "dynamic"),
                                                  ])
    assert mac1_found == False, str(extra)
    print(
        "CONFIRM: FDB Vlan10:52-54-00-25-06-E9:Ethernet12 is not found in STATE-DB"
    )

    print("NEG7 - simulate mac age event for a port which is not part of vlan")

    print(
        "ACTION: Deleting FDB Vlan4:52-54-00-25-06-E9:Ethernet8 from ASIC-DB")
    remove_entry_tbl(
        dvs.adb, "ASIC_STATE", "SAI_OBJECT_TYPE_FDB_ENTRY:{\"bvid\":\"" +
        vlan_oid_4 + "\",\"mac\":\"52:54:00:25:06:E9\",\"switch_id\":\"" +
        switch_id + "\"}")

    ntf = swsscommon.NotificationProducer(dvs.adb, "FDB_NOTIFICATIONS")
    fvp = swsscommon.FieldValuePairs()
    ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_4 + "\\\",\\\"mac\\\":\\\"52:54:00:25:06:E9\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_AGED\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + bp_eth8 + "\"}]}]"
    ntf.send("fdb_event", ntf_data, fvp)

    time.sleep(2)

    # check that the FDB entry is not present ASIC DB
    print(
        "CHECK: FDB Vlan4:52-54-00-25-06-E9:Ethernet8 is not found in ASIC-DB")
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", "52:54:00:25:06:E9"), ("bvid", vlan_oid_4)],
        [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"),
         ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth8)])
    assert ok == False, str(extra)
    print(
        "CONFIRM: FDB Vlan4:52-54-00-25-06-E9:Ethernet8 is not found in ASIC-DB"
    )

    # check that the FDB entry was not found in STATE DB
    print(
        "CHECK: FDB Vlan4:52-54-00-25-06-E9:Ethernet8 is not found in STATE-DB"
    )
    mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE",
                                                  "Vlan4:52:54:00:25:06:e9", [
                                                      ("port", "Ethernet8"),
                                                      ("type", "dynamic"),
                                                  ])
    assert mac1_found == False, str(extra)
    print(
        "CONFIRM: FDB Vlan4:52-54-00-25-06-E9:Ethernet8 is not found in STATE-DB"
    )

    print("NEG8 - simulate mac age event for a mac which does not exist")

    bp_eth0 = iface_2_bridge_port_id["Ethernet0"]
    print(
        "ACTION: Deleting FDB Vlan2:52-54-00-25-06-E9:Ethernet0 from ASIC-DB")
    remove_entry_tbl(
        dvs.adb, "ASIC_STATE", "SAI_OBJECT_TYPE_FDB_ENTRY:{\"bvid\":\"" +
        vlan_oid_2 + "\",\"mac\":\"52:54:00:25:06:E9\",\"switch_id\":\"" +
        switch_id + "\"}")

    ntf = swsscommon.NotificationProducer(dvs.adb, "FDB_NOTIFICATIONS")
    fvp = swsscommon.FieldValuePairs()
    ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_2 + "\\\",\\\"mac\\\":\\\"52:54:00:25:06:E9\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_AGED\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + bp_eth0 + "\"}]}]"
    ntf.send("fdb_event", ntf_data, fvp)

    time.sleep(2)

    # check that the FDB entry is not present ASIC DB
    print(
        "CHECK: FDB Vlan2:52-54-00-25-06-E9:Ethernet0 is not found in ASIC-DB")
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", "52:54:00:25:06:E9"), ("bvid", vlan_oid_2)],
        [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"),
         ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth0)])
    assert ok == False, str(extra)
    print(
        "CONFIRM: FDB Vlan2:52-54-00-25-06-E9:Ethernet0 is not found in ASIC-DB"
    )

    # check that the FDB entry was not found in STATE DB
    print(
        "CHECK: FDB Vlan2:52-54-00-25-06-E9:Ethernet0 is not found in STATE-DB"
    )
    mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE",
                                                  "Vlan2:52:54:00:25:06:e9", [
                                                      ("port", "Ethernet0"),
                                                      ("type", "dynamic"),
                                                  ])
    assert mac1_found == False, str(extra)
    print(
        "CONFIRM: FDB Vlan2:52-54-00-25-06-E9:Ethernet0 is not found in STATE-DB"
    )

    print(
        "NEG9 - Add Static MAC M1 to Vlan V1 and Port P1; create V1; assign V1 to P1; remove V1 from P1; remove V1"
    )
    mac = "52:54:00:25:06:EF"
    #dvs.runcmd("config mac add " + mac.lower() + " 10 Ethernet12")
    print("ACTION: Creating static FDB Vlan10|" + mac.lower() +
          "|Ethernet12 in CONFIG-DB")
    create_entry_tbl(dvs.cdb, "FDB", "Vlan10|" + mac.lower(), [
        ("port", "Ethernet12"),
    ])
    time.sleep(5)

    # check that the FDB entry was added in Config DB
    print("CHECK: Static FDB Vlan10:" + mac.lower() +
          ":Ethernet12 is created in Config-DB")
    mac1_found, extra = dvs.is_table_entry_exists(dvs.cdb, "FDB",
                                                  "Vlan10\|" + mac.lower(),
                                                  [("port", "Ethernet12")])
    assert mac1_found, str(extra)
    print("CONFIRM: Static FDB Vlan10:" + mac.lower() +
          ":Ethernet12 is created in Config-DB")

    # check that the FDB entry was added in APP DB
    print("CHECK: Static FDB Vlan10:" + mac.lower() +
          ":Ethernet12 is created in APP-DB")
    mac1_found, extra = dvs.is_table_entry_exists(dvs.pdb, "FDB_TABLE",
                                                  "Vlan10:" + mac.lower(),
                                                  [("port", "Ethernet12"),
                                                   ("type", "static")])
    assert mac1_found, str(extra)
    print("CONFIRM: Static FDB Vlan10:" + mac.lower() +
          ":Ethernet12 is created in APP-DB")

    # check that the FDB entry is not inserted into ASIC DB
    print("CHECK: Static FDB Vlan10:" + mac.lower() +
          ":Ethernet12 is not created in ASIC-DB")
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", mac.lower())],
        [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC")])
    assert ok == False, str(extra)
    print("CONFIRM: Static FDB Vlan10:" + mac.lower() +
          ":Ethernet12 is not created in ASIC-DB")

    dvs.create_vlan("10")
    time.sleep(1)
    dvs.create_vlan_member("10", "Ethernet12")
    time.sleep(1)
    # Find the vlan_oid_10 to be used in DB communications
    vlan_oid_10 = dvs.getVlanOid("10")
    assert vlan_oid_10 is not None, "Could not find Vlan_oid"
    print("VLan-10 vlan_oid=" + str(vlan_oid_10))
    iface_2_bridge_port_id = dvs.get_map_iface_bridge_port_id(dvs.adb)
    bp_eth12 = iface_2_bridge_port_id["Ethernet12"]
    print("bp_eth12=" + str(bp_eth12))

    print("CHECK: Static FDB Vlan10:" + mac +
          ":Ethernet12 is created in ASIC-DB")
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", mac), ("bvid", str(vlan_oid_10))],
        [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC"),
         ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth12)])
    assert ok, str(extra)
    print("CONFIRM: Static FDB Vlan10:" + mac +
          ":Ethernet12 is created in ASIC-DB")

    # check that the FDB entry was added in STATE DB
    print("CHECK: Static FDB Vlan10:" + mac.lower() +
          ":Ethernet12 is created in STATE-DB")
    mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE",
                                                  "Vlan10:" + mac.lower(), [
                                                      ("port", "Ethernet12"),
                                                      ("type", "static"),
                                                  ])
    assert mac1_found, str(extra)
    print("CONFIRM: Static FDB Vlan10:" + mac.lower() +
          ":Ethernet12 is created in STATE-DB")

    print("ACTION: Remove vlan member Ethernet12")
    dvs.remove_vlan_member("10", "Ethernet12")
    time.sleep(2)

    print("CHECK: Static FDB Vlan10:" + mac +
          ":Ethernet12 is deleted from ASIC-DB")
    ok, extra = dvs.is_fdb_entry_exists(
        dvs.adb, "ASIC_STATE:SAI_OBJECT_TYPE_FDB_ENTRY",
        [("mac", mac), ("bvid", str(vlan_oid_10))],
        [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_STATIC"),
         ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID", bp_eth12)])
    assert ok == False, str(extra)
    print("CONFIRM: Static FDB Vlan10:" + mac +
          ":Ethernet12 is deleted from ASIC-DB")

    # check that the FDB entry was deleted from STATE DB
    print("CHECK: Static FDB Vlan10:" + mac.lower() +
          ":Ethernet12 is deleted from STATE-DB")
    mac1_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE",
                                                  "Vlan10:" + mac.lower(), [
                                                      ("port", "Ethernet12"),
                                                      ("type", "static"),
                                                  ])
    assert mac1_found == False, str(extra)
    print("CONFIRM: Static FDB Vlan10:" + mac.lower() +
          ":Ethernet12 is deleted from STATE-DB")

    print("ACTION: Remove vlan Vlan10")
    dvs.remove_vlan("10")
    time.sleep(2)

    print("ACTION: Remove FDB Vlan10|" + mac.lower() + " from Config DB")
    remove_entry_tbl(dvs.cdb, "FDB", "Vlan10|" + mac.lower())
    time.sleep(2)

    #Check the mac is removed from config-db
    print("CHECK: Static FDB Vlan10:" + mac.lower() +
          ":Ethernet12 is deleted from Config-DB")
    mac1_found, extra = dvs.is_table_entry_exists(dvs.cdb, "FDB",
                                                  "Vlan10\|" + mac.lower(),
                                                  [("port", "Ethernet12")])
    assert mac1_found == False, str(extra)
    print("CONFIRM: Static FDB Vlan10:" + mac.lower() +
          ":Ethernet12 is deleted from Config-DB")

    # check that the FDB entry is removed from APP DB
    print("CHECK: Static FDB Vlan10:" + mac.lower() +
          ":Ethernet12 is deleted from APP-DB")
    mac1_found, extra = dvs.is_table_entry_exists(dvs.pdb, "FDB_TABLE",
                                                  "Vlan10:" + mac.lower(), [
                                                      ("port", "Ethernet12"),
                                                      ("type", "static"),
                                                  ])
    assert mac1_found == False, str(extra)
    print("CONFIRM: Static FDB Vlan10:" + mac.lower() +
          ":Ethernet12 is deleted from APP-DB")

    print("NEG10 - Received move event with invalid bridge-port")
    # Move a FDB entry in ASIC DB
    print("Action: Creating FDB Vlan2:52-54-00-25-06-EB:Ethernet0 in ASIC-DB")
    create_entry_tbl(
        dvs.adb, "ASIC_STATE", "SAI_OBJECT_TYPE_FDB_ENTRY:{\"bvid\":\"" +
        vlan_oid_2 + "\",\"mac\":\"52:54:00:25:06:EB\",\"switch_id\":\"" +
        switch_id + "\"}",
        [("SAI_FDB_ENTRY_ATTR_TYPE", "SAI_FDB_ENTRY_TYPE_DYNAMIC"),
         ("SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID",
          iface_2_bridge_port_id["Ethernet0"])])

    ntf = swsscommon.NotificationProducer(dvs.adb, "FDB_NOTIFICATIONS")
    fvp = swsscommon.FieldValuePairs()
    ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_2 + "\\\",\\\"mac\\\":\\\"52:54:00:25:06:EB\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_LEARNED\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + iface_2_bridge_port_id[
        "Ethernet0"] + "\"}]}]"
    ntf.send("fdb_event", ntf_data, fvp)

    time.sleep(2)

    print(
        "Action: Moving FDB Vlan2:52-54-00-25-06-EB:Ethernet0 to non-existing bridge-port Ethernet12"
    )
    ntf = swsscommon.NotificationProducer(dvs.adb, "FDB_NOTIFICATIONS")
    fvp = swsscommon.FieldValuePairs()
    ntf_data = "[{\"fdb_entry\":\"{\\\"bvid\\\":\\\"" + vlan_oid_2 + "\\\",\\\"mac\\\":\\\"52:54:00:25:06:EB\\\",\\\"switch_id\\\":\\\"" + switch_id + "\\\"}\",\"fdb_event\":\"SAI_FDB_EVENT_MOVE\",\"list\":[{\"id\":\"SAI_FDB_ENTRY_ATTR_BRIDGE_PORT_ID\",\"value\":\"" + bp_eth12 + "\"}]}]"
    ntf.send("fdb_event", ntf_data, fvp)

    time.sleep(2)

    print("CHECK: FDB Vlan2:52-54-00-25-06-EB is not Moved in STATE-DB")
    # check that the FDB entry was not moved in STATE DB
    mac2_found, extra = dvs.is_table_entry_exists(dvs.sdb, "FDB_TABLE",
                                                  "Vlan2:52:54:00:25:06:eb", [
                                                      ("port", "Ethernet0"),
                                                      ("type", "dynamic"),
                                                  ])
    assert mac2_found, str(extra)
    print("CONFIRM: FDB Vlan2:52-54-00-25-06-EB is not Moved in STATE-DB")

    #raw_input("Check at the end")

    dvs.runcmd("sonic-clear fdb all")
    time.sleep(10)

    dvs.remove_vlan_member("2", "Ethernet0")
    dvs.remove_vlan_member("2", "Ethernet4")
    dvs.remove_vlan("2")
    dvs.remove_vlan("4")