Commit 5eb51ca4 authored by douomo's avatar douomo
Browse files

update counters on validateInventory.py

parent d9dd4666
Loading
Loading
Loading
Loading
+232 −45
Original line number Original line Diff line number Diff line
@@ -5,50 +5,237 @@ from ncclient import manager






def get_iface_metrics(m, metric):
def check_svc_inventory(xml_reply):
    cfg = m
    tree = ET.fromstring(xml_reply)
    print(cfg)
    bridges = tree.findall(".//ns0:bridge", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
    ns = {
    expected_params = 0
    'nc': 'urn:ietf:params:xml:ns:netconf:base:1.0',
    actual_params = 0
    'if': 'urn:ietf:params:xml:ns:yang:ietf-interfaces',
    for bridge in bridges:
    'mwrl': 'urn:ietf:params:xml:ns:yang:ietf-microwave-radio-link',
        expected_params = expected_params + 4
    'ianaift': 'urn:ietf:params:xml:ns:yang:iana-if-type'
        actual_params = actual_params + 4
    }
        name = bridge.findall(".//ns0:name", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
    tree = ET.fromstring(cfg)
        address = bridge.findall(".//ns0:address", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
    print("Found iface")
        bridge_type = bridge.findall(".//ns0:bridge-type", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
    value = tree.findall(".//{urn:ietf:params:xml:ns:yang:ietf-microwave-radio-link}"+metric, namespaces=ns)
        components = bridge.findall(".//ns0:component", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
    if len(value)==0:
        if len(name)==0 or len(address)==0 or len(bridge_type)==0 or len(components)==0:
        print(metric+" not found")
            #return "mssing bridge's info"
        return metric+" not found"        
            actual_params = actual_params - 4 + len(name) + len(address) + len(bridge_type) + len(components)
    return value[0].text
        for component in components:
    
            expected_params = expected_params + 6
def set_TX_power(int_name, txPower):
            actual_params = actual_params + 6
    env = Environment( loader=FileSystemLoader("."), autoescape=False)
            name = component.findall(".//ns0:name", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
    context = {
            id = component.findall(".//ns0:id", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
        "interfaceName":int_name,
            type = component.findall(".//ns0:type", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
        "tx_power" : txPower,
            bridge_port = component.findall(".//ns0:bridge-port", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
    }
            filtering_database = component.findall(".//ns0:filtering-database", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
    xml = env.get_template("configFile/setTXPower.xml.pyformat").render(context)
            bridge_vlan = component.findall(".//ns0:bridge-vlan", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
    
            if len(name)==0 or len(id)==0 or len(type)==0 or len(bridge_port)==0 or len(filtering_database)==0 or len(bridge_vlan)==0:
    print(xml)
                #return "missing components's info"
                actual_params = actual_params - 6 + len(name) + len(id) + len(type) + len(bridge_port) + len(filtering_database) + len(bridge_vlan)
                print("missing one of params in level 1 for component ",name[0].text)
                print(len(name) + len(id) + len(type) + len(bridge_port) + len(filtering_database) + len(bridge_vlan))
            for db in filtering_database:
                expected_params = expected_params + 1 #if there's the filtering db I expect to see also vlan_reg_entry
                actual_params = actual_params + 1
                vlan_reg_entry = db.findall(".//ns0:vlan-registration-entry", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
                if len(vlan_reg_entry)==0:
                    actual_params = actual_params - 1
                    print("missing vlan_reg_entry")
                for v in vlan_reg_entry:
                    actual_params = actual_params + 4
                    expected_params = expected_params + 4
                    database_id = v.findall(".//ns0:database-id", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
                    vids = v.findall(".//ns0:vids", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
                    entry_type = v.findall(".//ns0:entry-type", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
                    port_map = v.findall(".//ns0:port-map", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
                    if len(database_id)==0 or len(entry_type)==0:
                        actual_params = actual_params - 2 + len(database_id) + len(entry_type)
                    if(vids)==0:
                        actual_params = actual_params - 1
                    if len(port_map) == 0:
                        actual_params = actual_params-1
                    for p in port_map:
                        actual_params = actual_params + 4
                        expected_params = expected_params + 4
                        port_ref =  p.findall(".//ns0:port-ref", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
                        static_vlan_reg_entry = p.findall(".//ns0:static-vlan-registration-entries", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
                        vlan_transmitted = p.findall(".//ns0:vlan-transmitted", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
                        registrar_admin_control = p.findall(".//ns0:registrar-admin-control", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
                        if len(port_ref)==0 or len(static_vlan_reg_entry)==0 or len(vlan_transmitted)==0 or len(registrar_admin_control)==0:
                            #return "Missing data in port map"
                            print("missing one of params inside vlan_reg_entry")
                            actual_params = actual_params - 4 + len(port_ref) + len(static_vlan_reg_entry) + len(vlan_transmitted) + len(registrar_admin_control)
            for br in bridge_vlan:
                expected_params = expected_params + 1 #if there's a bridge_vlan I also expect to see vlans
                vlans = br.findall(".//ns0:vlan", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
                actual_params = actual_params + 1
                if len(vlans)==0:
                    print("missing vlans")
                    actual_params = actual_params - 1
                for vlan in vlans:
                    expected_params = expected_params + 3
                    actual_params = actual_params + 3
                    vid = vlan.findall(".//ns0:vid", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
                    name = vlan.findall(".//ns0:name", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
                    egress_ports = vlan.findall(".//ns0:egress-ports", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
                    if len(vid)==0 or len(name)==0 or len(egress_ports)==0:
                        #return "Missing data in bridge vlan"
                        print("missing one of params inside vlan")
                        actual_params = actual_params - 3 + len(vid) + len(name) + len(egress_ports)
    if actual_params<expected_params:
        return "expected params = ",expected_params," got ", actual_params
    return "SUCCESS"


if __name__=="__main__":
if __name__=="__main__":
    xml_reply = """<?xml version="1.0" encoding="UTF-8"?>
    xml_reply = """<?xml version="1.0" encoding="UTF-8"?><data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <bridges xmlns="urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge">
  <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces">
      <bridge>
    <interface>
        <name>Bridge-1</name>
      <name>CT 1/2/1</name>
        <address>00-B0-AC-0D-13-4A</address>
      <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:microwaveCarrierTermination</type>
        <bridge-type xmlns:dot1q="urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge">dot1q:provider-edge-bridge</bridge-type>
      <actual-transmitted-level xmlns="urn:ietf:params:xml:ns:yang:ietf-microwave-radio-link">11.4</actual-transmitted-level>
        <component>
      <actual-received-level xmlns="urn:ietf:params:xml:ns:yang:ietf-microwave-radio-link">-29.4</actual-received-level>
          <name>Component-1</name>
      <actual-snir xmlns="urn:ietf:params:xml:ns:yang:ietf-microwave-radio-link">47.3</actual-snir>
          <id>0</id>
    </interface>
          <type xmlns:dot1q="urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge">dot1q:s-vlan-component</type>
  </interfaces>
          <ports>10</ports>
          <bridge-port>eth1</bridge-port>
          <bridge-port>eth2</bridge-port>
          <bridge-port>eth3</bridge-port>
          <bridge-port>eth4</bridge-port>
          <bridge-port>eth6</bridge-port>
          <bridge-port>eth8</bridge-port>
          <bridge-port>eth9</bridge-port>
          <bridge-port>eth10</bridge-port>
          <filtering-database>
            <aging-time>300</aging-time>
            <vlan-registration-entry>
              <database-id>1</database-id>
              <vids>100</vids>
              <entry-type>static</entry-type>
              <port-map>
                <port-ref>4</port-ref>
                <static-vlan-registration-entries>
                  <registrar-admin-control>fixed-new-ignored</registrar-admin-control>
                  <vlan-transmitted>tagged</vlan-transmitted>
                </static-vlan-registration-entries>
              </port-map>
              <port-map>
                <port-ref>9</port-ref>
                <static-vlan-registration-entries>
                  <registrar-admin-control>fixed-new-ignored</registrar-admin-control>
                  <vlan-transmitted>tagged</vlan-transmitted>
                </static-vlan-registration-entries>
              </port-map>
            </vlan-registration-entry>
            <vlan-registration-entry>
              <database-id>1</database-id>
              <vids>200</vids>
              <entry-type>static</entry-type>
              <port-map>
                <port-ref>4</port-ref>
                <static-vlan-registration-entries>
                  <registrar-admin-control>fixed-new-ignored</registrar-admin-control>
                  <vlan-transmitted>tagged</vlan-transmitted>
                </static-vlan-registration-entries>
              </port-map>
              <port-map>
                <port-ref>9</port-ref>
                <static-vlan-registration-entries>
                  <registrar-admin-control>fixed-new-ignored</registrar-admin-control>
                  <vlan-transmitted>tagged</vlan-transmitted>
                </static-vlan-registration-entries>
              </port-map>
            </vlan-registration-entry>
            <vlan-registration-entry>
              <database-id>1</database-id>
              <vids>300</vids>
              <entry-type>static</entry-type>
              <port-map>
                <port-ref>4</port-ref>
                <static-vlan-registration-entries>
                  <registrar-admin-control>fixed-new-ignored</registrar-admin-control>
                  <vlan-transmitted>tagged</vlan-transmitted>
                </static-vlan-registration-entries>
              </port-map>
              <port-map>
                <port-ref>9</port-ref>
                <static-vlan-registration-entries>
                  <registrar-admin-control>fixed-new-ignored</registrar-admin-control>
                  <vlan-transmitted>tagged</vlan-transmitted>
                </static-vlan-registration-entries>
              </port-map>
            </vlan-registration-entry>
            <vlan-registration-entry>
              <database-id>1</database-id>
              <vids>350</vids>
              <entry-type>static</entry-type>
              <port-map>
                <port-ref>4</port-ref>
                <static-vlan-registration-entries>
                  <registrar-admin-control>fixed-new-ignored</registrar-admin-control>
                  <vlan-transmitted>tagged</vlan-transmitted>
                </static-vlan-registration-entries>
              </port-map>
              <port-map>
                <port-ref>9</port-ref>
                <static-vlan-registration-entries>
                  <registrar-admin-control>fixed-new-ignored</registrar-admin-control>
                  <vlan-transmitted>tagged</vlan-transmitted>
                </static-vlan-registration-entries>
              </port-map>
            </vlan-registration-entry>
          </filtering-database>
          <bridge-vlan>
            <version>1</version>
            <max-vids>4094</max-vids>
            <vlan>
              <vid>100</vid>
              <name>TestVLAN</name>
              <egress-ports>eth4</egress-ports>
              <egress-ports>eth9</egress-ports>
            </vlan>
            <vlan>
              <vid>200</vid>
              <name>TestVLAN</name>
              <egress-ports>eth4</egress-ports>
              <egress-ports>eth9</egress-ports>
            </vlan>
            <vlan>
              <vid>300</vid>
              <name>TestVLAN</name>
              <egress-ports>eth4</egress-ports>
              <egress-ports>eth9</egress-ports>
            </vlan>
            <vlan>
              <vid>350</vid>
              <name>TestVLAN</name>
              <egress-ports>eth4</egress-ports>
              <egress-ports>eth9</egress-ports>
            </vlan>
          </bridge-vlan>
        </component>
        <component>
          <name>Component-eth5</name>
          <id>5</id>
          <type xmlns:dot1q="urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge">dot1q:c-vlan-component</type>
          <bridge-port>eth5</bridge-port>
          <bridge-vlan>
            <version>1</version>
            <max-vids>4094</max-vids>
          </bridge-vlan>
        </component>
        <component>
          <name>Component-eth7</name>
          <id>7</id>
          <type xmlns:dot1q="urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge">dot1q:c-vlan-component</type>
          <bridge-port>eth7</bridge-port>
          <bridge-vlan>
            <version>1</version>
            <max-vids>4094</max-vids>
          </bridge-vlan>
        </component>
      </bridge>
    </bridges>
  </data>
  </data>

    """
    """
    #ret = get_iface_metrics(xml_reply, "actual-transmitted-level")
    print(check_svc_inventory(xml_reply))
    #print(ret)
    #set_TX_power("interfaceNAme", 5.0)
    #ret = find_in_xml(xml_reply,"actual-transmitted-level", "urn:ietf:params:xml:ns:yang:ietf-microwave-radio-link")
    #print(ret)
+36 −36
Original line number Original line Diff line number Diff line
@@ -300,9 +300,10 @@ def check_svc_inventory(xml_reply):
            
            
            for db in filtering_database:
            for db in filtering_database:
                expected_params = expected_params + 1 #if there's the filtering db I expect to see also vlan_reg_entry
                expected_params = expected_params + 1 #if there's the filtering db I expect to see also vlan_reg_entry
                vlan_reg_entry = db.findall(".//ns0:vlan-registration-entry", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
                if len(vlan_reg_entry)>0:
                actual_params = actual_params + 1
                actual_params = actual_params + 1
                vlan_reg_entry = db.findall(".//ns0:vlan-registration-entry", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
                if len(vlan_reg_entry)==0:
                    actual_params = actual_params - 1
                for v in vlan_reg_entry:
                for v in vlan_reg_entry:
                    actual_params = actual_params + 4
                    actual_params = actual_params + 4
                    expected_params = expected_params + 4
                    expected_params = expected_params + 4
@@ -326,12 +327,12 @@ def check_svc_inventory(xml_reply):
                        if len(port_ref)==0 or len(static_vlan_reg_entry)==0 or len(vlan_transmitted)==0 or len(registrar_admin_control)==0:
                        if len(port_ref)==0 or len(static_vlan_reg_entry)==0 or len(vlan_transmitted)==0 or len(registrar_admin_control)==0:
                            #return "Missing data in port map"
                            #return "Missing data in port map"
                            actual_params = actual_params - 4 + len(port_ref) + len(static_vlan_reg_entry) + len(vlan_transmitted) + len(registrar_admin_control)
                            actual_params = actual_params - 4 + len(port_ref) + len(static_vlan_reg_entry) + len(vlan_transmitted) + len(registrar_admin_control)
            
            for br in bridge_vlan:
            for br in bridge_vlan:
                expected_params = expected_params + 1 #if there's a bridge_vlan I also expect to see vlans
                expected_params = expected_params + 1 #if there's a bridge_vlan I also expect to see vlans
                vlans = br.findall(".//ns0:vlan", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
                vlans = br.findall(".//ns0:vlan", namespaces={"ns0": "urn:ieee:std:802.1Q:yang:ieee802-dot1q-bridge"})
                if len(vlans)>0:
                actual_params = actual_params + 1
                actual_params = actual_params + 1
                if len(vlans)==0:
                    actual_params = actual_params - 1
                for vlan in vlans:
                for vlan in vlans:
                    expected_params = expected_params + 3
                    expected_params = expected_params + 3
                    actual_params = actual_params + 3
                    actual_params = actual_params + 3
@@ -341,7 +342,6 @@ def check_svc_inventory(xml_reply):
                    if len(vid)==0 or len(name)==0 or len(egress_ports)==0:
                    if len(vid)==0 or len(name)==0 or len(egress_ports)==0:
                        #return "Missing data in bridge vlan"
                        #return "Missing data in bridge vlan"
                        actual_params = actual_params - 3 + len(vid) + len(name) + len(egress_ports)
                        actual_params = actual_params - 3 + len(vid) + len(name) + len(egress_ports)
            
    if actual_params<expected_params:
    if actual_params<expected_params:
        return "expected params = ",expected_params," got ", actual_params
        return "expected params = ",expected_params," got ", actual_params
    return "SUCCESS"
    return "SUCCESS"
 No newline at end of file