1 #!/usr/bin/env /usr/share/plc_api/plcsh
5 # Copyright (C) 2006 The Trustees of Princeton University
9 from pprint import pprint
10 from string import letters, digits, punctuation
12 from traceback import print_exc
22 from qa.Config import Config
23 from qa.logger import Logfile, log
24 from random import Random
27 boot_states = [u'boot', u'dbg', u'inst', u'new', u'rcnf', u'rins']
29 methods = [u'static', u'dhcp', u'proxy', u'tap', u'ipmi', u'unknown']
32 attribute_types = range(6,20)
36 def randfloat(min = 0.0, max = 1.0):
37 return float(min) + (random.random() * (float(max) - float(min)))
39 def randint(min = 0, max = 1):
40 return int(randfloat(min, max + 1))
43 return random.sample([True, False], 1)[0]
44 # See "2.2 Characters" in the XML specification:
46 # #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]
48 # [#x7F-#x84], [#x86-#x9F], [#xFDD0-#xFDDF]
50 ascii_xml_chars = map(unichr, [0x9, 0xA, 0xD])
51 ascii_xml_chars += map(unichr, xrange(0x20, 0x7F - 1))
52 low_xml_chars = list(ascii_xml_chars)
53 low_xml_chars += map(unichr, xrange(0x84 + 1, 0x86 - 1))
54 low_xml_chars += map(unichr, xrange(0x9F + 1, 0xFF))
55 valid_xml_chars = list(low_xml_chars)
56 valid_xml_chars += map(unichr, xrange(0xFF + 1, 0xD7FF))
57 valid_xml_chars += map(unichr, xrange(0xE000, 0xFDD0 - 1))
58 valid_xml_chars += map(unichr, xrange(0xFDDF + 1, 0xFFFD))
60 def randstr(length, pool = valid_xml_chars, encoding = "utf-8"):
61 sample = random.sample(pool, min(length, len(pool)))
64 bytes = len(s.encode(encoding))
68 sample += random.sample(pool, min(length - bytes, len(pool)))
69 random.shuffle(sample)
75 # 1. Each part begins and ends with a letter or number.
76 # 2. Each part except the last can contain letters, numbers, or hyphens.
77 # 3. Each part is between 1 and 64 characters, including the trailing dot.
78 # 4. At least two parts.
79 # 5. Last part can only contain between 2 and 6 letters.
80 hostname = 'a' + randstr(61, letters + digits + '-') + '1.' + \
81 'b' + randstr(61, letters + digits + '-') + '2.' + \
82 'c' + randstr(5, letters)
87 for i in range(randint(1, 10)):
88 parts.append(randstr(randint(1, 30), ascii_xml_chars))
89 return os.sep.join(parts)[0:length]
92 return (randstr(100, letters + digits) + "@" + randhostname()).lower()
94 def randkey(bits = 2048):
95 key_types = ["ssh-dss", "ssh-rsa"]
96 key_type = random.sample(key_types, 1)[0]
97 return ' '.join([key_type,
98 base64.b64encode(''.join(randstr(bits / 8).encode("utf-8"))),
103 'name': randstr(254),
104 'abbreviated_name': randstr(50),
105 'login_base': randstr(20, letters).lower(),
106 'latitude': int(randfloat(-90.0, 90.0) * 1000) / 1000.0,
107 'longitude': int(randfloat(-180.0, 180.0) * 1000) / 1000.0,
114 'peername': randstr(254),
115 'peer_url': "https://" + randhostname() + "/",
116 'key': base64.b64encode(''.join(randstr(bits / 8).encode("utf-8"))),
117 'cacert': base64.b64encode(''.join(randstr(bits / 8).encode("utf-8")))
119 def random_address_type():
122 'description': randstr(254),
125 def random_address():
127 'line1': randstr(254),
128 'line2': randstr(254),
129 'line3': randstr(254),
130 'city': randstr(254),
131 'state': randstr(254),
132 'postalcode': randstr(64),
133 'country': randstr(128),
138 'first_name': randstr(128),
139 'last_name': randstr(128),
140 'email': randemail(),
142 # Accounts are disabled by default
144 'password': randstr(254),
149 'key_type': random.sample(key_types, 1)[0],
155 'name': random.sample(login_bases, 1)[0] + "_" + randstr(11, letters).lower(),
156 'url': "http://" + randhostname() + "/",
157 'description': randstr(2048),
160 def random_nodegroup():
163 'description': randstr(200),
168 'hostname': randhostname(),
169 'boot_state': random.sample(boot_states, 1)[0],
170 'model': randstr(255),
171 'version': randstr(64),
172 'session': randstr(20)
175 def random_nodenetwork():
176 nodenetwork_fields = {
177 'method': random.sample(methods, 1)[0],
178 'type': random.sample(types, 1)[0],
179 'bwlimit': randint(500000, 10000000),
182 if nodenetwork_fields['method'] != 'dhcp':
183 ip = randint(0, 0xffffffff)
184 netmask = (0xffffffff << randint(2, 31)) & 0xffffffff
185 network = ip & netmask
186 broadcast = ((ip & netmask) | ~netmask) & 0xffffffff
187 gateway = randint(network + 1, broadcast - 1)
188 dns1 = randint(0, 0xffffffff)
190 for field in 'ip', 'netmask', 'network', 'broadcast', 'gateway', 'dns1':
191 nodenetwork_fields[field] = socket.inet_ntoa(struct.pack('>L', locals()[field]))
193 return nodenetwork_fields
195 def random_nodenetwork_setting():
200 def random_nodenetwork_setting_type():
203 'description': randstr(50),
204 'category': randstr(20),
205 'min_role_id': random.sample(roles, 1)[0]
210 'hostname': randhostname(),
211 'ip': socket.inet_ntoa(struct.pack('>L', randint(0, 0xffffffff))),
212 'protocol': randstr(16),
213 'username': randstr(254),
214 'password': randstr(254),
215 'notes': randstr(254),
216 'model': randstr(32),
219 def random_conf_file():
221 'enabled': bool(randint()),
222 'source': randpath(255),
223 'dest': randpath(255),
224 'file_permissions': "%#o" % randint(0, 512),
225 'file_owner': randstr(32, letters + '_' + digits),
226 'file_group': randstr(32, letters + '_' + digits),
227 'preinstall_cmd': randpath(100),
228 'postinstall_cmd': randpath(100),
229 'error_cmd': randpath(100),
230 'ignore_cmd_errors': bool(randint()),
231 'always_update': bool(randint()),
234 def random_attribute_type():
236 'name': randstr(100),
237 'description': randstr(254),
238 'min_role_id': int(random.sample(roles, 1)[0]),
241 def random_pcu_type():
243 'model': randstr(254),
244 'name': randstr(254),
247 def random_pcu_protocol_type():
249 'port': randint(0, 65535),
250 'protocol': randstr(254),
251 'supported': randbool()
254 def random_slice_instantiation():
256 'instantiation': randstr(10)
258 def random_slice_attribute():
260 'attribute_type_id': random.sample(attribute_types, 1)[0],
265 def random_initscript():
268 'enabled': randbool(),
269 'script': randstr(200)
274 'role_id': randint(1000),
278 def random_message():
280 'message_id': randstr(10),
281 'subject': randstr(100),
282 'template': randstr(254),
285 class api_unit_test(Test):
295 pcu_protocol_types = 2,
303 nodenetwork_setting_types = 2,
304 nodenetwork_settings = 2,
305 slice_attribute_types = 2,
306 slice_instantiations = 2,
308 slice_attributes = 4,
316 plc = self.config.get_plc(plc_name)
317 self.api = plc.config.api
318 self.auth = plc.config.auth
319 self.logfile = Logfile(self.config.logfile.dir + 'api-unittest.log')
321 # Filter out deprecated (Adm) and boot Methods
322 current_methods = lambda method: not method.startswith('Adm') and \
323 not method.startswith('Slice') and \
324 not method.startswith('Boot') and \
325 not method.startswith('Anon') and \
326 not method.startswith('system')
327 self.all_methods = set(filter(current_methods, self.api.system.listMethods()))
328 self.methods_tested = set()
329 self.methods_failed = set()
331 # Begin testing methods
334 if hasattr(self, 'BootStates'): self.boot_states = self.BootStates(boot_states)
335 if hasattr(self, 'Sites'): self.site_ids = self.Sites(sites)
336 if hasattr(self, 'Peers'): self.peer_ids = self.Peers(peers)
337 if hasattr(self, 'AddressTypes'): self.address_type_ids = self.AddressTypes(address_types)
338 if hasattr(self, 'Addresses'): self.address_ids = self.Addresses(addresses)
339 if hasattr(self, 'PCUTypes'): self.pcu_type_ids = self.PCUTypes(pcu_types)
340 if hasattr(self, 'PCUProtocolTypes'): self.pcu_protocol_type_ids = self.PCUProtocolTypes(pcu_protocol_types)
341 if hasattr(self, 'PCUs'): self.pcu_ids = self.PCUs(pcus)
342 if hasattr(self, 'NetworkMethods'): self.network_methods = self.NetworkMethods()
343 if hasattr(self, 'NetworkTypes'): self.network_types = self.NetworkTypes()
344 if hasattr(self, 'NodeGroups'): self.nodegroup_ids = self.NodeGroups()
345 if hasattr(self, 'Nodes'): self.node_ids = self.Nodes(nodes)
346 if hasattr(self, 'ConfFiles'): self.conf_file_ids = self.ConfFiles(conf_files)
347 if hasattr(self, 'NodeNetworks'): self.nodenetwork_ids = self.NodeNetworks(nodenetworks)
348 if hasattr(self, 'NodeNetworkSettingTypes'): self.nodenetwork_setting_type_ids = self.NodeNetworkSettingTypes(nodenetwork_setting_types)
349 if hasattr(self, 'NodeNetworkSettings'): self.nodenetwork_setting_ids = self.NodeNetworkSettings(nodenetwork_settings)
350 if hasattr(self, 'SliceAttributeTypes'): self.slice_attribute_type_ids = self.SliceAttributeTypes(slice_attribute_types)
351 if hasattr(self, 'SliceInstantiations'): self.slice_instantiations = self.SliceInstantiations(slice_instantiations)
352 if hasattr(self, 'Slices'): self.slice_ids = self.Slices(slices)
353 if hasattr(self, 'SliceAttributes'): self.slice_attribute_ids = self.SliceAttributes(slice_attributes)
354 if hasattr(self, 'InitScripts'): self.initscript_ids = self.InitScripts(initscripts)
355 if hasattr(self, 'Roles'): self.role_ids = self.Roles(roles)
356 if hasattr(self, 'Persons'): self.person_ids = self.Persons(persons)
357 if hasattr(self, 'KeyTypes'): self.key_types = self.KeyTypes(key_types)
358 if hasattr(self, 'Keys'): self.key_ids = self.Keys(keys)
359 if hasattr(self, 'Messages'): self.message_ids = self.Messages(messages)
360 if hasattr(self, 'Sessions'): self.session_ids = self.Sessions()
362 # Test misc Get calls
363 if hasattr(self, 'GenerateNodeConfFile'): self.GenerateNodeConfFile()
364 if hasattr(self, 'GetBootMedium'): self.GetBootMedium()
365 if hasattr(self, 'GetEventObjects'): self.event_object_ids = self.GetEventObjects()
366 if hasattr(self, 'GetEvents'): self.event_ids = self.GetEvents()
367 if hasattr(self, 'GetPeerData'): self.GetPeerData()
368 if hasattr(self, 'GetPeerName'): self.GetPeerName()
369 if hasattr(self, 'GetPlcRelease'): self.GetPlcRelease()
370 if hasattr(self, 'GetSliceKeys'): self.GetSliceKeys()
371 if hasattr(self, 'GetSliceTicket'): self.GetSliceTicket()
372 if hasattr(self, 'GetSlicesMD5'): self.GetSlicesMD5()
373 if hasattr(self, 'GetSlivers'): self.GetSlivers()
374 if hasattr(self, 'GetWhitelist'): self.GetWhitelist()
376 # Test various administrative methods
377 if hasattr(self, 'NotifyPersons'): self.NotifyPersons()
378 if hasattr(self, 'NotifySupport'): self.NotifySupport()
379 if hasattr(self, 'RebootNode'): self.RebootNode()
380 if hasattr(self, 'RefrestPeer'): self.RefreshPeer()
381 if hasattr(self, 'ResetPassword'): self.ResetPassword()
382 if hasattr(self, 'SetPersonPrimarySite'): self.SetPersonPrimarySite()
383 if hasattr(self, 'VerifyPerson'): self.VerifyPerson()
391 utils.header("writing api-unittest-summary.log")
392 methods_ok = list(self.methods_tested.difference(self.methods_failed))
393 methods_failed = list(self.methods_failed)
394 methods_untested = list(self.all_methods.difference(self.methods_tested))
396 methods_failed.sort()
397 methods_untested.sort()
398 print >> self.logfile, "\n".join([m+": [OK]" for m in methods_ok])
399 print >> self.logfile, "\n".join([m+": [FAILED]" for m in methods_failed])
400 print >> self.logfile, "\n".join([m+": [Not Tested]" for m in methods_untested])
402 def isequal(self, object_fields, expected_fields, method_name):
404 for field in expected_fields:
405 assert field in object_fields
406 assert object_fields[field] == expected_fields[field]
408 self.methods_failed.update([method_name])
412 def islistequal(self, list1, list2, method_name):
413 try: assert set(list1) == set(list2)
415 self.methods_failed.update([method_name])
419 def isunique(self, id, id_list, method_name):
420 try: assert id not in id_list
422 self.methods_failed.update([method_name])
426 def isinlist(self, item, item_list, method_name):
427 try: assert item in item_list
429 self.methods_failed.update([method_name])
433 def debug(self, method, method_name=None):
434 if method_name is None:
436 method_name = method.name
437 self.methods_tested.update([method_name])
439 method_name = method._Method__name
440 self.methods_tested.update([method_name])
442 def wrapper(*args, **kwds):
444 return method(*args, **kwds)
446 self.methods_failed.update([method_name])
447 print >> self.logfile, "%s%s: %s\n" % (method_name, tuple(args[1:]), traceback.format_exc())
453 if hasattr(self, 'session_ids'): self.DeleteSessions()
454 if hasattr(self, 'message_ids'): self.DeleteMessages()
455 if hasattr(self, 'key_types'): self.DeleteKeyTypes()
456 if hasattr(self, 'key_ids'): self.DeleteKeys()
457 if hasattr(self, 'person_ids'): self.DeletePersons()
458 if hasattr(self, 'role_ids'): self.DeleteRoles()
459 if hasattr(self, 'initscript_ids'): self.DeleteInitScripts()
460 if hasattr(self, 'slice_attribute_ids'): self.DeleteSliceAttributes()
461 if hasattr(self, 'slice_ids'): self.DeleteSlices()
462 if hasattr(self, 'slice_instantiations'): self.DeleteSliceInstantiations()
463 if hasattr(self, 'slice_attribute_type_ids'): self.DeleteSliceAttributeTypes()
464 if hasattr(self, 'nodenetwork_setting_ids'): self.DeleteNodeNetworkSettings()
465 if hasattr(self, 'nodenetwork_setting_type_ids'): self.DeleteNodeNetworkSettingTypes()
466 if hasattr(self, 'nodenetwork_ids'): self.DeleteNodeNetworks()
467 if hasattr(self, 'conf_file_ids'): self.DeleteConfFiles()
468 if hasattr(self, 'node_ids'): self.DeleteNodes()
469 if hasattr(self, 'nodegroup_ids'): self.DeleteNodeGroups()
470 if hasattr(self, 'network_types'): self.DeleteNetworkTypes()
471 if hasattr(self, 'network_methods'): self.DeleteNetworkMethods()
472 if hasattr(self, 'pcu_ids'): self.DeletePCUs()
473 if hasattr(self, 'pcu_protocol_type_ids'): self.DeletePCUProtocolTypes()
474 if hasattr(self, 'pcu_type_ids'): self.DeletePCUTypes()
475 if hasattr(self, 'address_ids'): self.DeleteAddresses()
476 if hasattr(self, 'address_type_ids'): self.DeleteAddressTypes()
477 if hasattr(self, 'peer_ids'): self.DeletePeers()
478 if hasattr(self, 'site_ids'): self.DeleteSites()
479 if hasattr(self, 'boot_states'): self.DeleteBootStates()
482 def Sites(self, n=4):
486 site_fields = random_site()
487 AddSite = self.debug(self.api.AddSite)
488 site_id = AddSite(self.auth, site_fields)
489 if site_id is None: continue
491 # Should return a unique id
492 self.isunique(site_id, site_ids, 'AddSite - isunique')
493 site_ids.append(site_id)
494 GetSites = self.debug(self.api.GetSites)
495 sites = GetSites(self.auth, [site_id])
496 if sites is None: continue
498 self.isequal(site, site_fields, 'AddSite - isequal')
501 site_fields = random_site()
502 UpdateSite = self.debug(self.api.UpdateSite)
503 result = UpdateSite(self.auth, site_id, site_fields)
507 sites = GetSites(self.auth, [site_id])
508 if sites is None: continue
510 self.isequal(site, site_fields, 'UpdateSite - isequal')
512 sites = GetSites(self.auth, site_ids)
513 if sites is not None:
514 self.islistequal(site_ids, [site['site_id'] for site in sites], 'GetSites - isequal')
516 if self.config.verbose:
517 utils.header("Added sites: %s" % site_ids)
522 def DeleteSites(self):
524 DeleteSite = self.debug(self.api.DeleteSite)
525 for site_id in self.site_ids:
526 result = DeleteSite(self.auth, site_id)
528 # Check if sites are deleted
529 GetSites = self.debug(self.api.GetSites)
530 sites = GetSites(self.auth, self.site_ids)
531 self.islistequal(sites, [], 'DeleteSite - check')
533 if self.config.verbose:
534 utils.header("Deleted sites: %s" % self.site_ids)
538 def NetworkMethods(self, n=2):
540 AddNetworkMethod = self.debug(self.api.AddNetworkMethod)
541 GetNetworkMethods = self.debug(self.api.GetNetworkMethods)
545 net_method = randstr(10)
546 AddNetworkMethod(self.auth, net_method)
547 if net_method is None: continue
549 # Should return a unique id
550 self.isunique(net_method, methods, 'AddNetworkMethod - isunique')
551 methods.append(net_method)
552 net_methods = GetNetworkMethods(self.auth)
553 if net_methods is None: continue
554 net_methods = filter(lambda x: x in [net_method], net_methods)
555 method = net_methods[0]
556 self.isequal(method, net_method, 'AddNetworkMethod - isequal')
559 net_methods = GetNetworkMethods(self.auth)
560 if net_methods is not None:
561 net_methods = filter(lambda x: x in methods, net_methods)
562 self.islistequal(methods, net_methods, 'GetNetworkMethods - isequal')
564 if self.config.verbose:
565 utils.header("Added network methods: %s" % methods)
569 def DeleteNetworkMethods(self):
570 DeleteNetworkMethod = self.debug(self.api.DeleteNetworkMethod)
571 GetNetworkMethods = self.debug(self.api.GetNetworkMethods)
572 for method in self.network_methods:
573 DeleteNetworkMethod(self.auth, method)
576 network_methods = GetNetworkMethods(self.auth)
577 network_methods = filter(lambda x: x in self.network_methods, network_methods)
578 self.islistequal(network_methods, [], 'DeleteNetworkMethods - check')
580 if self.config.verbose:
581 utils.header("Deleted network methods: %s" % self.network_methods)
582 self.network_methods = []
584 def NetworkTypes(self, n=2):
586 AddNetworkType = self.debug(self.api.AddNetworkType)
587 GetNetworkTypes = self.debug(self.api.GetNetworkTypes)
592 AddNetworkType(self.auth, type)
594 # Should return a unique id
595 self.isunique(type, net_types, 'AddNetworkType - isunique')
596 net_types.append(type)
597 types = GetNetworkTypes(self.auth)
598 if types is None: continue
599 types = filter(lambda x: x in [type], types)
600 if types is None: continue
602 self.isequal(net_type, type, 'AddNetworkType - isequal')
604 types = GetNetworkTypes(self.auth)
605 if types is not None:
606 types = filter(lambda x: x in net_types, types)
607 self.islistequal(types, net_types, 'GetNetworkTypes - isequal')
609 if self.config.verbose:
610 utils.header("Added network types: %s" % net_types)
614 def DeleteNetworkTypes(self):
615 DeleteNetworkType = self.debug(self.api.DeleteNetworkType)
616 GetNetworkTypes = self.debug(self.api.GetNetworkTypes)
617 for type in self.network_types:
618 DeleteNetworkType(self.auth, type)
621 network_types = GetNetworkTypes(self.auth)
622 network_types = filter(lambda x: x in self.network_types, network_types)
623 self.islistequal(network_types, [], 'DeleteNetworkTypes - check')
625 if self.config.verbose:
626 utils.header("Deleted network types: %s" % self.network_types)
627 self.network_types = []
630 def NodeGroups(self, n = 4):
632 AddNodeGroup = self.debug(self.api.AddNodeGroup)
633 UpdateNodeGroup = self.debug(self.api.UpdateNodeGroup)
634 GetNodeGroups = self.debug(self.api.GetNodeGroups)
638 nodegroup_fields = random_nodegroup()
639 nodegroup_id = AddNodeGroup(self.auth, nodegroup_fields)
640 if nodegroup_id is None: continue
642 # Should return a unique id
643 self.isunique(nodegroup_id, nodegroup_ids, 'AddNodeGroup - isunique')
644 nodegroup_ids.append(nodegroup_id)
645 nodegroups = GetNodeGroups(self.auth, [nodegroup_id])
646 if nodegroups is None: continue
647 nodegroup = nodegroups[0]
648 self.isequal(nodegroup, nodegroup_fields, 'AddNodeGroup - isequal')
651 nodegroup_fields = random_nodegroup()
652 UpdateNodeGroup(self.auth, nodegroup_id, nodegroup_fields)
655 nodegroups = GetNodeGroups(self.auth, [nodegroup_id])
656 if nodegroups is None: continue
657 nodegroup = nodegroups[0]
658 self.isequal(nodegroup, nodegroup_fields, 'UpdateNodeGroup - isequal')
660 nodegroups = GetNodeGroups(self.auth, nodegroup_ids)
661 if nodegroups is not None:
662 self.islistequal(nodegroup_ids, [n['nodegroup_id'] for n in nodegroups], 'GetNodeGroups - isequal')
663 if self.config.verbose:
664 utils.header("Added nodegroups: %s" % nodegroup_ids)
668 def DeleteNodeGroups(self):
669 # Delete all NodeGroups
670 GetNodeGroups = self.debug(self.api.GetNodeGroups)
671 DeleteNodeGroup = self.debug(self.api.DeleteNodeGroup)
673 for nodegroup_id in self.nodegroup_ids:
674 result = DeleteNodeGroup(self.auth, nodegroup_id)
676 # Check is nodegroups are deleted
677 nodegroups = GetNodeGroups(self.auth, self.nodegroup_ids)
678 self.islistequal(nodegroups, [], 'DeleteNodeGroup - check')
680 if self.config.verbose:
681 utils.header("Deleted nodegroups: %s" % self.nodegroup_ids)
683 self.nodegroup_ids = []
685 def PCUTypes(self, n=2):
687 AddPCUType = self.debug(self.api.AddPCUType)
688 UpdatePCUType = self.debug(self.api.UpdatePCUType)
689 GetPCUTypes = self.debug(self.api.GetPCUTypes)
693 pcu_type_fields = random_pcu_type()
694 pcu_type_id = AddPCUType(self.auth, pcu_type_fields)
695 if pcu_type_id is None: continue
696 # Should return a unique id
697 self.isunique(pcu_type_id, pcu_type_ids, 'AddPCUType - isunique')
698 pcu_type_ids.append(pcu_type_id)
701 pcu_types = GetPCUTypes(self.auth, [pcu_type_id])
702 if pcu_types is None: continue
703 pcu_type = pcu_types[0]
704 self.isequal(pcu_type, pcu_type_fields, 'AddPCUType - isequal')
707 pcu_type_fields = random_pcu_type()
708 UpdatePCUType(self.auth, pcu_type_id, pcu_type_fields)
711 pcu_types = GetPCUTypes(self.auth, [pcu_type_id])
712 if pcu_types is None: continue
713 pcu_type = pcu_types[0]
714 self.isequal(pcu_type, pcu_type_fields, 'UpdatePCUType - isequal')
716 pcu_types = GetPCUTypes(self.auth, pcu_type_ids)
717 if pcu_types is not None:
718 self.islistequal(pcu_type_ids, [p['pcu_type_id'] for p in pcu_types], 'GetPCUTypes - check')
720 if self.config.verbose:
721 utils.header("Added pcu_types: %s " % pcu_type_ids)
724 def DeletePCUTypes(self):
725 GetPCUTypes = self.debug(self.api.GetPCUTypes)
726 DeletePCUType = self.debug(self.api.DeletePCUType)
728 for pcu_type_id in self.pcu_type_ids:
729 DeletePCUType(self.auth, pcu_type_id)
731 pcu_types = GetPCUTypes(self.auth, self.pcu_type_ids)
732 self.islistequal(pcu_types, [], 'DeletePCUType - check')
734 def PCUProtocolTypes(self, n=2):
735 protocol_type_ids = []
736 AddPCUProtocolType = self.debug(self.api.AddPCUProtocolType)
737 UpdatePCUProtocolType = self.debug(self.api.UpdatePCUProtocolType)
738 GetPCUProtocolTypes = self.debug(self.api.GetPCUProtocolTypes)
741 # Add PCUProtocolType
742 protocol_type_fields = random_pcu_protocol_type()
743 pcu_type_id = random.sample(self.pcu_type_ids, 1)[0]
744 protocol_type_id = AddPCUProtocolType(self.auth, pcu_type_id, protocol_type_fields)
745 if protocol_type_id is None: continue
747 # Should return a unique id
748 self.isunique(protocol_type_id, protocol_type_ids, 'AddPCUProtocolType - isunique')
749 protocol_type_ids.append(protocol_type_id)
751 # Check protocol type
752 protocol_types = GetPCUProtocolTypes(self.auth, [protocol_type_id])
753 if protocol_types is None: continue
754 protocol_type = protocol_types[0]
755 self.isequal(protocol_type, protocol_type_fields, 'AddPCUProtocolType - isequal')
757 # Update protocol type
758 protocol_type_fields = random_pcu_protocol_type()
759 UpdatePCUProtocolType(self.auth, protocol_type_id, protocol_type_fields)
762 protocol_types = GetPCUProtocolTypes(self.auth, [protocol_type_id])
763 if protocol_types is None: continue
764 protocol_type = protocol_types[0]
765 self.isequal(protocol_type, protocol_type_fields, 'UpdatePCUProtocolType - isequal')
767 protocol_types = GetPCUProtocolTypes(self.auth, protocol_type_ids)
768 if protocol_types is not None:
769 pt_ids = [p['pcu_protocol_type_id'] for p in protocol_types]
770 self.islistequal(protocol_type_ids, pt_ids, 'GetPCUProtocolTypes - isequal')
772 if self.config.verbose:
773 utils.header('Added pcu_protocol_types: %s' % protocol_type_ids)
775 return protocol_type_ids
777 def DeletePCUProtocolTypes(self):
778 GetPCUProtocolTypes = self.debug(self.api.GetPCUProtocolTypes)
779 DeletePCUProtocolType = self.debug(self.api.DeletePCUProtocolType)
781 for protocol_type_id in self.pcu_protocol_type_ids:
782 DeletePCUProtocolType(self.auth, protocol_type_id)
785 protocol_types = GetPCUProtocolTypes(self.auth, self.pcu_protocol_type_ids)
786 self.islistequal(protocol_types, [], 'DeletePCUProtocolType - check')
788 if self.config.verbose:
789 utils.header("Deleted pcu_protocol_types: %s" % self.pcu_protocol_type_ids)
790 self.pcu_protocol_type_ids = []
792 def PCUs(self, n = 4):
794 AddPCU = self.debug(self.api.AddPCU)
795 UpdatePCU = self.debug(self.api.UpdatePCU)
796 GetPCUs = self.debug(self.api.GetPCUs)
798 for site_id in self.site_ids:
800 pcu_fields = random_pcu()
801 pcu_id = AddPCU(self.auth, site_id, pcu_fields)
802 if pcu_id is None: continue
804 # Should return a unique id
805 self.isunique(pcu_id, pcu_ids, 'AddPCU - isunique')
806 pcu_ids.append(pcu_id)
809 pcus = GetPCUs(self.auth, [pcu_id])
810 if pcus is None: continue
812 self.isequal(pcu, pcu_fields, 'AddPCU - isequal')
815 pcu_fields = random_pcu()
816 UpdatePCU(self.auth, pcu_id, pcu_fields)
819 pcus = GetPCUs(self.auth, [pcu_id])
820 if pcus is None: continue
822 self.isequal(pcu, pcu_fields, 'UpdatePCU - isequal')
824 pcus = GetPCUs(self.auth, pcu_ids)
826 self.islistequal(pcu_ids, [p['pcu_id'] for p in pcus], 'GetPCUs - isequal')
828 if self.config.verbose:
829 utils.header('Added pcus: %s' % pcu_ids)
833 def DeletePCUs(self):
834 GetPCUs = self.debug(self.api.GetPCUs)
835 DeletePCU = self.debug(self.api.DeletePCU)
837 for pcu_id in self.pcu_ids:
838 DeletePCU(self.auth, pcu_id)
841 pcus = GetPCUs(self.auth, self.pcu_ids)
842 self.islistequal(pcus, [], 'DeletePCU - check')
844 if self.config.verbose:
845 utils.header("Deleted pcus: %s " % self.pcu_ids)
848 def Nodes(self, n=4):
850 AddNode = self.debug(self.api.AddNode)
851 GetNodes = self.debug(self.api.GetNodes)
852 UpdateNode = self.debug(self.api.UpdateNode)
855 node_fields = random_node()
856 site_id = random.sample(self.site_ids, 1)[0]
857 node_id = AddNode(self.auth, site_id, node_fields)
858 if node_id is None: continue
860 # Should return a unique id
861 self.isunique(node_id, node_ids, 'AddNode - isunique')
862 node_ids.append(node_id)
865 nodes = GetNodes(self.auth, [node_id])
866 if nodes is None: continue
868 self.isequal(node, node_fields, 'AddNode - isequal')
871 node_fields = random_node()
872 result = UpdateNode(self.auth, node_id, node_fields)
875 nodes = GetNodes(self.auth, [node_id])
876 if nodes is None: continue
878 self.isequal(node, node_fields, 'UpdateNode - isequal')
880 # Add node to nodegroup
881 nodegroup_id = random.sample(self.nodegroup_ids, 1)[0]
882 AddNodeToNodeGroup = self.debug(self.api.AddNodeToNodeGroup)
883 AddNodeToNodeGroup(self.auth, node_id, nodegroup_id)
886 sites = self.api.GetSites(self.auth, [node['site_id']], ['pcu_ids'])
887 if not sites: continue
889 pcu_id = random.sample(site['pcu_ids'], 1)[0]
890 port = random.sample(range(65535), 1)[0]
891 AddNodeToPCU = self.debug(self.api.AddNodeToPCU)
892 AddNodeToPCU(self.auth, node_id, pcu_id, port)
894 # check nodegroup, pcu
895 nodes = GetNodes(self.auth, [node_id], ['nodegroup_ids', 'pcu_ids'])
896 if nodes is None or not nodes: continue
898 self.islistequal([nodegroup_id], node['nodegroup_ids'], 'AddNodeToNodeGroup - check')
899 self.islistequal([pcu_id], node['pcu_ids'], 'AddNodeToPCU - check')
901 nodes = GetNodes(self.auth, node_ids)
902 if nodes is not None:
903 self.islistequal(node_ids, [node['node_id'] for node in nodes], 'GetNodes - isequal')
905 if self.config.verbose:
906 utils.header("Added nodes: %s" % node_ids)
910 def DeleteNodes(self):
912 # Delete attributes manually for first node
913 GetNodes = self.debug(self.api.GetNodes)
914 nodes = GetNodes(self.auth, self.node_ids)
915 if nodes is None or not nodes: return 0
918 if node['nodegroup_ids']:
920 nodegroup_id = random.sample(node['nodegroup_ids'], 1)[0]
921 DeleteNodeFromNodeGroup = self.debug(self.api.DeleteNodeFromNodeGroup)
922 DeleteNodeFromNodeGroup(self.auth, node['node_id'], nodegroup_id)
926 pcu_id = random.sample(node['pcu_ids'], 1)[0]
927 DeleteNodeFromPCU = self.debug(self.api.DeleteNodeFromPCU)
928 DeleteNodeFromPCU(self.auth, node['node_id'], pcu_id)
930 # check nodegroup, pcu
931 nodes = GetNodes(self.auth, [node['node_id']])
932 if nodes is None or not nodes: return 0
933 self.islistequal([], node['nodegroup_ids'], 'DeleteNodeGromNodeGroup - check')
934 self.islistequal([], node['pcu_ids'], 'DeleteNodeFromPCU - check')
936 # Delete rest of nodes
937 DeleteNode = self.debug(self.api.DeleteNode)
938 for node_id in self.node_ids:
939 result = DeleteNode(self.auth, node_id)
941 # Check if nodes are deleted
942 GetNodes = self.debug(self.api.GetNodes)
943 nodes = GetNodes(self.auth, self.node_ids)
944 self.islistequal(nodes, [], 'DeleteNode Check')
946 if self.config.verbose:
947 utils.header("Deleted nodes: %s" % self.node_ids)
951 def AddressTypes(self, n = 3):
952 address_type_ids = []
954 address_type_fields = random_address_type()
955 AddAddressType = self.debug(self.api.AddAddressType)
956 address_type_id = AddAddressType(self.auth, address_type_fields)
957 if address_type_id is None: continue
959 # Should return a unique address_type_id
960 self.isunique(address_type_id, address_type_ids, 'AddAddressType - isunique')
961 address_type_ids.append(address_type_id)
964 GetAddressTypes = self.debug(self.api.GetAddressTypes)
965 address_types = GetAddressTypes(self.auth, [address_type_id])
966 if address_types is None: continue
967 address_type = address_types[0]
968 self.isequal(address_type, address_type_fields, 'AddAddressType - isequal')
970 # Update address type
971 address_type_fields = random_address_type()
972 UpdateAddressType = self.debug(self.api.UpdateAddressType)
973 result = UpdateAddressType(self.auth, address_type_id, address_type_fields)
974 if result is None: continue
976 # Check address type again
977 address_types = GetAddressTypes(self.auth, [address_type_id])
978 if address_types is None: continue
979 address_type = address_types[0]
980 self.isequal(address_type, address_type_fields, 'UpdateAddressType - isequal')
982 # Check get all address types
983 address_types = GetAddressTypes(self.auth, address_type_ids)
984 if address_types is not None:
985 self.islistequal(address_type_ids, [address_type['address_type_id'] for address_type in address_types], 'GetAddressTypes - isequal')
987 if self.config.verbose:
988 utils.header("Added address types: %s " % address_type_ids)
990 return address_type_ids
992 def DeleteAddressTypes(self):
994 DeleteAddressType = self.debug(self.api.DeleteAddressType)
995 for address_type_id in self.address_type_ids:
996 DeleteAddressType(self.auth, address_type_id)
998 GetAddressTypes = self.debug(self.api.GetAddressTypes)
999 address_types = GetAddressTypes(self.auth, self.address_type_ids)
1000 self.islistequal(address_types, [], 'DeleteAddressType - check')
1002 if self.config.verbose:
1003 utils.header("Deleted address types: %s" % self.address_type_ids)
1005 self.address_type_ids = []
1007 def Addresses(self, n = 3):
1009 AddSiteAddress = self.debug(self.api.AddSiteAddress)
1010 GetAddresses = self.debug(self.api.GetAddresses)
1011 UpdateAddress = self.debug(self.api.UpdateAddress)
1012 AddAddressTypeToAddress = self.debug(self.api.AddAddressTypeToAddress)
1014 address_fields = random_address()
1015 site_id = random.sample(self.site_ids, 1)[0]
1016 address_id = AddSiteAddress(self.auth, site_id, address_fields)
1017 if address_id is None: continue
1019 # Should return a unique address_id
1020 self.isunique(address_id, address_ids, 'AddSiteAddress - isunique')
1021 address_ids.append(address_id)
1024 addresses = GetAddresses(self.auth, [address_id])
1025 if addresses is None: continue
1026 address = addresses[0]
1027 self.isequal(address, address_fields, 'AddSiteAddress - isequal')
1030 address_fields = random_address()
1031 result = UpdateAddress(self.auth, address_id, address_fields)
1034 addresses = GetAddresses(self.auth, [address_id])
1035 if addresses is None: continue
1036 address = addresses[0]
1037 self.isequal(address, address_fields, 'UpdateAddress - isequal')
1040 address_type_id = random.sample(self.address_type_ids, 1)[0]
1041 AddAddressTypeToAddress(self.auth, address_type_id, address_id)
1044 addresses = GetAddresses(self.auth, [address_id], ['address_type_ids'])
1045 if addresses is None or not addresses: continue
1046 address = addresses[0]
1047 self.islistequal([address_type_id], address['address_type_ids'], 'AddAddressTypeToAddress - check')
1049 addresses = GetAddresses(self.auth, address_ids)
1050 if addresses is not None:
1051 self.islistequal(address_ids, [ad['address_id'] for ad in addresses], 'GetAddresses - isequal')
1053 if self.config.verbose:
1054 utils.header("Added addresses: %s" % address_ids)
1058 def DeleteAddresses(self):
1060 DeleteAddress = self.debug(self.api.DeleteAddress)
1061 DeleteAddressTypeFromAddress = self.debug(self.api.DeleteAddressTypeFromAddress)
1062 GetAddresses = self.debug(self.api.GetAddresses)
1064 # Delete attributes mananually first
1065 addresses = GetAddresses(self.auth, self.address_ids, ['address_id', 'address_type_ids'])
1066 if addresses is None or not addresses: return 0
1067 address = addresses[0]
1069 if address['address_type_ids']:
1070 address_type_id = random.sample(address['address_type_ids'], 1)[0]
1071 DeleteAddressTypeFromAddress(self.auth, address_type_id, address['address_id'])
1073 # check address_type_ids
1074 addresses = GetAddresses(self.auth, [address['address_id']], ['address_type_ids'])
1075 if addresses is None or not addresses: return 0
1076 address = addresses[0]
1077 self.islistequal([], address['address_type_ids'], 'DeleteAddressTypeFromAddress - check')
1079 # Delete site addresses
1080 for address_id in self.address_ids:
1081 result = DeleteAddress(self.auth, address_id)
1084 addresses = GetAddresses(self.auth, self.address_ids)
1085 self.islistequal(addresses, [], 'DeleteAddress - check')
1086 if self.config.verbose:
1087 utils.header("Deleted addresses: %s" % self.address_ids)
1089 self.address_ids = []
1091 def SliceAttributeTypes(self, n = 2):
1092 attribute_type_ids = []
1093 AddSliceAttributeType = self.debug(self.api.AddSliceAttributeType)
1094 GetSliceAttributeTypes = self.debug(self.api.GetSliceAttributeTypes)
1095 UpdateSliceAttributeType = self.debug(self.api.UpdateSliceAttributeType)
1098 attribute_type_fields = random_attribute_type()
1099 attribute_type_id = AddSliceAttributeType(self.auth, attribute_type_fields)
1100 if attribute_type_id is None: continue
1102 # Should return a unique slice_attribute_type_id
1103 self.isunique(attribute_type_id, attribute_type_ids, 'AddSliceAttributeType - isunique')
1104 attribute_type_ids.append(attribute_type_id)
1106 # Check slice_attribute_type
1107 attribute_types = GetSliceAttributeTypes(self.auth, [attribute_type_id])
1108 if attribute_types is None: continue
1109 attribute_type = attribute_types[0]
1110 self.isequal(attribute_type, attribute_type_fields, 'AddSliceAttributeType - isequal')
1112 # Update slice_attribute_type
1113 attribute_type_fields = random_attribute_type()
1114 result = UpdateSliceAttributeType(self.auth, attribute_type_id, attribute_type_fields)
1117 attribute_types = GetSliceAttributeTypes(self.auth, [attribute_type_id])
1118 if attribute_types is None: continue
1119 attribute_type = attribute_types[0]
1120 self.isequal(attribute_type, attribute_type_fields, 'UpdateSliceAttributeType - isequal')
1122 attribute_types = GetSliceAttributeTypes(self.auth, attribute_type_ids)
1123 if attribute_types is not None:
1124 at_ids = [at['attribute_type_id'] for at in attribute_types]
1125 self.islistequal(attribute_type_ids, at_ids, 'GetSliceAttributeTypes - isequal')
1127 if self.config.verbose:
1128 utils.header("Added slice_attribute_types: %s" % attribute_type_ids)
1130 return attribute_type_ids
1132 def DeleteSliceAttributeTypes(self):
1133 DeleteSliceAttributeType = self.debug(self.api.DeleteSliceAttributeType)
1134 GetSliceAttributeTypes = self.debug(self.api.GetSliceAttributeTypes)
1136 # Delete slice_attribute_type
1137 for slice_attribute_type_id in self.slice_attribute_type_ids:
1138 result = DeleteSliceAttributeType(self.auth, slice_attribute_type_id)
1141 slice_attribute_types = GetSliceAttributeTypes(self.auth, self.slice_attribute_type_ids)
1142 self.islistequal(slice_attribute_types, [], 'DeleteSliceAttributeTypes - check')
1143 if self.config.verbose:
1144 utils.header("Deleted slice_attributes: %s" % self.slice_attribute_type_ids)
1146 self.slice_attribute_type_ids = []
1148 def SliceInstantiations(self, n = 2):
1150 AddSliceInstantiation= self.debug(self.api.AddSliceInstantiation)
1151 GetSliceInstantiations = self.debug(self.api.GetSliceInstantiations)
1155 result = AddSliceInstantiation(self.auth, inst)
1156 if result is None: continue
1159 # Check slice instantiaton
1160 instantiations = GetSliceInstantiations(self.auth)
1161 if instantiations is None: continue
1162 instantiations = filter(lambda x: x in [inst], instantiations)
1163 instantiation = instantiations[0]
1164 self.isequal(instantiation, inst, 'AddSliceInstantiation - isequal')
1167 instantiations = GetSliceInstantiations(self.auth)
1168 if instantiations is not None:
1169 instantiations = filter(lambda x: x in insts, instantiations)
1170 self.islistequal(insts, instantiations, 'GetSliceInstantiations - isequal')
1172 if self.config.verbose:
1173 utils.header("Added slice instantiations: %s" % insts)
1177 def DeleteSliceInstantiations(self):
1178 DeleteSliceInstantiation = self.debug(self.api.DeleteSliceInstantiation)
1179 GetSliceInstantiations = self.debug(self.api.GetSliceInstantiations)
1180 # Delete slice instantiation
1181 for instantiation in self.slice_instantiations:
1182 result = DeleteSliceInstantiation(self.auth, instantiation)
1185 instantiations = GetSliceInstantiations(self.auth)
1186 instantiations = filter(lambda x: x in self.slice_instantiations, instantiations)
1187 self.islistequal(instantiations, [], 'DeleteSliceInstantiation - check')
1188 if self.config.verbose:
1189 utils.header("Deleted slice instantiations: %s" % self.slice_instantiations)
1191 self.slice_instantiations = []
1193 def Slices(self, n = 3):
1195 AddSlice = self.debug(self.api.AddSlice)
1196 GetSlices = self.debug(self.api.GetSlices)
1197 UpdateSlice = self.debug(self.api.UpdateSlice)
1198 AddSliceToNodes = self.debug(self.api.AddSliceToNodes)
1201 slice_fields = random_slice()
1202 slice_id = AddSlice(self.auth, slice_fields)
1203 if slice_id is None: continue
1205 # Should return a unique id
1206 self.isunique(slice_id, slice_ids, 'AddSlicel - isunique')
1207 slice_ids.append(slice_id)
1208 slices = GetSlices(self.auth, [slice_id])
1209 if slices is None: continue
1211 self.isequal(slice, slice_fields, 'AddSlice - isequal')
1214 slice_fields = random_slice()
1215 result = UpdateSlice(self.auth, slice_id, slice_fields)
1218 slices = GetSlices(self.auth, [slice_id])
1219 if slices is None: continue
1221 self.isequal(slice, slice_fields, 'UpdateSlice - isequal')
1224 node_id = random.sample(self.node_ids, 1)[0]
1225 AddSliceToNodes(self.auth, slice_id, [node_id])
1228 slices = GetSlices(self.auth, [slice_id], ['node_ids'])
1229 if slices is None or not slices: continue
1231 self.islistequal([node_id], slice['node_ids'], 'AddSliceToNode - check')
1233 slices = GetSlices(self.auth, slice_ids)
1234 if slices is not None:
1235 self.islistequal(slice_ids, [slice['slice_id'] for slice in slices], 'GetSlices - isequal')
1237 if self.config.verbose:
1238 utils.header("Added slices: %s" % slice_ids)
1242 def DeleteSlices(self):
1244 GetSlices = self.debug(self.api.GetSlices)
1245 DeleteSlice = self.debug(self.api.DeleteSlice)
1246 DeleteSliceFromNodes = self.debug(self.api.DeleteSliceFromNodes)
1248 # manually delete attributes for first slice
1249 slices = GetSlices(self.auth, self.slice_ids, ['slice_id', 'node_ids'])
1250 if slices is None or not slices: return 0
1253 if slice['node_ids']:
1254 # Delete node from slice
1255 node_id = random.sample(slice['node_ids'], 1)[0]
1256 DeleteSliceFromNodes(self.auth, slice['slice_id'], [node_id])
1259 slices = GetSlices(self.auth, [slice['slice_id']], ['node_ids'])
1260 if slices is None or not slices: return 0
1262 self.islistequal([], slice['node_ids'], 'DeleteSliceFromNode - check')
1264 # Have DeleteSlice automatically delete attriubtes for the rest
1265 for slice_id in self.slice_ids:
1267 DeleteSlice(self.auth, slice_id)
1269 # Check if slices are deleted
1270 GetSlices = self.debug(self.api.GetSlices)
1271 slices = GetSlices(self.auth, self.slice_ids)
1272 self.islistequal(slices, [], 'DeleteSlice - check')
1274 if self.config.verbose:
1275 utils.header("Deleted slices: %s" % self.slice_ids)
1279 def SliceAttributes(self, n = 4):
1281 AddSliceAttribute = self.debug(self.api.AddSliceAttribute)
1282 GetSliceAttributes = self.debug(self.api.GetSliceAttributes)
1283 UpdateSliceAttribute = self.debug(self.api.UpdateSliceAttribute)
1286 # Add slice attribute
1287 attribute_fields = random_slice_attribute()
1288 slice_id = random.sample(self.slice_ids, 1)[0]
1289 type = attribute_fields['attribute_type_id']
1290 value = attribute_fields['value']
1291 attribute_id = AddSliceAttribute(self.auth, slice_id, type, value)
1292 if attribute_id is None: continue
1294 # Should return a unique id
1295 self.isunique(attribute_id, attribute_ids, 'AddSliceAttribute - isunique')
1296 attribute_ids.append(attribute_id)
1299 attributes = GetSliceAttributes(self.auth, [attribute_id])
1300 if attributes is None: continue
1301 attribute = attributes[0]
1302 self.isequal(attribute, attribute_fields, 'AddSliceAttribute - isequal')
1305 attribute_fields = random_slice_attribute()
1306 type = attribute_fields['attribute_type_id']
1307 value = attribute_fields['value']
1308 result = UpdateSliceAttribute(self.auth, attribute_id, value)
1311 attributes = GetSliceAttributes(self.auth, [attribute_id])
1312 if attributes is None: continue
1313 attribute = attributes[0]
1314 self.isequal(attribute, attribute_fields, 'UpdateSliceAttribute - isequal')
1316 attributes = GetSliceAttributes(self.auth, attribute_ids)
1317 if attributes is not None:
1318 attr_ids = [a['slice_attribute_id'] for a in attributes]
1319 self.islistequal(attribute_ids, attr_ids, 'GetSliceAttributes - isequal')
1320 if self.config.verbose:
1321 utils.header("Added slice attributes: %s" % attribute_ids)
1323 return attribute_ids
1325 def DeleteSliceAttributes(self):
1326 DeleteSliceAttribute = self.debug(self.api.DeleteSliceAttribute)
1327 GetSliceAttributes = self.debug(self.api.GetSliceAttributes)
1329 for attribute_id in self.slice_attribute_ids:
1330 DeleteSliceAttribute(self.auth, attribute_id)
1332 attributes = GetSliceAttributes(self.auth, self.slice_attribute_ids)
1333 self.islistequal(attributes, [], 'DeleteSliceAttribute - check')
1335 if self.config.verbose:
1336 utils.header("Deleted slice attributes: %s" % self.slice_attribute_ids)
1338 self.slice_attribute_ids = []
1340 def InitScripts(self, n = 2):
1342 AddInitScript = self.debug(self.api.AddInitScript)
1343 GetInitScripts = self.debug(self.api.GetInitScripts)
1344 UpdateInitScript = self.debug(self.api.UpdateInitScript)
1347 initscript_fields = random_initscript()
1348 initscript_id = AddInitScript(self.auth, initscript_fields)
1350 # Should return a unique id
1351 self.isunique(initscript_id, initscript_ids, 'AddInitScript - isunique')
1352 initscript_ids.append(initscript_id)
1353 initscripts = GetInitScripts(self.auth, [initscript_id])
1354 if initscripts is None: continue
1355 initscript = initscripts[0]
1356 self.isequal(initscript, initscript_fields, 'AddInitScript - isequal')
1359 initscript_fields = random_initscript()
1360 result = UpdateInitScript(self.auth, initscript_id, initscript_fields)
1363 initscripts = GetInitScripts(self.auth, [initscript_id])
1364 if initscripts is None: continue
1365 initscript = initscripts[0]
1366 self.isequal(initscript, initscript_fields, 'UpdateInitScript - isequal')
1368 initscripts = GetInitScripts(self.auth, initscript_ids)
1369 if initscripts is not None:
1370 self.islistequal(initscript_ids, [i['initscript_id'] for i in initscripts], 'GetInitScripts -isequal')
1372 if self.config.verbose:
1373 utils.header("Added initscripts: %s" % initscript_ids)
1375 return initscript_ids
1377 def DeleteInitScripts(self):
1378 # Delete all initscripts
1379 DeleteInitScript = self.debug(self.api.DeleteInitScript)
1380 GetInitScripts = self.debug(self.api.GetInitScripts)
1381 for initscript_id in self.initscript_ids:
1382 result = DeleteInitScript(self.auth, initscript_id)
1384 # Check if peers are deleted
1385 initscripts = GetInitScripts(self.auth, self.initscript_ids)
1386 self.islistequal(initscripts, [], 'DeletInitScript - check')
1388 if self.config.verbose:
1389 utils.header("Deleted initscripts: %s" % self.initscript_ids)
1390 self.initscript_ids =[]
1392 def Roles(self, n = 2):
1394 AddRole = self.debug(self.api.AddRole)
1395 GetRoles = self.debug(self.api.GetRoles)
1398 role_fields = random_role()
1399 role_id = role_fields['role_id']
1400 name = role_fields['name']
1401 AddRole(self.auth, role_id, name)
1403 # Should return a unique id
1404 self.isunique(role_id, role_ids, 'AddRole - isunique')
1405 role_ids.append(role_id)
1406 roles = GetRoles(self.auth)
1407 if roles is None: continue
1408 roles = filter(lambda x: x['role_id'] in [role_id], roles)
1410 self.isequal(role, role_fields, 'AddRole - isequal')
1412 roles = GetRoles(self.auth)
1413 if roles is not None:
1414 roles = filter(lambda x: x['role_id'] in role_ids, roles)
1415 self.islistequal(role_ids, [r['role_id'] for r in roles], 'GetRoles - isequal')
1417 if self.config.verbose:
1418 utils.header("Added roles: %s" % role_ids)
1422 def DeleteRoles(self):
1424 DeleteRole = self.debug(self.api.DeleteRole)
1425 GetRoles = self.debug(self.api.GetRoles)
1426 for role_id in self.role_ids:
1427 result = DeleteRole(self.auth, role_id)
1429 # Check if peers are deleted
1430 roles = GetRoles(self.auth)
1431 roles = filter(lambda x: x['role_id'] in self.role_ids, roles)
1432 self.islistequal(roles, [], 'DeleteRole - check' % self.role_ids)
1434 if self.config.verbose:
1435 utils.header("Deleted roles: %s" % self.role_ids)
1438 def Persons(self, n = 3):
1444 person_fields = random_person()
1445 AddPerson = self.debug(self.api.AddPerson)
1446 person_id = AddPerson(self.auth, person_fields)
1447 if person_id is None: continue
1449 # Should return a unique person_id
1450 self.isunique(person_id, person_ids, 'AddPerson - isunique')
1451 person_ids.append(person_id)
1452 GetPersons = self.debug(self.api.GetPersons)
1453 persons = GetPersons(self.auth, [person_id])
1454 if persons is None: continue
1456 self.isequal(person, person_fields, 'AddPerson - isequal')
1459 person_fields = random_person()
1460 person_fields['enabled'] = True
1461 UpdatePerson = self.debug(self.api.UpdatePerson)
1462 result = UpdatePerson(self.auth, person_id, person_fields)
1465 AddRoleToPerson = self.debug(self.api.AddRoleToPerson)
1466 role = random.sample(roles, 1)[0]
1467 result = AddRoleToPerson(self.auth, role, person_id)
1471 key_id = AddPersonKey = self.debug(self.api.AddPersonKey)
1472 AddPersonKey(self.auth, person_id, key)
1474 # Add person to site
1475 site_id = random.sample(self.site_ids, 1)[0]
1476 AddPersonToSite = self.debug(self.api.AddPersonToSite)
1477 AddPersonToSite(self.auth, person_id, site_id)
1479 # Add person to slice
1480 slice_id = random.sample(self.slice_ids, 1)[0]
1481 AddPersonToSlice = self.debug(self.api.AddPersonToSlice)
1482 AddPersonToSlice(self.auth, person_id, slice_id)
1484 # check role, key, site, slice
1485 persons = GetPersons(self.auth, [person_id], ['roles', 'key_ids', 'site_ids', 'slice_ids'])
1486 if persons is None or not persons: continue
1488 self.islistequal([role], person['roles'], 'AddRoleToPerson - check')
1489 self.islistequal([key_id], person['key_ids'], 'AddPersonKey - check')
1490 self.islistequal([site_id], person['site_ids'], 'AddPersonToSite - check')
1491 self.islistequal([slice_id], person['slice_ids'], 'AddPersonToSlice - check')
1493 persons = GetPersons(self.auth, person_ids)
1494 if persons is not None:
1495 self.islistequal(person_ids, [p['person_id'] for p in persons], 'GetPersons - isequal')
1497 if self.config.verbose:
1498 utils.header("Added users: %s" % person_ids)
1502 def DeletePersons(self):
1504 # Delete attributes manually for first person
1505 GetPersons = self.debug(self.api.GetPersons)
1506 persons = GetPersons(self.auth, self.person_ids, ['person_id' , 'key_ids', 'site_ids', 'slice_ids', 'roles'])
1507 if persons is None or not persons: return 0
1512 role = random.sample(person['roles'], 1)[0]
1513 DeleteRoleFromPerson = self.debug(self.api.DeleteRoleFromPerson)
1514 DeleteRoleFromPerson(self.auth, role, person['person_id'])
1516 if person['key_ids']:
1518 key_id = random.sample(person['key_ids'], 1)[0]
1519 DeleteKey = self.debug(self.api.DeleteKey)
1520 DeleteKey(self.auth, key_id)
1522 if person['site_ids']:
1523 # Remove person from site
1524 site_id = random.sample(person['site_ids'], 1)[0]
1525 DeletePersonFromSite = self.debug(self.api.DeletePersonFromSite)
1526 DeletePersonFromSite(self.auth, person['person_id'], site_id)
1528 if person['slice_ids']:
1529 # Remove person from slice
1530 slice_id = random.sample(person['slice_ids'], 1)[0]
1531 DeletePersonFromSlice = self.debug(self.api.DeletePersonFromSlice)
1532 DeletePersonFromSlice(self.auth, person['person_id'], slice_id)
1534 # check role, key, site, slice
1535 persons = GetPersons(self.auth, [person['person_id']], ['roles', 'key_ids', 'site_ids', 'slice_ids'])
1536 if persons is None or not persons: return 0
1538 self.islistequal([], person['roles'], 'DeleteRoleFromPerson - check')
1539 self.islistequal([], person['key_ids'], 'DeleteKey - check')
1540 self.islistequal([], person['site_ids'], 'DeletePersonFromSite - check')
1541 self.islistequal([], person['slice_ids'], 'DeletePersonFromSlice - check')
1543 DeletePerson = self.debug(self.api.DeletePerson)
1544 # Have DeletePeson automatically delete attriubtes for all other persons
1545 for person_id in self.person_ids:
1547 DeletePerson(self.auth, person_id)
1549 # Check if persons are deleted
1550 GetPersons = self.debug(self.api.GetPersons)
1551 persons = GetPersons(self.auth, self.person_ids)
1552 self.islistequal(persons, [], 'DeletePerson - check')
1554 if self.config.verbose:
1555 utils.header("Deleted users: %s" % self.person_ids)
1557 self.person_ids = []
1559 def KeyTypes(self, n = 2):
1561 AddKeyType = self.debug(self.api.AddKeyType)
1562 GetKeyTypes = self.debug(self.api.GetKeyTypes)
1565 keytype = randstr(10)
1566 result = AddKeyType(self.auth, keytype)
1567 if result is None: continue
1570 key_types.append(keytype)
1571 keytypes = GetKeyTypes(self.auth)
1572 if not keytypes: continue
1573 keytypes = filter(lambda x: x in [keytype], keytypes)
1574 if not keytypes: continue
1575 self.isequal(keytype, keytypes[0], 'AddKeyType - isequal')
1578 keytypes = GetKeyTypes(self.auth)
1579 if keytypes is not None:
1580 keytypes = filter(lambda x: x in key_types, keytypes)
1581 self.islistequal(key_types, keytypes, 'GetKeyTypes - isequal')
1583 if self.config.verbose:
1584 utils.header("Added key types: %s" % key_types)
1588 def DeleteKeyTypes(self):
1589 DeleteKeyType = self.debug(self.api.DeleteKeyType)
1590 GetKeyTypes = self.debug(self.api.GetKeyTypes)
1591 for key_type in self.key_types:
1592 result = DeleteKeyType(self.auth, key_type)
1594 # Check if key types are deleted
1595 key_types = GetKeyTypes(self.auth)
1596 key_types = filter(lambda x: x in self.key_types, key_types)
1597 self.islistequal(key_types, [], 'DeleteKeyType - check')
1599 if self.config.verbose:
1600 utils.header("Deleted key types %s" % self.key_types)
1604 def Keys(self, n = 3):
1607 # Add a key to an account
1608 key_fields = random_key()
1609 person_id = random.sample(self.person_ids, 1)[0]
1610 AddPersonKey = self.debug(self.api.AddPersonKey)
1611 key_id = AddPersonKey(self.auth, person_id, key_fields)
1612 if key_id is None: continue
1614 # Should return a unique key_id
1615 self.isunique(key_id, key_ids, 'AddPersonKey - isunique')
1616 key_ids.append(key_id)
1617 GetKeys = self.debug(self.api.GetKeys)
1618 keys = GetKeys(self.auth, [key_id])
1619 if keys is None: continue
1621 self.isequal(key, key_fields, 'AddPersonKey - isequal')
1624 key_fields = random_key()
1625 UpdateKey = self.debug(self.api.UpdateKey)
1626 result = UpdateKey(self.auth, key_id, key_fields)
1628 keys = GetKeys(self.auth, [key_id])
1629 if keys is None or not keys: continue
1631 self.isequal(key, key_fields, 'UpdatePersonKey - isequal')
1633 keys = GetKeys(self.auth, key_ids)
1634 if keys is not None:
1635 self.islistequal(key_ids, [key['key_id'] for key in keys], 'GetKeys - isequal')
1637 if self.config.verbose:
1638 utils.header("Added keys: %s" % key_ids)
1642 def DeleteKeys(self):
1644 # Blacklist first key, Delete rest
1645 GetKeys = self.debug(self.api.GetKeys)
1646 DeleteKey = self.debug(self.api.DeleteKey)
1647 BlacklistKey = self.debug(self.api.BlacklistKey)
1649 key_id = self.key_ids.pop()
1650 BlacklistKey(self.auth, key_id)
1651 keys = GetKeys(self.auth, [key_id])
1652 self.islistequal(keys, [], 'BlacklistKey - check')
1654 if self.config.verbose:
1655 utils.header("Blacklisted key: %s" % key_id)
1657 for key_id in self.key_ids:
1658 DeleteKey(self.auth, key_id)
1660 keys = GetKeys(self.auth, self.key_ids)
1661 self.islistequal(keys, [], 'DeleteKey - check')
1663 if self.config.verbose:
1664 utils.header("Deleted keys: %s" % self.key_ids)
1668 def BootStates(self, n = 3):
1670 AddBootState = self.debug(self.api.AddBootState)
1671 GetBootStates = self.debug(self.api.GetBootStates)
1674 bootstate_fields = randstr(10)
1675 result = AddBootState(self.auth, bootstate_fields)
1676 if result is None: continue
1679 boot_states.append(bootstate_fields)
1680 bootstates = GetBootStates(self.auth)
1681 if not bootstates: continue
1682 bootstates = filter(lambda x: x in [bootstate_fields], bootstates)
1683 if not bootstates: continue
1684 bootstate = bootstates[0]
1685 self.isequal(bootstate, bootstate_fields, 'AddBootState - isequal')
1688 bs = GetBootStates(self.auth)
1690 bs = filter(lambda x: x in [boot_states], bs)
1691 self.islistequal(boot_states, bs, 'GetBootStates - isequal')
1693 if self.config.verbose:
1694 utils.header("Added boot_states: %s" % boot_states)
1698 def DeleteBootStates(self):
1699 DeleteBootState = self.debug(self.api.DeleteBootState)
1700 GetBootStates = self.debug(self.api.GetBootStates)
1701 for boot_state in self.boot_states:
1702 result = DeleteBootState(self.auth, boot_state)
1704 # Check if bootsates are deleted
1705 boot_states = GetBootStates(self.auth)
1706 boot_states = filter(lambda x: x in self.boot_states, boot_states)
1707 self.islistequal(boot_states, [], 'DeleteBootState check')
1709 if self.config.verbose:
1710 utils.header("Deleted boot_states: %s" % self.boot_states)
1712 self.boot_states = []
1715 def Peers(self, n = 2):
1717 AddPeer = self.debug(self.api.AddPeer)
1718 GetPeers = self.debug(self.api.GetPeers)
1719 UpdatePeer = self.debug(self.api.UpdatePeer)
1722 peer_fields = random_peer()
1723 peer_id = AddPeer(self.auth, peer_fields)
1725 # Should return a unique id
1726 self.isunique(peer_id, peer_ids, 'AddPeer - isunique')
1727 peer_ids.append(peer_id)
1728 peers = GetPeers(self.auth, [peer_id])
1729 if peers is None: continue
1731 self.isequal(peer, peer_fields, 'AddPeer - isequal')
1734 peer_fields = random_peer()
1735 result = UpdatePeer(self.auth, peer_id, peer_fields)
1738 peers = GetPeers(self.auth, [peer_id])
1739 if peers is None: continue
1741 self.isequal(peer, peer_fields, 'UpdatePeer - isequal')
1743 peers = GetPeers(self.auth, peer_ids)
1744 if peers is not None:
1745 self.islistequal(peer_ids, [peer['peer_id'] for peer in peers], 'GetPeers -isequal')
1747 if self.config.verbose:
1748 utils.header("Added peers: %s" % peer_ids)
1753 def DeletePeers(self):
1755 DeletePeer = self.debug(self.api.DeletePeer)
1756 GetPeers = self.debug(self.api.GetPeers)
1757 for peer_id in self.peer_ids:
1758 result = DeletePeer(self.auth, peer_id)
1760 # Check if peers are deleted
1761 peers = GetPeers(self.auth, self.peer_ids)
1762 self.islistequal(peers, [], 'DeletePeer - check' % self.peer_ids)
1764 if self.config.verbose:
1765 utils.header("Deleted peers: %s" % self.peer_ids)
1768 def ConfFiles(self, n = 2):
1772 conf_file_fields = random_conf_file()
1773 AddConfFile = self.debug(self.api.AddConfFile)
1774 conf_file_id = AddConfFile(self.auth, conf_file_fields)
1775 if conf_file_id is None: continue
1777 # Should return a unique id
1778 self.isunique(conf_file_id, conf_file_ids, 'AddConfFile - isunique')
1779 conf_file_ids.append(conf_file_id)
1782 GetConfFiles = self.debug(self.api.GetConfFiles)
1783 conf_files = GetConfFiles(self.auth, [conf_file_id])
1784 if conf_files is None: continue
1785 conf_file = conf_files[0]
1786 self.isequal(conf_file, conf_file_fields, 'AddConfFile - isunique')
1789 conf_file_fields = random_conf_file()
1790 UpdateConfFile = self.debug(self.api.UpdateConfFile)
1791 result = UpdateConfFile(self.auth, conf_file_id, conf_file_fields)
1794 conf_files = GetConfFiles(self.auth, [conf_file_id])
1795 if conf_files is None: continue
1796 conf_file = conf_files[0]
1797 self.isequal(conf_file, conf_file_fields, 'UpdateConfFile - isunique')
1800 # Add this conf file to a random node
1801 node_id = random.sample(self.node_ids, 1)[0]
1802 AddConfFileToNode = self.debug(self.api.AddConfFileToNode)
1803 AddConfFileToNode(self.auth, conf_file_id, node_id)
1805 # Add this conf file to a random node group
1806 nodegroup_id = random.sample(self.nodegroup_ids, 1)[0]
1807 AddConfFileToNodeGroup = self.debug(self.api.AddConfFileToNodeGroup)
1808 AddConfFileToNodeGroup(self.auth, conf_file_id, nodegroup_id)
1810 # Check node, nodegroup
1811 conf_files = GetConfFiles(self.auth, [conf_file_id], ['node_ids', 'nodegroup_ids'])
1812 if conf_files is None or not conf_files: continue
1813 conf_file = conf_files[0]
1814 self.islistequal([node_id], conf_file['node_ids'], 'AddConfFileToNode - check')
1815 self.islistequal([nodegroup_id], conf_file['nodegroup_ids'], 'AddConfFileToNodeGroup - check')
1819 conf_files = GetConfFiles(self.auth, conf_file_ids)
1820 if conf_files is not None:
1821 self.islistequal(conf_file_ids, [c['conf_file_id'] for c in conf_files], 'GetConfFiles - isequal')
1822 if self.config.verbose:
1823 utils.header("Added conf_files: %s" % conf_file_ids)
1825 return conf_file_ids
1827 def DeleteConfFiles(self):
1829 GetConfFiles = self.debug(self.api.GetConfFiles)
1830 DeleteConfFile = self.debug(self.api.DeleteConfFile)
1831 DeleteConfFileFromNode = self.debug(self.api.DeleteConfFileFromNode)
1832 DeleteConfFileFromNodeGroup = self.debug(self.api.DeleteConfFileFromNodeGroup)
1834 conf_files = GetConfFiles(self.auth, self.conf_file_ids)
1835 if conf_files is None or not conf_files: return 0
1836 conf_file = conf_files[0]
1837 if conf_file['node_ids']:
1838 node_id = random.sample(conf_file['node_ids'], 1)[0]
1839 DeleteConfFileFromNode(self.auth, conf_file['conf_file_id'], node_id)
1840 if conf_file['nodegroup_ids']:
1841 nodegroup_id = random.sample(conf_file['nodegroup_ids'], 1)[0]
1842 DeleteConfFileFromNodeGroup(self.auth, conf_file['conf_file_id'], nodegroup_id)
1845 conf_files = GetConfFiles(self.auth, [conf_file['conf_file_id']], ['node_ids', 'nodegroup_ids'])
1846 if conf_files is None or not conf_files: return 0
1847 conf_file = conf_files[0]
1848 self.islistequal([], conf_file['node_ids'], 'AddConfFileToNode - check')
1849 self.islistequal([], conf_file['nodegroup_ids'], 'AddConfFileToNodeGroup - check')
1851 for conf_file_id in self.conf_file_ids:
1852 DeleteConfFile(self.auth, conf_file_id)
1855 conf_files = GetConfFiles(self.auth, self.conf_file_ids)
1856 self.islistequal(conf_files, [], 'DeleteConfFile - check')
1858 if self.config.verbose:
1859 utils.header("Deleted conf_files: %s" % self.conf_file_ids)
1861 self.conf_file_ids = []
1863 def NodeNetworks(self, n = 4):
1864 nodenetwork_ids = []
1865 AddNodeNetwork = self.debug(self.api.AddNodeNetwork)
1866 UpdateNodeNetwork = self.debug(self.api.UpdateNodeNetwork)
1867 GetNodeNetworks = self.debug(self.api.GetNodeNetworks)
1871 nodenetwork_fields = random_nodenetwork()
1872 node_id = random.sample(self.node_ids, 1)[0]
1873 nodenetwork_id = AddNodeNetwork(self.auth, node_id, nodenetwork_fields)
1874 if nodenetwork_id is None: continue
1876 # Should return a unique id
1877 self.isunique(nodenetwork_ids, nodenetwork_ids, 'AddNodeNetwork - isunique')
1878 nodenetwork_ids.append(nodenetwork_id)
1880 # check Node Network
1881 nodenetworks = GetNodeNetworks(self.auth, [nodenetwork_id])
1882 if nodenetworks is None: continue
1883 nodenetwork = nodenetworks[0]
1884 self.isequal(nodenetwork, nodenetwork_fields, 'AddNodeNetwork - isequal')
1886 # Update NodeNetwork
1887 nodenetwork_fields = random_nodenetwork()
1888 UpdateNodeNetwork(self.auth, nodenetwork_id, nodenetwork_fields)
1891 nodenetworks = GetNodeNetworks(self.auth, [nodenetwork_id])
1892 if nodenetworks is None: continue
1893 nodenetwork = nodenetworks[0]
1894 self.isequal(nodenetwork, nodenetwork_fields, 'UpdateNodeNetwork - isequal')
1896 nodenetworks = GetNodeNetworks(self.auth, nodenetwork_ids)
1897 if nodenetworks is not None:
1898 self.islistequal(nodenetwork_ids, [n['nodenetwork_id'] for n in nodenetworks], 'GetNodeNetworks - isequal')
1900 if self.config.verbose:
1901 utils.header('Added nodenetworks: %s' % nodenetwork_ids)
1903 return nodenetwork_ids
1905 def DeleteNodeNetworks(self):
1906 GetNodeNetworks = self.debug(self.api.GetNodeNetworks)
1907 DeleteNodeNetwork = self.debug(self.api.DeleteNodeNetwork)
1909 for nodenetwork_id in self.nodenetwork_ids:
1910 DeleteNodeNetwork(self.auth, nodenetwork_id)
1913 nodenetworks = GetNodeNetworks(self.auth, self.nodenetwork_ids)
1914 self.islistequal(nodenetworks, [], 'DeleteNodeNetwork - check')
1916 if self.config.verbose:
1917 utils.header("Deleted nodenetworks: %s " % self.nodenetwork_ids)
1918 self.nodenetwork_ids = []
1920 def NodeNetworkSettings(self, n=2):
1921 nodenetwork_setting_ids = []
1922 AddNodeNetworkSetting = self.debug(self.api.AddNodeNetworkSetting)
1923 UpdateNodeNetworkSetting = self.debug(self.api.UpdateNodeNetworkSetting)
1924 GetNodeNetworkSettings = self.debug(self.api.GetNodeNetworkSettings)
1926 for nodenetwork_id in self.nodenetwork_ids:
1928 nodenetwork_setting_fields = random_nodenetwork_setting()
1929 #nodenetwork_id = random.sample(self.nodenetwork_ids, 1)[0]
1930 nodenetwork_setting_type_id = random.sample(self.nodenetwork_setting_type_ids, 1)[0]
1931 value = nodenetwork_setting_fields['value']
1932 nodenetwork_setting_id = AddNodeNetworkSetting(self.auth, nodenetwork_id, nodenetwork_setting_type_id, value)
1933 if nodenetwork_setting_id is None: continue
1935 # Should return a unique id
1936 self.isunique(nodenetwork_setting_ids, nodenetwork_setting_ids, 'AddNodeNetworkSetting - isunique')
1937 nodenetwork_setting_ids.append(nodenetwork_setting_id)
1939 # check Node Network
1940 nodenetwork_settings = GetNodeNetworkSettings(self.auth, [nodenetwork_setting_id])
1941 if nodenetwork_settings is None: continue
1942 nodenetwork_setting = nodenetwork_settings[0]
1943 self.isequal(nodenetwork_setting, nodenetwork_setting_fields, 'AddNodeNetworkSetting - isequal')
1945 # Update NodeNetworkSetting
1946 nodenetwork_setting_fields = random_nodenetwork_setting()
1947 value = nodenetwork_setting_fields['value']
1948 UpdateNodeNetworkSetting(self.auth, nodenetwork_setting_id, value)
1951 nodenetwork_settings = GetNodeNetworkSettings(self.auth, [nodenetwork_setting_id])
1952 if nodenetwork_settings is None: continue
1953 nodenetwork_setting = nodenetwork_settings[0]
1954 self.isequal(nodenetwork_setting, nodenetwork_setting_fields, 'UpdateNodeNetworkSetting - isequal')
1956 nodenetwork_settings = GetNodeNetworkSettings(self.auth, nodenetwork_setting_ids)
1957 if nodenetwork_settings is not None:
1958 self.islistequal(nodenetwork_setting_ids, [n['nodenetwork_setting_id'] for n in nodenetwork_settings], 'GetNodeNetworkSettings - isequal')
1960 if self.config.verbose:
1961 utils.header('Added nodenetwork_settings: %s' % nodenetwork_setting_ids)
1963 return nodenetwork_setting_ids
1965 def DeleteNodeNetworkSettings(self):
1966 GetNodeNetworkSettings = self.debug(self.api.GetNodeNetworkSettings)
1967 DeleteNodeNetworkSetting = self.debug(self.api.DeleteNodeNetworkSetting)
1969 for nodenetwork_setting_id in self.nodenetwork_setting_ids:
1970 DeleteNodeNetworkSetting(self.auth, nodenetwork_setting_id)
1973 nodenetwork_settings = GetNodeNetworkSettings(self.auth, self.nodenetwork_setting_ids)
1974 self.islistequal(nodenetwork_settings, [], 'DeleteNodeNetworkSetting - check')
1976 if self.config.verbose:
1977 utils.header("Deleted nodenetwork settings: %s " % self.nodenetwork_setting_ids)
1978 self.nodenetwork_setting_ids = []
1980 def NodeNetworkSettingTypes(self, n = 2):
1981 nodenetwork_setting_type_ids = []
1982 AddNodeNetworkSettingType = self.debug(self.api.AddNodeNetworkSettingType)
1983 UpdateNodeNetworkSettingType = self.debug(self.api.UpdateNodeNetworkSettingType)
1984 GetNodeNetworkSettingTypes = self.debug(self.api.GetNodeNetworkSettingTypes)
1987 # Add Node Network Settings Type
1988 nodenetwork_setting_type_fields = random_nodenetwork_setting_type()
1989 nodenetwork_setting_type_id = AddNodeNetworkSettingType(self.auth, nodenetwork_setting_type_fields)
1990 if nodenetwork_setting_type_id is None: continue
1992 # Should return a unique id
1993 self.isunique(nodenetwork_setting_type_ids, nodenetwork_setting_type_ids, 'AddNodeNetworkSettingType - isunique')
1994 nodenetwork_setting_type_ids.append(nodenetwork_setting_type_id)
1996 # check Node Network Settings Type
1997 nodenetwork_setting_types = GetNodeNetworkSettingTypes(self.auth, [nodenetwork_setting_type_id])
1998 if nodenetwork_setting_types is None: continue
1999 nodenetwork_setting_type = nodenetwork_setting_types[0]
2000 self.isequal(nodenetwork_setting_type, nodenetwork_setting_type_fields, 'AddNodeNetworkSettingType - isequal')
2002 # Update NodeNetworkSetting
2003 nodenetwork_setting_type_fields = random_nodenetwork_setting_type()
2004 UpdateNodeNetworkSettingType(self.auth, nodenetwork_setting_type_id, nodenetwork_setting_type_fields)
2007 nodenetwork_setting_types = GetNodeNetworkSettingTypes(self.auth, [nodenetwork_setting_type_id])
2008 if nodenetwork_setting_types is None: continue
2009 nodenetwork_setting_type = nodenetwork_setting_types[0]
2010 self.isequal(nodenetwork_setting_type, nodenetwork_setting_type_fields, 'UpdateNodeNetworkSettingType - isequal')
2012 nodenetwork_setting_types = GetNodeNetworkSettingTypes(self.auth, nodenetwork_setting_type_ids)
2013 if nodenetwork_setting_types is not None:
2014 self.islistequal(nodenetwork_setting_type_ids, [n['nodenetwork_setting_type_id'] for n in nodenetwork_setting_types], 'GetNodeNetworkSettingTypes - isequal')
2016 if self.config.verbose:
2017 utils.header('Added nodenetwork_setting_types: %s' % nodenetwork_setting_type_ids)
2019 return nodenetwork_setting_type_ids
2021 def DeleteNodeNetworkSettingTypes(self):
2022 GetNodeNetworkSettingTypes = self.debug(self.api.GetNodeNetworkSettingTypes)
2023 DeleteNodeNetworkSettingType = self.debug(self.api.DeleteNodeNetworkSettingType)
2025 for nodenetwork_setting_type_id in self.nodenetwork_setting_type_ids:
2026 DeleteNodeNetworkSettingType(self.auth, nodenetwork_setting_type_id)
2029 nodenetwork_setting_types = GetNodeNetworkSettingTypes(self.auth, self.nodenetwork_setting_type_ids)
2030 self.islistequal(nodenetwork_setting_types, [], 'DeleteNodeNetworkSettingType - check')
2032 if self.config.verbose:
2033 utils.header("Deleted nodenetwork setting types: %s " % self.nodenetwork_setting_type_ids)
2034 self.nodenetwork_setting_type_ids = []
2036 def Messages(self, n = 2):
2038 AddMessage = self.debug(self.api.AddMessage)
2039 GetMessages = self.debug(self.api.GetMessages)
2040 UpdateMessage = self.debug(self.api.UpdateMessage)
2043 message_fields = random_message()
2044 message_id = message_fields['message_id']
2045 AddMessage(self.auth, message_fields)
2046 if message_id is None: continue
2048 # Should return a unique id
2049 self.isunique(message_id, message_ids, 'AddMessage - isunique')
2050 message_ids.append(message_id)
2051 messages = GetMessages(self.auth, [message_id])
2052 if messages is None: continue
2053 message = messages[0]
2054 self.isequal(message, message_fields, 'AddMessage - isequal')
2057 message_fields = random_message()
2058 result = UpdateMessage(self.auth, message_id, message_fields)
2061 messages = GetMessages(self.auth, [message_id])
2062 if messages is None: continue
2063 message = messages[0]
2064 self.isequal(message, message_fields, 'UpdateMessage - isequal')
2066 messages = GetMessages(self.auth, message_ids)
2067 if messages is not None:
2068 self.islistequal(message_ids, [m['message_id'] for m in messages], 'GetMessages - isequal')
2070 if self.config.verbose:
2071 utils.header("Added messages: %s" % message_ids)
2075 def DeleteMessages(self):
2076 # Delete all messages
2077 DeleteMessage = self.debug(self.api.DeleteMessage)
2078 GetMessages = self.debug(self.api.GetMessages)
2079 for message_id in self.message_ids:
2080 result = DeleteMessage(self.auth, message_id)
2082 # Check if messages are deleted
2083 messages = GetMessages(self.auth, self.message_ids)
2084 self.islistequal(messages, [], 'DeleteMessage - check')
2086 if self.config.verbose:
2087 utils.header("Deleted messages: %s" % self.message_ids)
2089 self.message_ids = []
2091 def Sessions(self, n = 2):
2093 AddSession = self.debug(self.api.AddSession)
2094 GetSession = self.debug(self.api.GetSession)
2095 GetSessions = self.debug(self.api.GetSessions)
2098 person_id = random.sample(self.person_ids, 1)[0]
2099 session_id = AddSession(self.auth, person_id)
2100 if session_id is None: continue
2101 session_ids.append(session_id)
2104 sessions = GetSessions(self.auth, [person_id])
2105 if not sessions: continue
2106 session = sessions[0]
2107 sess_id = session['session_id']
2108 self.islistequal([sess_id], [session_id], 'AddSession - isequal')
2110 # GetSession creates session_id based on auth, so we must use the current auth
2111 session_id = GetSession(self.auth)
2112 if session_id is None: continue
2113 session_ids.append(session_id)
2116 sessions = GetSessions(self.auth, [self.auth['Username']])
2117 if not sessions: continue
2118 session = sessions[0]
2119 sess_id = session['session_id']
2120 self.islistequal([sess_id], [session_id], 'GetSession - isequal')
2123 sessions = GetSessions(self.auth, session_ids)
2124 if sessions is not None:
2125 sess_ids = [s['session_id'] for s in sessions]
2126 self.islistequal(sess_ids, session_ids, 'GetSessions - isequal')
2128 if self.config.verbose:
2129 utils.header("Added sessions: %s" % session_ids)
2133 def DeleteSessions(self):
2134 DeleteSession = self.debug(self.api.DeleteSession)
2135 GetSessions = self.debug(self.api.GetSessions)
2137 # DeleteSession deletes based on auth, so we must create auths for the sessions we delete
2138 for session_id in self.session_ids:
2139 sessions = GetSessions(self.auth, [session_id])
2140 if not sessions: continue
2141 session = sessions[0]
2143 'session': session['session_id'],
2144 'AuthMethod': 'session'
2147 DeleteSession(tmpauth)
2149 # Check if sessions are deleted
2150 sessions = GetSessions(self.auth, self.session_ids)
2151 self.islistequal(sessions, [], 'DeleteBootState check')
2153 if self.config.verbose:
2154 utils.header("Deleted sessions: %s" % self.session_ids)
2156 self.session_ids = []
2158 def GenerateNodeConfFile(self):
2159 GetNodes = self.debug(self.api.GetNodes)
2160 GetNodeNetworks = self.debug(self.api.GetNodeNetworks)
2161 GenerateNodeConfFile = self.debug(self.api.GenerateNodeConfFile)
2163 nodes = GetNodes(self.auth, self.node_ids)
2164 nodes = filter(lambda n: n['nodenetwork_ids'], nodes)
2165 if not nodes: return 0
2167 nodenetworks = GetNodeNetworks(self.auth, node['nodenetwork_ids'])
2168 nodenetwork = nodenetworks[0]
2169 parts = node['hostname'].split(".", 1)
2173 'NODE_ID': node['node_id'],
2174 'NODE_KEY': node['key'],
2175 'IP_METHOD': nodenetwork['method'],
2176 'IP_ADDRESS': nodenetwork['ip'],
2177 'IP_GATEWAY': nodenetwork['gateway'],
2178 'IP_NETMASK': nodenetwork['netmask'],
2179 'IP_NETADDR': nodenetwork['network'],
2180 'IP_BROADCASTADDR': nodenetwork['broadcast'],
2181 'IP_DNS1': nodenetwork['dns1'],
2182 'IP_DNS2': nodenetwork['dns2'],
2184 'DOMAIN_NAME': domain
2186 node_config_file = GenerateNodeConfFile(self.auth, node['node_id'])
2187 self.isequal(node_config_file, node_config, 'GenerateNodeConfFile - isequal')
2189 if self.config.verbose:
2190 utils.header("GenerateNodeConfFile")
2192 def GetBootMedium(self):
2196 def GetEventObjects(self):
2197 GetEventObjects = self.debug(self.api.GetEventObjects)
2198 GetEventObjects(self.auth)
2200 if self.config.verbose:
2201 utils.header("GetEventObjects")
2203 def GetEvents(self):
2204 GetEvents = self.debug(self.api.GetEvents)
2205 GetEvents(self.auth)
2207 if self.config.verbose:
2208 utils.header("GetEvents")
2210 def GetPeerData(self):
2211 GetPeers = self.debug(self.api.GetPeers)
2212 GetPeerData = self.debug(self.api.GetPeerData)
2214 peers = GetPeers(self.auth)
2215 if peers is None or not peers: return 0
2217 peer_data = GetPeerData(self.auth)
2219 # Manuall construt peer data
2221 if self.config.verbose:
2222 utils.header("GetPeerData")
2224 def GetPeerName(self):
2225 # GetPeerName should return the same as api.config.PLC_NAME
2226 GetPeerName = self.debug(self.api.GetPeerName)
2227 peer_name = GetPeerName(self.auth)
2228 self.islistequal([peer_name], [self.api.config.PLC_NAME], 'GetPeerName - isequal')
2230 if self.config.verbose:
2231 utils.header("GetPeerName")
2233 def GetPlcRelease(self):
2234 GetPlcRelease = self.debug(self.api.GetPlcRelease)
2235 plc_release = GetPlcRelease(self.auth)
2237 if self.config.verbose:
2238 utils.header("GetPlcRelease")
2240 def GetSliceKeys(self):
2241 GetSliceKeys = self.debug(self.api.GetSliceKeys)
2242 GetSlices = self.debug(self.api.GetSlices)
2244 slices = GetSlices(self.auth, self.slice_ids)
2245 if not slices: return 0
2246 slices = filter(lambda s: s['person_ids'], slices)
2247 if not slices: return 0
2250 slice_keys = GetSliceKeys(self.auth, [slice['slice_id']])
2251 # XX Manually construct slice_keys for this slice and compare
2253 if self.config.verbose:
2254 utils.header("GetSliceKeys(%s)" % [slice['slice_id']])
2256 def GetSliceTicket(self):
2257 GetSliceTicket = self.debug(self.api.GetSliceTicket)
2259 slice_id = random.sample(self.slice_ids, 1)[0]
2260 slice_ticket = GetSliceTicket(self.auth, slice_id)
2262 if self.config.verbose:
2263 utils.header("GetSliceTicket(%s)" % slice_id)
2265 def GetSlicesMD5(self):
2266 GetSlicesMD5 = self.debug(self.api.GetSlicesMD5)
2268 slices_md5 = GetSlicesMD5(self.auth)
2270 if self.config.verbose:
2271 utils.header("GetSlicesMD5")
2273 def GetSlivers(self):
2274 GetSlivers = self.debug(self.api.GetSlivers)
2275 GetNodes = self.debug(self.api.GetNodes)
2276 nodes = GetNodes(self.auth, self.node_ids)
2277 if nodes is None or not nodes: return 0
2278 nodes = filter(lambda n: n['slice_ids'], nodes)
2279 if not nodes: return 0
2282 slivers = GetSlivers(self.auth, node['node_id'])
2284 # XX manually create slivers object and compare
2286 if self.config.verbose:
2287 utils.header("GetSlivers(%s)" % node['node_id'])
2289 def GetWhitelist(self):
2290 GetWhitelist = self.debug(self.api.GetWhitelist)
2291 GetNodes = self.debug(self.api.GetNodes)
2293 whitelists = GetWhitelist(self.auth, self.node_ids)
2294 nodes = GetNodes(self.auth, self.node_ids)
2295 if nodes is None or not nodes: return 0
2296 nodes = filter(lambda n: n['slice_ids_whitelist'], nodes)
2297 self.islistequal(whitelists, nodes, 'GetWhitelist - isequal')
2299 if self.config.verbose:
2300 utils.header("GetWhitelist")
2302 def NotifyPersons(self):
2303 NotifyPersons = self.debug(self.api.NotifyPersons)
2304 person_id = random.sample(self.person_ids, 1)[0]
2306 NotifyPersons(self.auth, [person_id], 'QA Test', 'Welcome')
2308 if self.config.verbose:
2309 utils.header('NotifyPersons(%s)' % [person_id])
2311 def NotifySupport(self):
2312 NotifySupport = self.debug(self.api.NotifySupport)
2313 NotifySupport(self.auth, 'QA Test', 'Support Request')
2315 if self.config.verbose:
2316 utils.header('NotifSupport')
2318 def RebootNode(self):
2319 RebootNode = self.debug(self.api.RebootNode)
2320 node_id = random.sample(self.node_ids, 1)[0]
2321 RebootNode(self.auth, node_id)
2323 if self.config.verbose:
2324 utils.header('RebootNode(%s)' % node_id)
2326 def ResetPassword(self):
2327 ResetPassword = self.debug(self.api.ResetPassword)
2328 person_id = random.sample(self.person_ids, 1)[0]
2329 ResetPassword(self.auth, person_id)
2331 if self.config.verbose:
2332 utils.header('ResetPassword(%s)' % person_id)
2334 def SetPersonPrimarySite(self):
2335 SetPersonPrimarySite = self.debug(self.api.SetPersonPrimarySite)
2336 GetPersons = self.debug(self.api.GetPersons)
2337 person_id = random.sample(self.person_ids, 1)[0]
2338 persons = GetPersons(self.auth, person_id)
2339 if not persons: return 0
2341 site_id = random.sample(person['site_ids'], 1)[0]
2342 SetPersonPrimarySite(self.auth, person_id, site_id)
2344 if self.config.verbose:
2345 utils.header('SetPersonPrimarySite(%s, %s)' % (person_id, site_id))
2347 def VerifyPerson(self):
2348 VerifyPerson = self.debug(self.api.VerifyPerson)
2349 UpdatePerson = self.debug(self.api.UpdatePerson)
2350 GetPersons = self.debug(self.api.GetPersons)
2352 # can only verify new (disabled) accounts
2353 person_id = random.sample(self.person_ids, 1)[0]
2354 persons = GetPersons(self.auth, [person_id])
2355 if persons is None or not persons: return 0
2357 UpdatePerson(self.auth, person['person_id'], {'enabled': False})
2358 VerifyPerson(self.auth, person['person_id'])
2360 if self.config.verbose:
2361 utils.header('VerifyPerson(%s)' % person_id)
2363 if __name__ == '__main__':
2364 args = tuple(sys.argv[1:])
2365 api_unit_test()(*args)