aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/tools/test/topos/obeliskHostCheck.py
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/tools/test/topos/obeliskHostCheck.py')
-rwxr-xr-xframework/src/onos/tools/test/topos/obeliskHostCheck.py91
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 )