Merge branch 'master' of github.com:OPENNETWORKINGLAB/ONOS
diff --git a/cluster-mgmt/bin/check_status.py b/cluster-mgmt/bin/check_status.py
new file mode 100755
index 0000000..434bb33
--- /dev/null
+++ b/cluster-mgmt/bin/check_status.py
@@ -0,0 +1,116 @@
+#! /usr/bin/env python
+import json
+import os
+
+urls="http://localhost:8080/wm/core/topology/switches/all/json http://localhost:8080/wm/core/topology/links/json http://localhost:8080/wm/registry/controllers/json http://localhost:8080/wm/registry/switches/json"
+RestIP="onosdevz1"
+RestPort="8080"
+
+core_switches=["00:00:00:00:ba:5e:ba:11", "00:00:00:00:00:00:ba:12", "00:00:20:4e:7f:51:8a:35", "00:00:00:00:ba:5e:ba:13", "00:00:00:08:a2:08:f9:01", "00:00:00:16:97:08:9a:46"]
+correct_nr_switch=[6,50,25,25,25,25,25,25]
+correct_intra_link=[16, 98, 48, 48, 48, 48, 48, 48]
+
+#nr_links=(switch[1]+switch[2]+switch[3]+switch[4]+switch[5]+switch[6]+switch[7]+len(switch)-1+8)*2
+nr_links= (49 + 24 * 6 + 7 + 8) * 2
+
+def check_switch():
+  try:
+    command = "curl -s \'http://%s:%s/wm/core/topology/switches/all/json\'" % (RestIP, RestPort)
+    print command
+    result = os.popen(command).read()
+  except:
+    print "REST IF has issue"
+    exit
+
+  parsedResult = json.loads(result)
+  print "switch: total %d switches" % len(parsedResult)
+  cnt = []
+  for r in range(8):
+    cnt.append(0)
+  for s in parsedResult:
+    nw =int(s['dpid'].split(':')[-2], 16)
+    if nw >= 2 and nw <=8:
+      cnt[nw-1] = cnt[nw-1] + 1
+    else:
+      cnt[0] = cnt[0] + 1
+  for r in range(8):
+    print "switch: network %d %d switches" % (r+1, cnt[r])
+    if correct_nr_switch[r] != cnt[r]:
+      print "switch fail: network %d should have %d switches but has %d" % (r+1, correct_nr_switch[r], cnt[r])
+      break
+
+def check_link():
+  try:
+    command = "curl -s \'http://%s:%s/wm/core/topology/links/json\'" % (RestIP, RestPort)
+    print command
+    result = os.popen(command).read()
+  except:
+    print "REST IF has issue"
+    exit
+  parsedResult = json.loads(result)
+  print "link: total %d links (correct : %d)" % (len(parsedResult), nr_links)
+  intra = []
+  for r in range(8):
+    intra.append(0)
+
+  for s in parsedResult:
+    if s['src-switch'] in core_switches:
+      src_nw = 1
+    else:
+      src_nw =int(s['src-switch'].split(':')[-2], 16)
+    
+    if s['dst-switch'] in core_switches:
+      dst_nw = 1
+    else:
+      dst_nw =int(s['dst-switch'].split(':')[-2], 16)
+
+    src_swid =int(s['src-switch'].split(':')[-1], 16)
+    dst_swid =int(s['dst-switch'].split(':')[-1], 16)
+    if src_nw == dst_nw:
+      intra[src_nw - 1] = intra[src_nw - 1] + 1 
+
+  for r in range(8):
+    if intra[r] != correct_intra_link[r]:
+      print "link fail: network %d should have %d intra links but has %d" % (r+1, correct_intra_link[r], intra[r])
+
+def check_mastership():
+  try:
+    command = "curl -s \'http://%s:%s/wm/registry/switches/json\'" % (RestIP, RestPort)
+    print command
+    result = os.popen(command).read()
+  except:
+    print "REST IF has issue"
+    exit
+  parsedResult = json.loads(result)
+  for s in parsedResult:
+    #print s,len(s),s[0]['controllerId']
+    ctrl=parsedResult[s][0]['controllerId']
+    if s in core_switches:
+      nw = 1
+    else:
+      nw =int(s.split(':')[-2], 16)
+
+    if len(parsedResult[s]) > 1:
+      print "ownership fail: switch %s has more than 1 ownership" % (s)
+    elif int(ctrl[-1]) != nw:
+      print "ownership fail: switch %s is owened by %s" % (s, ctrl)
+
+def check_controllers():
+  try:
+    command = "curl -s \'http://%s:%s/wm/registry/controllers/json\'" % (RestIP, RestPort)
+    print command
+    result = os.popen(command).read()
+  except:
+    print "REST IF has issue"
+    exit
+
+  parsedResult = json.loads(result)
+  unique=list(set(parsedResult))
+  if len(unique) != 8:
+    print "controller fail: there are %d controllers" % (len(parsedResult))
+
+if __name__ == "__main__":
+  check_switch()
+  check_link()
+  check_mastership()
+  check_controllers()