+print "AdmGetAllNodeNetworkBandwidthLimits",
+bwlimits = AdmGetAllNodeNetworkBandwidthLimits(admin)
+print "=>", bwlimits
+
+# Add node networks
+nodenetwork_ids = []
+for node_id in node_ids:
+ ip = randint(0, 0xffffffff)
+ netmask = (0xffffffff << randint(2, 31)) & 0xffffffff
+ network = ip & netmask
+ broadcast = ((ip & netmask) | ~netmask) & 0xffffffff
+ gateway = randint(network + 1, broadcast - 1)
+ dns1 = randint(0, 0xffffffff)
+
+ for method in 'static', 'dhcp':
+ optional = {}
+ if method == 'static':
+ for key in 'ip', 'netmask', 'network', 'broadcast', 'gateway', 'dns1':
+ optional[key] = socket.inet_ntoa(struct.pack('>L', locals()[key]))
+
+ print "AdmAddNodeNetwork(%s)" % method,
+ nodenetwork_id = AdmAddNodeNetwork(admin, node_id, method, 'ipv4', optional)
+
+ # Should return a unique nodenetwork_id
+ assert nodenetwork_id not in nodenetwork_ids
+ nodenetwork_ids.append(nodenetwork_id)
+ print "=>", nodenetwork_id
+
+ # Check node networks
+ print "AdmGetAllNodeNetworks(%d)" % node_id,
+ nodenetworks = AdmGetAllNodeNetworks(admin, node_id)
+ for nodenetwork in nodenetworks:
+ if nodenetwork['method'] == 'static':
+ for key in 'ip', 'netmask', 'network', 'broadcast', 'gateway', 'dns1':
+ address = struct.unpack('>L', socket.inet_aton(nodenetwork[key]))[0]
+ assert address == locals()[key]
+ print "=>", [nodenetwork['nodenetwork_id'] for nodenetwork in nodenetworks]
+
+# Update node networks
+for node_id in node_ids:
+ ip = randint(0, 0xffffffff)
+ netmask = (0xffffffff << randint(2, 31)) & 0xffffffff
+ network = ip & netmask
+ broadcast = ((ip & netmask) | ~netmask) & 0xffffffff
+ gateway = randint(network + 1, broadcast - 1)
+ dns1 = randint(0, 0xffffffff)
+
+ nodenetworks = AdmGetAllNodeNetworks(admin, node_id)
+ for nodenetwork in nodenetworks:
+ # Update node network
+ optional = {}
+ if nodenetwork['method'] == 'static':
+ for key in 'ip', 'netmask', 'network', 'broadcast', 'gateway', 'dns1':
+ optional[key] = socket.inet_ntoa(struct.pack('>L', locals()[key]))
+
+ print "AdmUpdateNodeNetwork(%s)" % nodenetwork['method'],
+ AdmUpdateNodeNetwork(admin, nodenetwork['nodenetwork_id'], optional)
+ print "=> OK"
+
+ # Check node network again
+ print "AdmGetAllNodeNetworks(%d)" % node_id,
+ nodenetworks = AdmGetAllNodeNetworks(admin, node_id)
+ for nodenetwork in nodenetworks:
+ if nodenetwork['method'] == 'static':
+ for key in 'ip', 'netmask', 'network', 'broadcast', 'gateway', 'dns1':
+ address = struct.unpack('>L', socket.inet_aton(nodenetwork[key]))[0]
+ assert address == locals()[key]
+ print "=>", [nodenetwork['nodenetwork_id'] for nodenetwork in nodenetworks]
+
+ # Delete node network
+ for nodenetwork in nodenetworks:
+ print "AdmDeleteNodeNetwork(%d, %d)" % (node_id, nodenetwork['nodenetwork_id']),
+ AdmDeleteNodeNetwork(admin, node_id, nodenetwork['nodenetwork_id'])
+ print "=>", "OK"
+ assert not AdmGetAllNodeNetworks(admin, node_id)
+