diff options
Diffstat (limited to 'framework/src/onos/tools/test/topos/obeliskHostCheck.py')
-rwxr-xr-x | framework/src/onos/tools/test/topos/obeliskHostCheck.py | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/framework/src/onos/tools/test/topos/obeliskHostCheck.py b/framework/src/onos/tools/test/topos/obeliskHostCheck.py new file mode 100755 index 00000000..e928f89f --- /dev/null +++ b/framework/src/onos/tools/test/topos/obeliskHostCheck.py @@ -0,0 +1,91 @@ +#!/usr/bin/python + +import sys +import os +import json + +# TODO: if none given, use OCI +try: + onosIp = sys.argv[1] + print "Reading hosts view from ONOS node " + onosIp + ":" +except Exception as e: + print "Error reading ONOS IP arguement" + print e +# Grab the json objects from ONOS +output = os.popen("onos " + onosIp + " \"hosts -j\"" ) +hosts = json.loads( output.read() ) +#hosts = json.loads( output.split( 'Logging in as karaf\n' )[1] ) + +hostAttachment = True +# FIXME: topo-HA/obelisk specific mappings: +# key is mac and value is dpid +mappings = {} +for i in range( 1, 29 ): # hosts 1 through 28 + # set up correct variables: + macId = "00:" * 5 + hex( i ).split( "0x" )[1].upper().zfill(2) + if i == 1: + deviceId = "1000".zfill(16) + elif i == 2: + deviceId = "2000".zfill(16) + elif i == 3: + deviceId = "3000".zfill(16) + elif i == 4: + deviceId = "3004".zfill(16) + elif i == 5: + deviceId = "5000".zfill(16) + elif i == 6: + deviceId = "6000".zfill(16) + elif i == 7: + deviceId = "6007".zfill(16) + elif i >= 8 and i <= 17: + dpid = '3' + str( i ).zfill( 3 ) + deviceId = dpid.zfill(16) + elif i >= 18 and i <= 27: + dpid = '6' + str( i ).zfill( 3 ) + deviceId = dpid.zfill(16) + elif i == 28: + deviceId = "2800".zfill(16) + mappings[ macId ] = deviceId + +if hosts or "Error" not in hosts: + if hosts == []: + print "WARNING: There are no hosts discovered" + else: + for host in hosts: + mac = None + location = None + device = None + port = None + try: + mac = host.get( 'mac' ) + assert mac, "mac field could not be found for this host object" + + location = host.get( 'location' ) + assert location, "location field could not be found for this host object" + + # Trim the protocol identifier off deviceId + device = str( location.get( 'elementId' ) ).split(':')[1] + assert device, "elementId field could not be found for this host location object" + + port = location.get( 'port' ) + assert port, "port field could not be found for this host location object" + + # Now check if this matches where they should be + if mac and device and port: + if device != mappings[ str( mac ) ]: + print "The attachment device is incorrect for host " + str( mac ) +\ + ". Expected: " + mappings[ str( mac ) ] + "; Actual: " + device + hostAttachment = False + if str( port ) != "1": + print "The attachment port is incorrect for host " + str( mac ) +\ + ". Expected: 1; Actual: " + str( port) + hostAttachment = False + else: + hostAttachment = False + except AssertionError as e: + print "ERROR: Json object not as expected:" + print e + print "host object: " + repr( host ) + hostAttachment = False +else: + print "No hosts json output or \"Error\" in output. hosts = " + repr( hosts ) |