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, logfile
24 from random import Random
32 try: boot_states = api.GetBootStates(auth)
33 except: boot_states = [u'boot', u'dbg', u'inst', u'new', u'rcnf', u'rins']
35 try: roles = [role['role_id'] for role in api.GetRoles(auth)]
36 except: roles = [10,20,30,40]
38 try: methods = api.GetNetworkMethods(auth)
39 except: methods = [u'static', u'dhcp', u'proxy', u'tap', u'ipmi', u'unknown']
41 try: key_types = api.GetKeyTypes(auth)
42 except: key_types = [u'ssh']
44 try:types = api.GetNetworkTypes(auth)
45 except: types = [u'ipv4']
48 attribute_types = [a['attribute_type_id'] for a in api.GetSliceAttributeTypes(auth)]
49 attribute_types = filter(lambda x: x['name'] != 'initscript', attribute_types)
52 attribute_types = range(6,20)
55 sites = api.GetSites(auth, None, ['login_base'])
56 login_bases = [site['login_base'] for site in sites]
61 def randfloat(min = 0.0, max = 1.0):
62 return float(min) + (random.random() * (float(max) - float(min)))
64 def randint(min = 0, max = 1):
65 return int(randfloat(min, max + 1))
68 return random.sample([True, False], 1)[0]
69 # See "2.2 Characters" in the XML specification:
71 # #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]
73 # [#x7F-#x84], [#x86-#x9F], [#xFDD0-#xFDDF]
75 ascii_xml_chars = map(unichr, [0x9, 0xA, 0xD])
76 ascii_xml_chars += map(unichr, xrange(0x20, 0x7F - 1))
77 low_xml_chars = list(ascii_xml_chars)
78 low_xml_chars += map(unichr, xrange(0x84 + 1, 0x86 - 1))
79 low_xml_chars += map(unichr, xrange(0x9F + 1, 0xFF))
80 valid_xml_chars = list(low_xml_chars)
81 valid_xml_chars += map(unichr, xrange(0xFF + 1, 0xD7FF))
82 valid_xml_chars += map(unichr, xrange(0xE000, 0xFDD0 - 1))
83 valid_xml_chars += map(unichr, xrange(0xFDDF + 1, 0xFFFD))
85 def randstr(length, pool = valid_xml_chars, encoding = "utf-8"):
86 sample = random.sample(pool, min(length, len(pool)))
89 bytes = len(s.encode(encoding))
93 sample += random.sample(pool, min(length - bytes, len(pool)))
94 random.shuffle(sample)
100 # 1. Each part begins and ends with a letter or number.
101 # 2. Each part except the last can contain letters, numbers, or hyphens.
102 # 3. Each part is between 1 and 64 characters, including the trailing dot.
103 # 4. At least two parts.
104 # 5. Last part can only contain between 2 and 6 letters.
105 hostname = 'a' + randstr(61, letters + digits + '-') + '1.' + \
106 'b' + randstr(61, letters + digits + '-') + '2.' + \
107 'c' + randstr(5, letters)
110 def randpath(length):
112 for i in range(randint(1, 10)):
113 parts.append(randstr(randint(1, 30), ascii_xml_chars))
114 return os.sep.join(parts)[0:length]
117 return (randstr(100, letters + digits) + "@" + randhostname()).lower()
119 def randkey(bits = 2048):
120 key_types = ["ssh-dss", "ssh-rsa"]
121 key_type = random.sample(key_types, 1)[0]
122 return ' '.join([key_type,
123 base64.b64encode(''.join(randstr(bits / 8).encode("utf-8"))),
128 'name': randstr(254),
129 'abbreviated_name': randstr(50),
130 'login_base': randstr(20, letters).lower(),
131 'latitude': int(randfloat(-90.0, 90.0) * 1000) / 1000.0,
132 'longitude': int(randfloat(-180.0, 180.0) * 1000) / 1000.0,
139 'peername': randstr(254),
140 'peer_url': "https://" + randhostname() + "/",
141 'key': base64.b64encode(''.join(randstr(bits / 8).encode("utf-8"))),
142 'cacert': base64.b64encode(''.join(randstr(bits / 8).encode("utf-8")))
144 def random_address_type():
147 'description': randstr(254),
150 def random_address():
152 'line1': randstr(254),
153 'line2': randstr(254),
154 'line3': randstr(254),
155 'city': randstr(254),
156 'state': randstr(254),
157 'postalcode': randstr(64),
158 'country': randstr(128),
163 'first_name': randstr(128),
164 'last_name': randstr(128),
165 'email': randemail(),
167 # Accounts are disabled by default
169 'password': randstr(254),
174 'key_type': random.sample(key_types, 1)[0],
180 'name': random.sample(login_bases, 1)[0] + "_" + randstr(11, letters).lower(),
181 'url': "http://" + randhostname() + "/",
182 'description': randstr(2048),
185 def random_nodegroup():
188 'description': randstr(200),
193 'hostname': randhostname(),
194 'boot_state': random.sample(boot_states, 1)[0],
195 'model': randstr(255),
196 'version': randstr(64),
197 'session': randstr(20)
200 def random_nodenetwork():
201 nodenetwork_fields = {
202 'method': random.sample(methods, 1)[0],
203 'type': random.sample(types, 1)[0],
204 'bwlimit': randint(500000, 10000000),
207 if nodenetwork_fields['method'] != 'dhcp':
208 ip = randint(0, 0xffffffff)
209 netmask = (0xffffffff << randint(2, 31)) & 0xffffffff
210 network = ip & netmask
211 broadcast = ((ip & netmask) | ~netmask) & 0xffffffff
212 gateway = randint(network + 1, broadcast - 1)
213 dns1 = randint(0, 0xffffffff)
215 for field in 'ip', 'netmask', 'network', 'broadcast', 'gateway', 'dns1':
216 nodenetwork_fields[field] = socket.inet_ntoa(struct.pack('>L', locals()[field]))
218 return nodenetwork_fields
220 def random_nodenetwork_setting():
225 def random_nodenetwork_setting_type():
228 'description': randstr(50),
229 'category': randstr(20),
230 'min_role_id': random.sample(roles, 1)[0]
235 'hostname': randhostname(),
236 'ip': socket.inet_ntoa(struct.pack('>L', randint(0, 0xffffffff))),
237 'protocol': randstr(16),
238 'username': randstr(254),
239 'password': randstr(254),
240 'notes': randstr(254),
241 'model': randstr(32),
244 def random_conf_file():
246 'enabled': bool(randint()),
247 'source': randpath(255),
248 'dest': randpath(255),
249 'file_permissions': "%#o" % randint(0, 512),
250 'file_owner': randstr(32, letters + '_' + digits),
251 'file_group': randstr(32, letters + '_' + digits),
252 'preinstall_cmd': randpath(100),
253 'postinstall_cmd': randpath(100),
254 'error_cmd': randpath(100),
255 'ignore_cmd_errors': bool(randint()),
256 'always_update': bool(randint()),
259 def random_attribute_type():
261 'name': randstr(100),
262 'description': randstr(254),
263 'min_role_id': int(random.sample(roles, 1)[0]),
266 def random_pcu_type():
268 'model': randstr(254),
269 'name': randstr(254),
272 def random_pcu_protocol_type():
274 'port': randint(0, 65535),
275 'protocol': randstr(254),
276 'supported': randbool()
279 def random_slice_instantiation():
281 'instantiation': randstr(10)
283 def random_slice_attribute():
285 'attribute_type_id': random.sample(attribute_types, 1)[0],
290 def random_initscript():
293 'enabled': randbool(),
294 'script': randstr(200)
299 'role_id': randint(1000),
303 def random_message():
305 'message_id': randstr(10),
306 'subject': randstr(100),
307 'template': randstr(254),
310 class api_unit_test(Test):
312 logfile = Logfile("api-unittest-summary.log")
321 pcu_protocol_types = 2,
329 nodenetwork_setting_types = 2,
330 nodenetwork_settings = 2,
331 slice_attribute_types = 2,
332 slice_instantiations = 2,
334 slice_attributes = 4,
342 # Filter out deprecated (Adm) and boot Methods
343 current_methods = lambda method: not method.startswith('Adm') and \
344 not method.startswith('Slice') and \
345 not method.startswith('Boot') and \
346 not method.startswith('Anon') and \
347 not method.startswith('system')
348 self.all_methods = set(filter(current_methods, api.system.listMethods()))
349 self.methods_tested = set()
350 self.methods_failed = set()
352 # Begin testing methods
355 if hasattr(self, 'BootStates'): self.boot_states = self.BootStates(boot_states)
356 if hasattr(self, 'Sites'): self.site_ids = self.Sites(sites)
357 if hasattr(self, 'Peers'): self.peer_ids = self.Peers(peers)
358 if hasattr(self, 'AddressTypes'): self.address_type_ids = self.AddressTypes(address_types)
359 if hasattr(self, 'Addresses'): self.address_ids = self.Addresses(addresses)
360 if hasattr(self, 'PCUTypes'): self.pcu_type_ids = self.PCUTypes(pcu_types)
361 if hasattr(self, 'PCUProtocolTypes'): self.pcu_protocol_type_ids = self.PCUProtocolTypes(pcu_protocol_types)
362 if hasattr(self, 'PCUs'): self.pcu_ids = self.PCUs(pcus)
363 if hasattr(self, 'NetworkMethods'): self.network_methods = self.NetworkMethods()
364 if hasattr(self, 'NetworkTypes'): self.network_types = self.NetworkTypes()
365 if hasattr(self, 'NodeGroups'): self.nodegroup_ids = self.NodeGroups()
366 if hasattr(self, 'Nodes'): self.node_ids = self.Nodes(nodes)
367 if hasattr(self, 'ConfFiles'): self.conf_file_ids = self.ConfFiles(conf_files)
368 if hasattr(self, 'NodeNetworks'): self.nodenetwork_ids = self.NodeNetworks(nodenetworks)
369 if hasattr(self, 'NodeNetworkSettingTypes'): self.nodenetwork_setting_type_ids = self.NodeNetworkSettingTypes(nodenetwork_setting_types)
370 if hasattr(self, 'NodeNetworkSettings'): self.nodenetwork_setting_ids = self.NodeNetworkSettings(nodenetwork_settings)
371 if hasattr(self, 'SliceAttributeTypes'): self.slice_attribute_type_ids = self.SliceAttributeTypes(slice_attribute_types)
372 if hasattr(self, 'SliceInstantiations'): self.slice_instantiations = self.SliceInstantiations(slice_instantiations)
373 if hasattr(self, 'Slices'): self.slice_ids = self.Slices(slices)
374 if hasattr(self, 'SliceAttributes'): self.slice_attribute_ids = self.SliceAttributes(slice_attributes)
375 if hasattr(self, 'InitScripts'): self.initscript_ids = self.InitScripts(initscripts)
376 if hasattr(self, 'Roles'): self.role_ids = self.Roles(roles)
377 if hasattr(self, 'Persons'): self.person_ids = self.Persons(persons)
378 if hasattr(self, 'KeyTypes'): self.key_types = self.KeyTypes(key_types)
379 if hasattr(self, 'Keys'): self.key_ids = self.Keys(keys)
380 if hasattr(self, 'Messages'): self.message_ids = self.Messages(messages)
381 if hasattr(self, 'Sessions'): self.session_ids = self.Sessions()
383 # Test misc Get calls
384 if hasattr(self, 'GenerateNodeConfFile'): self.GenerateNodeConfFile()
385 if hasattr(self, 'GetBootMedium'): self.GetBootMedium()
386 if hasattr(self, 'GetEventObjects'): self.event_object_ids = self.GetEventObjects()
387 if hasattr(self, 'GetEvents'): self.event_ids = self.GetEvents()
388 if hasattr(self, 'GetPeerData'): self.GetPeerData()
389 if hasattr(self, 'GetPeerName'): self.GetPeerName()
390 if hasattr(self, 'GetPlcRelease'): self.GetPlcRelease()
391 if hasattr(self, 'GetSliceKeys'): self.GetSliceKeys()
392 if hasattr(self, 'GetSliceTicket'): self.GetSliceTicket()
393 if hasattr(self, 'GetSlicesMD5'): self.GetSlicesMD5()
394 if hasattr(self, 'GetSlivers'): self.GetSlivers()
395 if hasattr(self, 'GetWhitelist'): self.GetWhitelist()
397 # Test various administrative methods
398 if hasattr(self, 'NotifyPersons'): self.NotifyPersons()
399 if hasattr(self, 'NotifySupport'): self.NotifySupport()
400 if hasattr(self, 'RebootNode'): self.RebootNode()
401 if hasattr(self, 'RefrestPeer'): self.RefreshPeer()
402 if hasattr(self, 'ResetPassword'): self.ResetPassword()
403 if hasattr(self, 'SetPersonPrimarySite'): self.SetPersonPrimarySite()
404 if hasattr(self, 'VerifyPerson'): self.VerifyPerson()
415 utils.header("writing api-unittest-summary.log")
416 methods_ok = list(self.methods_tested.difference(self.methods_failed))
417 methods_failed = list(self.methods_failed)
418 methods_untested = list(self.all_methods.difference(self.methods_tested))
420 methods_failed.sort()
421 methods_untested.sort()
422 print >> self.logfile, "\n".join([m+": [OK]" for m in methods_ok])
423 print >> self.logfile, "\n".join([m+": [FAILED]" for m in methods_failed])
424 print >> self.logfile, "\n".join([m+": [Not Tested]" for m in methods_untested])
426 def isequal(self, object_fields, expected_fields, method_name):
428 for field in expected_fields:
429 assert field in object_fields
430 assert object_fields[field] == expected_fields[field]
432 self.methods_failed.update([method_name])
436 def islistequal(self, list1, list2, method_name):
437 try: assert set(list1) == set(list2)
439 self.methods_failed.update([method_name])
443 def isunique(self, id, id_list, method_name):
444 try: assert id not in id_list
446 self.methods_failed.update([method_name])
450 def isinlist(self, item, item_list, method_name):
451 try: assert item in item_list
453 self.methods_failed.update([method_name])
456 def debug(self, method, method_name=None):
457 if method_name is None:
458 method_name = method.name
460 self.methods_tested.update([method_name])
461 def wrapper(*args, **kwds):
463 return method(*args, **kwds)
465 self.methods_failed.update([method_name])
466 print >> logfile, "%s%s: %s\n" % (method_name, tuple(args[1:]), traceback.format_exc())
472 if hasattr(self, 'session_ids'): self.DeleteSessions()
473 if hasattr(self, 'message_ids'): self.DeleteMessages()
474 if hasattr(self, 'key_types'): self.DeleteKeyTypes()
475 if hasattr(self, 'key_ids'): self.DeleteKeys()
476 if hasattr(self, 'person_ids'): self.DeletePersons()
477 if hasattr(self, 'role_ids'): self.DeleteRoles()
478 if hasattr(self, 'initscript_ids'): self.DeleteInitScripts()
479 if hasattr(self, 'slice_attribute_ids'): self.DeleteSliceAttributes()
480 if hasattr(self, 'slice_ids'): self.DeleteSlices()
481 if hasattr(self, 'slice_instantiations'): self.DeleteSliceInstantiations()
482 if hasattr(self, 'slice_attribute_type_ids'): self.DeleteSliceAttributeTypes()
483 if hasattr(self, 'nodenetwork_setting_ids'): self.DeleteNodeNetworkSettings()
484 if hasattr(self, 'nodenetwork_setting_type_ids'): self.DeleteNodeNetworkSettingTypes()
485 if hasattr(self, 'nodenetwork_ids'): self.DeleteNodeNetworks()
486 if hasattr(self, 'conf_file_ids'): self.DeleteConfFiles()
487 if hasattr(self, 'node_ids'): self.DeleteNodes()
488 if hasattr(self, 'nodegroup_ids'): self.DeleteNodeGroups()
489 if hasattr(self, 'network_types'): self.DeleteNetworkTypes()
490 if hasattr(self, 'network_methods'): self.DeleteNetworkMethods()
491 if hasattr(self, 'pcu_ids'): self.DeletePCUs()
492 if hasattr(self, 'pcu_protocol_type_ids'): self.DeletePCUProtocolTypes()
493 if hasattr(self, 'pcu_type_ids'): self.DeletePCUTypes()
494 if hasattr(self, 'address_ids'): self.DeleteAddresses()
495 if hasattr(self, 'address_type_ids'): self.DeleteAddressTypes()
496 if hasattr(self, 'peer_ids'): self.DeletePeers()
497 if hasattr(self, 'site_ids'): self.DeleteSites()
498 if hasattr(self, 'boot_states'): self.DeleteBootStates()
501 def Sites(self, n=4):
505 site_fields = random_site()
506 AddSite = self.debug(api.AddSite)
507 site_id = AddSite(auth, site_fields)
508 if site_id is None: continue
510 # Should return a unique id
511 self.isunique(site_id, site_ids, 'AddSite - isunique')
512 site_ids.append(site_id)
513 GetSites = self.debug(api.GetSites)
514 sites = GetSites(auth, [site_id])
515 if sites is None: continue
517 self.isequal(site, site_fields, 'AddSite - isequal')
520 site_fields = random_site()
521 UpdateSite = self.debug(api.UpdateSite)
522 result = UpdateSite(auth, site_id, site_fields)
525 sites = GetSites(auth, [site_id])
526 if sites is None: continue
528 self.isequal(site, site_fields, 'UpdateSite - isequal')
530 sites = GetSites(auth, site_ids)
531 if sites is not None:
532 self.islistequal(site_ids, [site['site_id'] for site in sites], 'GetSites - isequal')
534 if self.config.verbose:
535 utils.header("Added sites: %s" % site_ids)
540 def DeleteSites(self):
542 DeleteSite = self.debug(api.DeleteSite)
543 for site_id in self.site_ids:
544 result = DeleteSite(auth, site_id)
546 # Check if sites are deleted
547 GetSites = self.debug(api.GetSites)
548 sites = GetSites(auth, self.site_ids)
549 self.islistequal(sites, [], 'DeleteSite - check')
551 if self.config.verbose:
552 utils.header("Deleted sites: %s" % self.site_ids)
556 def NetworkMethods(self, n=2):
558 AddNetworkMethod = self.debug(api.AddNetworkMethod)
559 GetNetworkMethods = self.debug(api.GetNetworkMethods)
563 net_method = randstr(10)
564 AddNetworkMethod(auth, net_method)
565 if net_method is None: continue
567 # Should return a unique id
568 self.isunique(net_method, methods, 'AddNetworkMethod - isunique')
569 methods.append(net_method)
570 net_methods = GetNetworkMethods(auth)
571 if net_methods is None: continue
572 net_methods = filter(lambda x: x in [net_method], net_methods)
573 method = net_methods[0]
574 self.isequal(method, net_method, 'AddNetworkMethod - isequal')
577 net_methods = GetNetworkMethods(auth)
578 if net_methods is not None:
579 net_methods = filter(lambda x: x in methods, net_methods)
580 self.islistequal(methods, net_methods, 'GetNetworkMethods - isequal')
582 if self.config.verbose:
583 utils.header("Added network methods: %s" % methods)
587 def DeleteNetworkMethods(self):
588 DeleteNetworkMethod = self.debug(api.DeleteNetworkMethod)
589 GetNetworkMethods = self.debug(api.GetNetworkMethods)
590 for method in self.network_methods:
591 DeleteNetworkMethod(auth, method)
594 network_methods = GetNetworkMethods(auth)
595 network_methods = filter(lambda x: x in self.network_methods, network_methods)
596 self.islistequal(network_methods, [], 'DeleteNetworkMethods - check')
598 if self.config.verbose:
599 utils.header("Deleted network methods: %s" % self.network_methods)
600 self.network_methods = []
602 def NetworkTypes(self, n=2):
604 AddNetworkType = self.debug(api.AddNetworkType)
605 GetNetworkTypes = self.debug(api.GetNetworkTypes)
610 AddNetworkType(auth, type)
612 # Should return a unique id
613 self.isunique(type, net_types, 'AddNetworkType - isunique')
614 net_types.append(type)
615 types = GetNetworkTypes(auth)
616 if types is None: continue
617 types = filter(lambda x: x in [type], types)
618 if types is None: continue
620 self.isequal(net_type, type, 'AddNetworkType - isequal')
622 types = GetNetworkTypes(auth)
623 if types is not None:
624 types = filter(lambda x: x in net_types, types)
625 self.islistequal(types, net_types, 'GetNetworkTypes - isequal')
627 if self.config.verbose:
628 utils.header("Added network types: %s" % net_types)
632 def DeleteNetworkTypes(self):
633 DeleteNetworkType = self.debug(api.DeleteNetworkType)
634 GetNetworkTypes = self.debug(api.GetNetworkTypes)
635 for type in self.network_types:
636 DeleteNetworkType(auth, type)
639 network_types = GetNetworkTypes(auth)
640 network_types = filter(lambda x: x in self.network_types, network_types)
641 self.islistequal(network_types, [], 'DeleteNetworkTypes - check')
643 if self.config.verbose:
644 utils.header("Deleted network types: %s" % self.network_types)
645 self.network_types = []
648 def NodeGroups(self, n = 4):
650 AddNodeGroup = self.debug(api.AddNodeGroup)
651 UpdateNodeGroup = self.debug(api.UpdateNodeGroup)
652 GetNodeGroups = self.debug(api.GetNodeGroups)
656 nodegroup_fields = random_nodegroup()
657 nodegroup_id = AddNodeGroup(auth, nodegroup_fields)
658 if nodegroup_id is None: continue
660 # Should return a unique id
661 self.isunique(nodegroup_id, nodegroup_ids, 'AddNodeGroup - isunique')
662 nodegroup_ids.append(nodegroup_id)
663 nodegroups = GetNodeGroups(auth, [nodegroup_id])
664 if nodegroups is None: continue
665 nodegroup = nodegroups[0]
666 self.isequal(nodegroup, nodegroup_fields, 'AddNodeGroup - isequal')
669 nodegroup_fields = random_nodegroup()
670 UpdateNodeGroup(auth, nodegroup_id, nodegroup_fields)
673 nodegroups = GetNodeGroups(auth, [nodegroup_id])
674 if nodegroups is None: continue
675 nodegroup = nodegroups[0]
676 self.isequal(nodegroup, nodegroup_fields, 'UpdateNodeGroup - isequal')
678 nodegroups = GetNodeGroups(auth, nodegroup_ids)
679 if nodegroups is not None:
680 self.islistequal(nodegroup_ids, [n['nodegroup_id'] for n in nodegroups], 'GetNodeGroups - isequal')
681 if self.config.verbose:
682 utils.header("Added nodegroups: %s" % nodegroup_ids)
686 def DeleteNodeGroups(self):
687 # Delete all NodeGroups
688 GetNodeGroups = self.debug(api.GetNodeGroups)
689 DeleteNodeGroup = self.debug(api.DeleteNodeGroup)
691 for nodegroup_id in self.nodegroup_ids:
692 result = DeleteNodeGroup(auth, nodegroup_id)
694 # Check is nodegroups are deleted
695 nodegroups = GetNodeGroups(auth, self.nodegroup_ids)
696 self.islistequal(nodegroups, [], 'DeleteNodeGroup - check')
698 if self.config.verbose:
699 utils.header("Deleted nodegroups: %s" % self.nodegroup_ids)
701 self.nodegroup_ids = []
703 def PCUTypes(self, n=2):
705 AddPCUType = self.debug(api.AddPCUType)
706 UpdatePCUType = self.debug(api.UpdatePCUType)
707 GetPCUTypes = self.debug(api.GetPCUTypes)
711 pcu_type_fields = random_pcu_type()
712 pcu_type_id = AddPCUType(auth, pcu_type_fields)
713 if pcu_type_id is None: continue
714 # Should return a unique id
715 self.isunique(pcu_type_id, pcu_type_ids, 'AddPCUType - isunique')
716 pcu_type_ids.append(pcu_type_id)
719 pcu_types = GetPCUTypes(auth, [pcu_type_id])
720 if pcu_types is None: continue
721 pcu_type = pcu_types[0]
722 self.isequal(pcu_type, pcu_type_fields, 'AddPCUType - isequal')
725 pcu_type_fields = random_pcu_type()
726 UpdatePCUType(auth, pcu_type_id, pcu_type_fields)
729 pcu_types = GetPCUTypes(auth, [pcu_type_id])
730 if pcu_types is None: continue
731 pcu_type = pcu_types[0]
732 self.isequal(pcu_type, pcu_type_fields, 'UpdatePCUType - isequal')
734 pcu_types = GetPCUTypes(auth, pcu_type_ids)
735 if pcu_types is not None:
736 self.islistequal(pcu_type_ids, [p['pcu_type_id'] for p in pcu_types], 'GetPCUTypes - check')
738 if self.config.verbose:
739 utils.header("Added pcu_types: %s " % pcu_type_ids)
742 def DeletePCUTypes(self):
743 GetPCUTypes = self.debug(api.GetPCUTypes)
744 DeletePCUType = self.debug(api.DeletePCUType)
746 for pcu_type_id in self.pcu_type_ids:
747 DeletePCUType(auth, pcu_type_id)
749 pcu_types = GetPCUTypes(auth, self.pcu_type_ids)
750 self.islistequal(pcu_types, [], 'DeletePCUType - check')
752 def PCUProtocolTypes(self, n=2):
753 protocol_type_ids = []
754 AddPCUProtocolType = self.debug(api.AddPCUProtocolType)
755 UpdatePCUProtocolType = self.debug(api.UpdatePCUProtocolType)
756 GetPCUProtocolTypes = self.debug(api.GetPCUProtocolTypes)
759 # Add PCUProtocolType
760 protocol_type_fields = random_pcu_protocol_type()
761 pcu_type_id = random.sample(self.pcu_type_ids, 1)[0]
762 protocol_type_id = AddPCUProtocolType(auth, pcu_type_id, protocol_type_fields)
763 if protocol_type_id is None: continue
765 # Should return a unique id
766 self.isunique(protocol_type_id, protocol_type_ids, 'AddPCUProtocolType - isunique')
767 protocol_type_ids.append(protocol_type_id)
769 # Check protocol type
770 protocol_types = GetPCUProtocolTypes(auth, [protocol_type_id])
771 if protocol_types is None: continue
772 protocol_type = protocol_types[0]
773 self.isequal(protocol_type, protocol_type_fields, 'AddPCUProtocolType - isequal')
775 # Update protocol type
776 protocol_type_fields = random_pcu_protocol_type()
777 UpdatePCUProtocolType(auth, protocol_type_id, protocol_type_fields)
780 protocol_types = GetPCUProtocolTypes(auth, [protocol_type_id])
781 if protocol_types is None: continue
782 protocol_type = protocol_types[0]
783 self.isequal(protocol_type, protocol_type_fields, 'UpdatePCUProtocolType - isequal')
785 protocol_types = GetPCUProtocolTypes(auth, protocol_type_ids)
786 if protocol_types is not None:
787 pt_ids = [p['pcu_protocol_type_id'] for p in protocol_types]
788 self.islistequal(protocol_type_ids, pt_ids, 'GetPCUProtocolTypes - isequal')
790 if self.config.verbose:
791 utils.header('Added pcu_protocol_types: %s' % protocol_type_ids)
793 return protocol_type_ids
795 def DeletePCUProtocolTypes(self):
796 GetPCUProtocolTypes = self.debug(api.GetPCUProtocolTypes)
797 DeletePCUProtocolType = self.debug(api.DeletePCUProtocolType)
799 for protocol_type_id in self.pcu_protocol_type_ids:
800 DeletePCUProtocolType(auth, protocol_type_id)
803 protocol_types = GetPCUProtocolTypes(auth, self.pcu_protocol_type_ids)
804 self.islistequal(protocol_types, [], 'DeletePCUProtocolType - check')
806 if self.config.verbose:
807 utils.header("Deleted pcu_protocol_types: %s" % self.pcu_protocol_type_ids)
808 self.pcu_protocol_type_ids = []
810 def PCUs(self, n = 4):
812 AddPCU = self.debug(api.AddPCU)
813 UpdatePCU = self.debug(api.UpdatePCU)
814 GetPCUs = self.debug(api.GetPCUs)
816 for site_id in self.site_ids:
818 pcu_fields = random_pcu()
819 pcu_id = AddPCU(auth, site_id, pcu_fields)
820 if pcu_id is None: continue
822 # Should return a unique id
823 self.isunique(pcu_id, pcu_ids, 'AddPCU - isunique')
824 pcu_ids.append(pcu_id)
827 pcus = GetPCUs(auth, [pcu_id])
828 if pcus is None: continue
830 self.isequal(pcu, pcu_fields, 'AddPCU - isequal')
833 pcu_fields = random_pcu()
834 UpdatePCU(auth, pcu_id, pcu_fields)
837 pcus = GetPCUs(auth, [pcu_id])
838 if pcus is None: continue
840 self.isequal(pcu, pcu_fields, 'UpdatePCU - isequal')
842 pcus = GetPCUs(auth, pcu_ids)
844 self.islistequal(pcu_ids, [p['pcu_id'] for p in pcus], 'GetPCUs - isequal')
846 if self.config.verbose:
847 utils.header('Added pcus: %s' % pcu_ids)
851 def DeletePCUs(self):
852 GetPCUs = self.debug(api.GetPCUs)
853 DeletePCU = self.debug(api.DeletePCU)
855 for pcu_id in self.pcu_ids:
856 DeletePCU(auth, pcu_id)
859 pcus = GetPCUs(auth, self.pcu_ids)
860 self.islistequal(pcus, [], 'DeletePCU - check')
862 if self.config.verbose:
863 utils.header("Deleted pcus: %s " % self.pcu_ids)
866 def Nodes(self, n=4):
868 AddNode = self.debug(api.AddNode)
869 GetNodes = self.debug(api.GetNodes)
870 UpdateNode = self.debug(api.UpdateNode)
873 node_fields = random_node()
874 site_id = random.sample(self.site_ids, 1)[0]
875 node_id = AddNode(auth, site_id, node_fields)
876 if node_id is None: continue
878 # Should return a unique id
879 self.isunique(node_id, node_ids, 'AddNode - isunique')
880 node_ids.append(node_id)
883 nodes = GetNodes(auth, [node_id])
884 if nodes is None: continue
886 self.isequal(node, node_fields, 'AddNode - isequal')
889 node_fields = random_node()
890 result = UpdateNode(auth, node_id, node_fields)
893 nodes = GetNodes(auth, [node_id])
894 if nodes is None: continue
896 self.isequal(node, node_fields, 'UpdateNode - isequal')
898 # Add node to nodegroup
899 nodegroup_id = random.sample(self.nodegroup_ids, 1)[0]
900 AddNodeToNodeGroup = self.debug(api.AddNodeToNodeGroup)
901 AddNodeToNodeGroup(auth, node_id, nodegroup_id)
904 sites = api.GetSites(auth, [node['site_id']], ['pcu_ids'])
905 if not sites: continue
907 pcu_id = random.sample(site['pcu_ids'], 1)[0]
908 port = random.sample(range(65535), 1)[0]
909 AddNodeToPCU = self.debug(api.AddNodeToPCU)
910 AddNodeToPCU(auth, node_id, pcu_id, port)
912 # check nodegroup, pcu
913 nodes = GetNodes(auth, [node_id], ['nodegroup_ids', 'pcu_ids'])
914 if nodes is None or not nodes: continue
916 self.islistequal([nodegroup_id], node['nodegroup_ids'], 'AddNodeToNodeGroup - check')
917 self.islistequal([pcu_id], node['pcu_ids'], 'AddNodeToPCU - check')
919 nodes = GetNodes(auth, node_ids)
920 if nodes is not None:
921 self.islistequal(node_ids, [node['node_id'] for node in nodes], 'GetNodes - isequal')
923 if self.config.verbose:
924 utils.header("Added nodes: %s" % node_ids)
928 def DeleteNodes(self):
930 # Delete attributes manually for first node
931 GetNodes = self.debug(api.GetNodes)
932 nodes = GetNodes(auth, self.node_ids)
933 if nodes is None or not nodes: return 0
936 if node['nodegroup_ids']:
938 nodegroup_id = random.sample(node['nodegroup_ids'], 1)[0]
939 DeleteNodeFromNodeGroup = self.debug(api.DeleteNodeFromNodeGroup)
940 DeleteNodeFromNodeGroup(auth, node['node_id'], nodegroup_id)
944 pcu_id = random.sample(node['pcu_ids'], 1)[0]
945 DeleteNodeFromPCU = self.debug(api.DeleteNodeFromPCU)
946 DeleteNodeFromPCU(auth, node['node_id'], pcu_id)
948 # check nodegroup, pcu
949 nodes = GetNodes(auth, [node['node_id']])
950 if nodes is None or not nodes: return 0
951 self.islistequal([], node['nodegroup_ids'], 'DeleteNodeGromNodeGroup - check')
952 self.islistequal([], node['pcu_ids'], 'DeleteNodeFromPCU - check')
954 # Delete rest of nodes
955 DeleteNode = self.debug(api.DeleteNode)
956 for node_id in self.node_ids:
957 result = DeleteNode(auth, node_id)
959 # Check if nodes are deleted
960 GetNodes = self.debug(api.GetNodes)
961 nodes = GetNodes(auth, self.node_ids)
962 self.islistequal(nodes, [], 'DeleteNode Check')
964 if self.config.verbose:
965 utils.header("Deleted nodes: %s" % self.node_ids)
969 def AddressTypes(self, n = 3):
970 address_type_ids = []
972 address_type_fields = random_address_type()
973 AddAddressType = self.debug(api.AddAddressType)
974 address_type_id = AddAddressType(auth, address_type_fields)
975 if address_type_id is None: continue
977 # Should return a unique address_type_id
978 self.isunique(address_type_id, address_type_ids, 'AddAddressType - isunique')
979 address_type_ids.append(address_type_id)
982 GetAddressTypes = self.debug(api.GetAddressTypes)
983 address_types = GetAddressTypes(auth, [address_type_id])
984 if address_types is None: continue
985 address_type = address_types[0]
986 self.isequal(address_type, address_type_fields, 'AddAddressType - isequal')
988 # Update address type
989 address_type_fields = random_address_type()
990 UpdateAddressType = self.debug(api.UpdateAddressType)
991 result = UpdateAddressType(auth, address_type_id, address_type_fields)
992 if result is None: continue
994 # Check address type again
995 address_types = GetAddressTypes(auth, [address_type_id])
996 if address_types is None: continue
997 address_type = address_types[0]
998 self.isequal(address_type, address_type_fields, 'UpdateAddressType - isequal')
1000 # Check get all address types
1001 address_types = GetAddressTypes(auth, address_type_ids)
1002 if address_types is not None:
1003 self.islistequal(address_type_ids, [address_type['address_type_id'] for address_type in address_types], 'GetAddressTypes - isequal')
1005 if self.config.verbose:
1006 utils.header("Added address types: %s " % address_type_ids)
1008 return address_type_ids
1010 def DeleteAddressTypes(self):
1012 DeleteAddressType = self.debug(api.DeleteAddressType)
1013 for address_type_id in self.address_type_ids:
1014 DeleteAddressType(auth, address_type_id)
1016 GetAddressTypes = self.debug(api.GetAddressTypes)
1017 address_types = GetAddressTypes(auth, self.address_type_ids)
1018 self.islistequal(address_types, [], 'DeleteAddressType - check')
1020 if self.config.verbose:
1021 utils.header("Deleted address types: %s" % self.address_type_ids)
1023 self.address_type_ids = []
1025 def Addresses(self, n = 3):
1027 AddSiteAddress = self.debug(api.AddSiteAddress)
1028 GetAddresses = self.debug(api.GetAddresses)
1029 UpdateAddress = self.debug(api.UpdateAddress)
1030 AddAddressTypeToAddress = self.debug(api.AddAddressTypeToAddress)
1032 address_fields = random_address()
1033 site_id = random.sample(self.site_ids, 1)[0]
1034 address_id = AddSiteAddress(auth, site_id, address_fields)
1035 if address_id is None: continue
1037 # Should return a unique address_id
1038 self.isunique(address_id, address_ids, 'AddSiteAddress - isunique')
1039 address_ids.append(address_id)
1042 addresses = GetAddresses(auth, [address_id])
1043 if addresses is None: continue
1044 address = addresses[0]
1045 self.isequal(address, address_fields, 'AddSiteAddress - isequal')
1048 address_fields = random_address()
1049 result = UpdateAddress(auth, address_id, address_fields)
1052 addresses = GetAddresses(auth, [address_id])
1053 if addresses is None: continue
1054 address = addresses[0]
1055 self.isequal(address, address_fields, 'UpdateAddress - isequal')
1058 address_type_id = random.sample(self.address_type_ids, 1)[0]
1059 AddAddressTypeToAddress(auth, address_type_id, address_id)
1062 addresses = GetAddresses(auth, [address_id], ['address_type_ids'])
1063 if addresses is None or not addresses: continue
1064 address = addresses[0]
1065 self.islistequal([address_type_id], address['address_type_ids'], 'AddAddressTypeToAddress - check')
1067 addresses = GetAddresses(auth, address_ids)
1068 if addresses is not None:
1069 self.islistequal(address_ids, [ad['address_id'] for ad in addresses], 'GetAddresses - isequal')
1071 if self.config.verbose:
1072 utils.header("Added addresses: %s" % address_ids)
1076 def DeleteAddresses(self):
1078 DeleteAddress = self.debug(api.DeleteAddress)
1079 DeleteAddressTypeFromAddress = self.debug(api.DeleteAddressTypeFromAddress)
1080 GetAddresses = self.debug(api.GetAddresses)
1082 # Delete attributes mananually first
1083 addresses = GetAddresses(auth, self.address_ids, ['address_id', 'address_type_ids'])
1084 if addresses is None or not addresses: return 0
1085 address = addresses[0]
1087 if address['address_type_ids']:
1088 address_type_id = random.sample(address['address_type_ids'], 1)[0]
1089 DeleteAddressTypeFromAddress(auth, address_type_id, address['address_id'])
1091 # check address_type_ids
1092 addresses = GetAddresses(auth, [address['address_id']], ['address_type_ids'])
1093 if addresses is None or not addresses: return 0
1094 address = addresses[0]
1095 self.islistequal([], address['address_type_ids'], 'DeleteAddressTypeFromAddress - check')
1097 # Delete site addresses
1098 for address_id in self.address_ids:
1099 result = DeleteAddress(auth, address_id)
1102 addresses = GetAddresses(auth, self.address_ids)
1103 self.islistequal(addresses, [], 'DeleteAddress - check')
1104 if self.config.verbose:
1105 utils.header("Deleted addresses: %s" % self.address_ids)
1107 self.address_ids = []
1109 def SliceAttributeTypes(self, n = 2):
1110 attribute_type_ids = []
1111 AddSliceAttributeType = self.debug(api.AddSliceAttributeType)
1112 GetSliceAttributeTypes = self.debug(api.GetSliceAttributeTypes)
1113 UpdateSliceAttributeType = self.debug(api.UpdateSliceAttributeType)
1116 attribute_type_fields = random_attribute_type()
1117 attribute_type_id = AddSliceAttributeType(auth, attribute_type_fields)
1118 if attribute_type_id is None: continue
1120 # Should return a unique slice_attribute_type_id
1121 self.isunique(attribute_type_id, attribute_type_ids, 'AddSliceAttributeType - isunique')
1122 attribute_type_ids.append(attribute_type_id)
1124 # Check slice_attribute_type
1125 attribute_types = GetSliceAttributeTypes(auth, [attribute_type_id])
1126 if attribute_types is None: continue
1127 attribute_type = attribute_types[0]
1128 self.isequal(attribute_type, attribute_type_fields, 'AddSliceAttributeType - isequal')
1130 # Update slice_attribute_type
1131 attribute_type_fields = random_attribute_type()
1132 result = UpdateSliceAttributeType(auth, attribute_type_id, attribute_type_fields)
1135 attribute_types = GetSliceAttributeTypes(auth, [attribute_type_id])
1136 if attribute_types is None: continue
1137 attribute_type = attribute_types[0]
1138 self.isequal(attribute_type, attribute_type_fields, 'UpdateSliceAttributeType - isequal')
1140 attribute_types = GetSliceAttributeTypes(auth, attribute_type_ids)
1141 if attribute_types is not None:
1142 at_ids = [at['attribute_type_id'] for at in attribute_types]
1143 self.islistequal(attribute_type_ids, at_ids, 'GetSliceAttributeTypes - isequal')
1145 if self.config.verbose:
1146 utils.header("Added slice_attribute_types: %s" % attribute_type_ids)
1148 return attribute_type_ids
1150 def DeleteSliceAttributeTypes(self):
1151 DeleteSliceAttributeType = self.debug(api.DeleteSliceAttributeType)
1152 GetSliceAttributeTypes = self.debug(api.GetSliceAttributeTypes)
1154 # Delete slice_attribute_type
1155 for slice_attribute_type_id in self.slice_attribute_type_ids:
1156 result = DeleteSliceAttributeType(auth, slice_attribute_type_id)
1159 slice_attribute_types = GetSliceAttributeTypes(auth, self.slice_attribute_type_ids)
1160 self.islistequal(slice_attribute_types, [], 'DeleteSliceAttributeTypes - check')
1161 if self.config.verbose:
1162 utils.header("Deleted slice_attributes: %s" % self.slice_attribute_type_ids)
1164 self.slice_attribute_type_ids = []
1166 def SliceInstantiations(self, n = 2):
1168 AddSliceInstantiation= self.debug(api.AddSliceInstantiation)
1169 GetSliceInstantiations = self.debug(api.GetSliceInstantiations)
1173 result = AddSliceInstantiation(auth, inst)
1174 if result is None: continue
1177 # Check slice instantiaton
1178 instantiations = GetSliceInstantiations(auth)
1179 if instantiations is None: continue
1180 instantiations = filter(lambda x: x in [inst], instantiations)
1181 instantiation = instantiations[0]
1182 self.isequal(instantiation, inst, 'AddSliceInstantiation - isequal')
1185 instantiations = GetSliceInstantiations(auth)
1186 if instantiations is not None:
1187 instantiations = filter(lambda x: x in insts, instantiations)
1188 self.islistequal(insts, instantiations, 'GetSliceInstantiations - isequal')
1190 if self.config.verbose:
1191 utils.header("Added slice instantiations: %s" % insts)
1195 def DeleteSliceInstantiations(self):
1196 DeleteSliceInstantiation = self.debug(api.DeleteSliceInstantiation)
1197 GetSliceInstantiations = self.debug(api.GetSliceInstantiations)
1198 # Delete slice instantiation
1199 for instantiation in self.slice_instantiations:
1200 result = DeleteSliceInstantiation(auth, instantiation)
1203 instantiations = GetSliceInstantiations(auth)
1204 instantiations = filter(lambda x: x in self.slice_instantiations, instantiations)
1205 self.islistequal(instantiations, [], 'DeleteSliceInstantiation - check')
1206 if self.config.verbose:
1207 utils.header("Deleted slice instantiations: %s" % self.slice_instantiations)
1209 self.slice_instantiations = []
1211 def Slices(self, n = 3):
1213 AddSlice = self.debug(api.AddSlice)
1214 GetSlices = self.debug(api.GetSlices)
1215 UpdateSlice = self.debug(api.UpdateSlice)
1216 AddSliceToNodes = self.debug(api.AddSliceToNodes)
1219 slice_fields = random_slice()
1220 slice_id = AddSlice(auth, slice_fields)
1221 if slice_id is None: continue
1223 # Should return a unique id
1224 self.isunique(slice_id, slice_ids, 'AddSlicel - isunique')
1225 slice_ids.append(slice_id)
1226 slices = GetSlices(auth, [slice_id])
1227 if slices is None: continue
1229 self.isequal(slice, slice_fields, 'AddSlice - isequal')
1232 slice_fields = random_slice()
1233 result = UpdateSlice(auth, slice_id, slice_fields)
1236 slices = GetSlices(auth, [slice_id])
1237 if slices is None: continue
1239 self.isequal(slice, slice_fields, 'UpdateSlice - isequal')
1242 node_id = random.sample(self.node_ids, 1)[0]
1243 AddSliceToNodes(auth, slice_id, [node_id])
1246 slices = GetSlices(auth, [slice_id], ['node_ids'])
1247 if slices is None or not slices: continue
1249 self.islistequal([node_id], slice['node_ids'], 'AddSliceToNode - check')
1251 slices = GetSlices(auth, slice_ids)
1252 if slices is not None:
1253 self.islistequal(slice_ids, [slice['slice_id'] for slice in slices], 'GetSlices - isequal')
1255 if self.config.verbose:
1256 utils.header("Added slices: %s" % slice_ids)
1260 def DeleteSlices(self):
1262 GetSlices = self.debug(api.GetSlices)
1263 DeleteSlice = self.debug(api.DeleteSlice)
1264 DeleteSliceFromNodes = self.debug(api.DeleteSliceFromNodes)
1266 # manually delete attributes for first slice
1267 slices = GetSlices(auth, self.slice_ids, ['slice_id', 'node_ids'])
1268 if slices is None or not slices: return 0
1271 if slice['node_ids']:
1272 # Delete node from slice
1273 node_id = random.sample(slice['node_ids'], 1)[0]
1274 DeleteSliceFromNodes(slice['slice_id'], [node_id])
1277 slices = GetSlices(auth, [slice['slice_id']], ['node_ids'])
1278 if slices is None or not slices: return 0
1280 self.islistequal([], slice['node_ids'], 'DeleteSliceFromNode - check')
1282 # Have DeleteSlice automatically delete attriubtes for the rest
1283 for slice_id in self.slice_ids:
1285 DeleteSlice(auth, slice_id)
1287 # Check if slices are deleted
1288 GetSlices = self.debug(api.GetSlices)
1289 slices = GetSlices(auth, self.slice_ids)
1290 self.islistequal(slices, [], 'DeleteSlice - check')
1292 if self.config.verbose:
1293 utils.header("Deleted slices: %s" % self.slice_ids)
1297 def SliceAttributes(self, n = 4):
1299 AddSliceAttribute = self.debug(api.AddSliceAttribute)
1300 GetSliceAttributes = self.debug(api.GetSliceAttributes)
1301 UpdateSliceAttribute = self.debug(api.UpdateSliceAttribute)
1304 # Add slice attribute
1305 attribute_fields = random_slice_attribute()
1306 slice_id = random.sample(self.slice_ids, 1)[0]
1307 type = attribute_fields['attribute_type_id']
1308 value = attribute_fields['value']
1309 attribute_id = AddSliceAttribute(auth, slice_id, type, value)
1310 if attribute_id is None: continue
1312 # Should return a unique id
1313 self.isunique(attribute_id, attribute_ids, 'AddSliceAttribute - isunique')
1314 attribute_ids.append(attribute_id)
1317 attributes = GetSliceAttributes(auth, [attribute_id])
1318 if attributes is None: continue
1319 attribute = attributes[0]
1320 self.isequal(attribute, attribute_fields, 'AddSliceAttribute - isequal')
1323 attribute_fields = random_slice_attribute()
1324 type = attribute_fields['attribute_type_id']
1325 value = attribute_fields['value']
1326 result = UpdateSliceAttribute(auth, attribute_id, value)
1329 attributes = GetSliceAttributes(auth, [attribute_id])
1330 if attributes is None: continue
1331 attribute = attributes[0]
1332 self.isequal(attribute, attribute_fields, 'UpdateSliceAttribute - isequal')
1334 attributes = GetSliceAttributes(auth, attribute_ids)
1335 if attributes is not None:
1336 attr_ids = [a['slice_attribute_id'] for a in attributes]
1337 self.islistequal(attribute_ids, attr_ids, 'GetSliceAttributes - isequal')
1338 if self.config.verbose:
1339 utils.header("Added slice attributes: %s" % attribute_ids)
1341 return attribute_ids
1343 def DeleteSliceAttributes(self):
1344 DeleteSliceAttribute = self.debug(api.DeleteSliceAttribute)
1345 GetSliceAttributes = self.debug(api.GetSliceAttributes)
1347 for attribute_id in self.slice_attribute_ids:
1348 DeleteSliceAttribute(auth, attribute_id)
1350 attributes = GetSliceAttributes(auth, self.slice_attribute_ids)
1351 self.islistequal(attributes, [], 'DeleteSliceAttribute - check')
1353 if self.config.verbose:
1354 utils.header("Deleted slice attributes: %s" % self.slice_attribute_ids)
1356 self.slice_attribute_ids = []
1358 def InitScripts(self, n = 2):
1360 AddInitScript = self.debug(api.AddInitScript)
1361 GetInitScripts = self.debug(api.GetInitScripts)
1362 UpdateInitScript = self.debug(api.UpdateInitScript)
1365 initscript_fields = random_initscript()
1366 initscript_id = AddInitScript(auth, initscript_fields)
1368 # Should return a unique id
1369 self.isunique(initscript_id, initscript_ids, 'AddInitScript - isunique')
1370 initscript_ids.append(initscript_id)
1371 initscripts = GetInitScripts(auth, [initscript_id])
1372 if initscripts is None: continue
1373 initscript = initscripts[0]
1374 self.isequal(initscript, initscript_fields, 'AddInitScript - isequal')
1377 initscript_fields = random_initscript()
1378 result = UpdateInitScript(auth, initscript_id, initscript_fields)
1381 initscripts = GetInitScripts(auth, [initscript_id])
1382 if initscripts is None: continue
1383 initscript = initscripts[0]
1384 self.isequal(initscript, initscript_fields, 'UpdateInitScript - isequal')
1386 initscripts = GetInitScripts(auth, initscript_ids)
1387 if initscripts is not None:
1388 self.islistequal(initscript_ids, [i['initscript_id'] for i in initscripts], 'GetInitScripts -isequal')
1390 if self.config.verbose:
1391 utils.header("Added initscripts: %s" % initscript_ids)
1393 return initscript_ids
1395 def DeleteInitScripts(self):
1396 # Delete all initscripts
1397 DeleteInitScript = self.debug(api.DeleteInitScript)
1398 GetInitScripts = self.debug(api.GetInitScripts)
1399 for initscript_id in self.initscript_ids:
1400 result = DeleteInitScript(auth, initscript_id)
1402 # Check if peers are deleted
1403 initscripts = GetInitScripts(auth, self.initscript_ids)
1404 self.islistequal(initscripts, [], 'DeletInitScript - check')
1406 if self.config.verbose:
1407 utils.header("Deleted initscripts: %s" % self.initscript_ids)
1408 self.initscript_ids =[]
1410 def Roles(self, n = 2):
1412 AddRole = self.debug(api.AddRole)
1413 GetRoles = self.debug(api.GetRoles)
1416 role_fields = random_role()
1417 role_id = role_fields['role_id']
1418 name = role_fields['name']
1419 AddRole(auth, role_id, name)
1421 # Should return a unique id
1422 self.isunique(role_id, role_ids, 'AddRole - isunique')
1423 role_ids.append(role_id)
1424 roles = GetRoles(auth)
1425 if roles is None: continue
1426 roles = filter(lambda x: x['role_id'] in [role_id], roles)
1428 self.isequal(role, role_fields, 'AddRole - isequal')
1430 roles = GetRoles(auth)
1431 if roles is not None:
1432 roles = filter(lambda x: x['role_id'] in role_ids, roles)
1433 self.islistequal(role_ids, [r['role_id'] for r in roles], 'GetRoles - isequal')
1435 if self.config.verbose:
1436 utils.header("Added roles: %s" % role_ids)
1440 def DeleteRoles(self):
1442 DeleteRole = self.debug(api.DeleteRole)
1443 GetRoles = self.debug(api.GetRoles)
1444 for role_id in self.role_ids:
1445 result = DeleteRole(auth, role_id)
1447 # Check if peers are deleted
1448 roles = GetRoles(auth)
1449 roles = filter(lambda x: x['role_id'] in self.role_ids, roles)
1450 self.islistequal(roles, [], 'DeleteRole - check' % self.role_ids)
1452 if self.config.verbose:
1453 utils.header("Deleted roles: %s" % self.role_ids)
1456 def Persons(self, n = 3):
1462 person_fields = random_person()
1463 AddPerson = self.debug(api.AddPerson)
1464 person_id = AddPerson(auth, person_fields)
1465 if person_id is None: continue
1467 # Should return a unique person_id
1468 self.isunique(person_id, person_ids, 'AddPerson - isunique')
1469 person_ids.append(person_id)
1470 GetPersons = self.debug(api.GetPersons)
1471 persons = GetPersons(auth, [person_id])
1472 if persons is None: continue
1474 self.isequal(person, person_fields, 'AddPerson - isequal')
1477 person_fields = random_person()
1478 person_fields['enabled'] = True
1479 UpdatePerson = self.debug(api.UpdatePerson)
1480 result = UpdatePerson(auth, person_id, person_fields)
1483 AddRoleToPerson = self.debug(api.AddRoleToPerson)
1484 role = random.sample(roles, 1)[0]
1485 result = AddRoleToPerson(auth, role, person_id)
1489 key_id = AddPersonKey = self.debug(api.AddPersonKey)
1490 AddPersonKey(auth, person_id, key)
1492 # Add person to site
1493 site_id = random.sample(self.site_ids, 1)[0]
1494 AddPersonToSite = self.debug(api.AddPersonToSite)
1495 AddPersonToSite(auth, person_id, site_id)
1497 # Add person to slice
1498 slice_id = random.sample(self.slice_ids, 1)[0]
1499 AddPersonToSlice = self.debug(api.AddPersonToSlice)
1500 AddPersonToSlice(auth, person_id, slice_id)
1502 # check role, key, site, slice
1503 persons = GetPersons(auth, [person_id], ['roles', 'key_ids', 'site_ids', 'slice_ids'])
1504 if persons is None or not persons: continue
1506 self.islistequal([role], person['roles'], 'AddRoleToPerson - check')
1507 self.islistequal([key_id], person['key_ids'], 'AddPersonKey - check')
1508 self.islistequal([site_id], person['site_ids'], 'AddPersonToSite - check')
1509 self.islistequal([slice_id], person['slice_ids'], 'AddPersonToSlice - check')
1511 persons = GetPersons(auth, person_ids)
1512 if persons is not None:
1513 self.islistequal(person_ids, [p['person_id'] for p in persons], 'GetPersons - isequal')
1515 if self.config.verbose:
1516 utils.header("Added users: %s" % person_ids)
1520 def DeletePersons(self):
1522 # Delete attributes manually for first person
1523 GetPersons = self.debug(api.GetPersons)
1524 persons = GetPersons(auth, self.person_ids, ['person_id' , 'key_ids', 'site_ids', 'slice_ids', 'roles'])
1525 if persons is None or not persons: return 0
1530 role = random.sample(person['roles'], 1)[0]
1531 DeleteRoleFromPerson = self.debug(api.DeleteRoleFromPerson)
1532 DeleteRoleFromPerson(auth, role, person['person_id'])
1534 if person['key_ids']:
1536 key_id = random.sample(person['key_ids'], 1)[0]
1537 DeleteKey = self.debug(api.DeleteKey)
1538 DeleteKey(auth, key_id)
1540 if person['site_ids']:
1541 # Remove person from site
1542 site_id = random.sample(person['site_ids'], 1)[0]
1543 DeletePersonFromSite = self.debug(api.DeletePersonFromSite)
1544 DeletePersonFromSite(auth, person['person_id'], site_id)
1546 if person['slice_ids']:
1547 # Remove person from slice
1548 slice_id = random.sample(person['slice_ids'], 1)[0]
1549 DeletePersonFromSlice = self.debug(api.DeletePersonFromSlice)
1550 DeletePersonFromSlice(auth, person['person_id'], slice_id)
1552 # check role, key, site, slice
1553 persons = GetPersons(auth, [person['person_id']], ['roles', 'key_ids', 'site_ids', 'slice_ids'])
1554 if persons is None or not persons: return 0
1556 self.islistequal([], person['roles'], 'DeleteRoleFromPerson - check')
1557 self.islistequal([], person['key_ids'], 'DeleteKey - check')
1558 self.islistequal([], person['site_ids'], 'DeletePersonFromSite - check')
1559 self.islistequal([], person['slice_ids'], 'DeletePersonFromSlice - check')
1561 DeletePerson = self.debug(api.DeletePerson)
1562 # Have DeletePeson automatically delete attriubtes for all other persons
1563 for person_id in self.person_ids:
1565 DeletePerson(auth, person_id)
1567 # Check if persons are deleted
1568 GetPersons = self.debug(api.GetPersons)
1569 persons = GetPersons(auth, self.person_ids)
1570 self.islistequal(persons, [], 'DeletePerson - check')
1572 if self.config.verbose:
1573 utils.header("Deleted users: %s" % self.person_ids)
1575 self.person_ids = []
1577 def KeyTypes(self, n = 2):
1579 AddKeyType = self.debug(api.AddKeyType)
1580 GetKeyTypes = self.debug(api.GetKeyTypes)
1583 keytype = randstr(10)
1584 result = AddKeyType(auth, keytype)
1585 if result is None: continue
1588 key_types.append(keytype)
1589 keytypes = GetKeyTypes(auth)
1590 if not keytypes: continue
1591 keytypes = filter(lambda x: x in [keytype], keytypes)
1592 if not keytypes: continue
1593 self.isequal(keytype, keytypes[0], 'AddKeyType - isequal')
1596 keytypes = GetKeyTypes(auth)
1597 if keytypes is not None:
1598 keytypes = filter(lambda x: x in key_types, keytypes)
1599 self.islistequal(key_types, keytypes, 'GetKeyTypes - isequal')
1601 if self.config.verbose:
1602 utils.header("Added key types: %s" % key_types)
1606 def DeleteKeyTypes(self):
1607 DeleteKeyType = self.debug(api.DeleteKeyType)
1608 GetKeyTypes = self.debug(api.GetKeyTypes)
1609 for key_type in self.key_types:
1610 result = DeleteKeyType(auth, key_type)
1612 # Check if key types are deleted
1613 key_types = GetKeyTypes(auth)
1614 key_types = filter(lambda x: x in self.key_types, key_types)
1615 self.islistequal(key_types, [], 'DeleteKeyType - check')
1617 if self.config.verbose:
1618 utils.header("Deleted key types %s" % self.key_types)
1622 def Keys(self, n = 3):
1625 # Add a key to an account
1626 key_fields = random_key()
1627 person_id = random.sample(self.person_ids, 1)[0]
1628 AddPersonKey = self.debug(api.AddPersonKey)
1629 key_id = AddPersonKey(auth, person_id, key_fields)
1630 if key_id is None: continue
1632 # Should return a unique key_id
1633 self.isunique(key_id, key_ids, 'AddPersonKey - isunique')
1634 key_ids.append(key_id)
1635 GetKeys = self.debug(api.GetKeys)
1636 keys = GetKeys(auth, [key_id])
1637 if keys is None: continue
1639 self.isequal(key, key_fields, 'AddPersonKey - isequal')
1642 key_fields = random_key()
1643 UpdateKey = self.debug(api.UpdateKey)
1644 result = UpdateKey(auth, key_id, key_fields)
1646 keys = GetKeys(auth, [key_id])
1647 if keys is None or not keys: continue
1649 self.isequal(key, key_fields, 'UpdatePersonKey - isequal')
1651 keys = GetKeys(auth, key_ids)
1652 if keys is not None:
1653 self.islistequal(key_ids, [key['key_id'] for key in keys], 'GetKeys - isequal')
1655 if self.config.verbose:
1656 utils.header("Added keys: %s" % key_ids)
1660 def DeleteKeys(self):
1662 # Blacklist first key, Delete rest
1663 GetKeys = self.debug(api.GetKeys)
1664 DeleteKey = self.debug(api.DeleteKey)
1665 BlacklistKey = self.debug(api.BlacklistKey)
1667 key_id = self.key_ids.pop()
1668 BlacklistKey(auth, key_id)
1669 keys = GetKeys(auth, [key_id])
1670 self.islistequal(keys, [], 'BlacklistKey - check')
1672 if self.config.verbose:
1673 utils.header("Blacklisted key: %s" % key_id)
1675 for key_id in self.key_ids:
1676 DeleteKey(auth, key_id)
1678 keys = GetKeys(auth, self.key_ids)
1679 self.islistequal(keys, [], 'DeleteKey - check')
1681 if self.config.verbose:
1682 utils.header("Deleted keys: %s" % self.key_ids)
1686 def BootStates(self, n = 3):
1688 AddBootState = self.debug(api.AddBootState)
1689 GetBootStates = self.debug(api.GetBootStates)
1692 bootstate_fields = randstr(10)
1693 result = AddBootState(auth, bootstate_fields)
1694 if result is None: continue
1697 boot_states.append(bootstate_fields)
1698 bootstates = GetBootStates(auth)
1699 if not bootstates: continue
1700 bootstates = filter(lambda x: x in [bootstate_fields], bootstates)
1701 if not bootstates: continue
1702 bootstate = bootstates[0]
1703 self.isequal(bootstate, bootstate_fields, 'AddBootState - isequal')
1706 bs = GetBootStates(auth)
1708 bs = filter(lambda x: x in [boot_states], bs)
1709 self.islistequal(boot_states, bs, 'GetBootStates - isequal')
1711 if self.config.verbose:
1712 utils.header("Added boot_states: %s" % boot_states)
1716 def DeleteBootStates(self):
1717 DeleteBootState = self.debug(api.DeleteBootState)
1718 GetBootStates = self.debug(api.GetBootStates)
1719 for boot_state in self.boot_states:
1720 result = DeleteBootState(auth, boot_state)
1722 # Check if bootsates are deleted
1723 boot_states = GetBootStates(auth)
1724 boot_states = filter(lambda x: x in self.boot_states, boot_states)
1725 self.islistequal(boot_states, [], 'DeleteBootState check')
1727 if self.config.verbose:
1728 utils.header("Deleted boot_states: %s" % self.boot_states)
1730 self.boot_states = []
1733 def Peers(self, n = 2):
1735 AddPeer = self.debug(api.AddPeer)
1736 GetPeers = self.debug(api.GetPeers)
1737 UpdatePeer = self.debug(api.UpdatePeer)
1740 peer_fields = random_peer()
1741 peer_id = AddPeer(auth, peer_fields)
1743 # Should return a unique id
1744 self.isunique(peer_id, peer_ids, 'AddPeer - isunique')
1745 peer_ids.append(peer_id)
1746 peers = GetPeers(auth, [peer_id])
1747 if peers is None: continue
1749 self.isequal(peer, peer_fields, 'AddPeer - isequal')
1752 peer_fields = random_peer()
1753 result = UpdatePeer(auth, peer_id, peer_fields)
1756 peers = GetPeers(auth, [peer_id])
1757 if peers is None: continue
1759 self.isequal(peer, peer_fields, 'UpdatePeer - isequal')
1761 peers = GetPeers(auth, peer_ids)
1762 if peers is not None:
1763 self.islistequal(peer_ids, [peer['peer_id'] for peer in peers], 'GetPeers -isequal')
1765 if self.config.verbose:
1766 utils.header("Added peers: %s" % peer_ids)
1771 def DeletePeers(self):
1773 DeletePeer = self.debug(api.DeletePeer)
1774 GetPeers = self.debug(api.GetPeers)
1775 for peer_id in self.peer_ids:
1776 result = DeletePeer(auth, peer_id)
1778 # Check if peers are deleted
1779 peers = GetPeers(auth, self.peer_ids)
1780 self.islistequal(peers, [], 'DeletePeer - check' % self.peer_ids)
1782 if self.config.verbose:
1783 utils.header("Deleted peers: %s" % self.peer_ids)
1786 def ConfFiles(self, n = 2):
1790 conf_file_fields = random_conf_file()
1791 AddConfFile = self.debug(api.AddConfFile)
1792 conf_file_id = AddConfFile(auth, conf_file_fields)
1793 if conf_file_id is None: continue
1795 # Should return a unique id
1796 self.isunique(conf_file_id, conf_file_ids, 'AddConfFile - isunique')
1797 conf_file_ids.append(conf_file_id)
1800 GetConfFiles = self.debug(api.GetConfFiles)
1801 conf_files = GetConfFiles(auth, [conf_file_id])
1802 if conf_files is None: continue
1803 conf_file = conf_files[0]
1804 self.isequal(conf_file, conf_file_fields, 'AddConfFile - isunique')
1807 conf_file_fields = random_conf_file()
1808 UpdateConfFile = self.debug(api.UpdateConfFile)
1809 result = UpdateConfFile(auth, conf_file_id, conf_file_fields)
1812 conf_files = GetConfFiles(auth, [conf_file_id])
1813 if conf_files is None: continue
1814 conf_file = conf_files[0]
1815 self.isequal(conf_file, conf_file_fields, 'UpdateConfFile - isunique')
1818 # Add this conf file to a random node
1819 node_id = random.sample(self.node_ids, 1)[0]
1820 AddConfFileToNode = self.debug(api.AddConfFileToNode)
1821 AddConfFileToNode(auth, conf_file_id, node_id)
1823 # Add this conf file to a random node group
1824 nodegroup_id = random.sample(self.nodegroup_ids, 1)[0]
1825 AddConfFileToNodeGroup = self.debug(api.AddConfFileToNodeGroup)
1826 AddConfFileToNodeGroup(auth, conf_file_id, nodegroup_id)
1828 # Check node, nodegroup
1829 conf_files = GetConfFiles(auth, [conf_file_id], ['node_ids', 'nodegroup_ids'])
1830 if conf_files is None or not conf_files: continue
1831 conf_file = conf_files[0]
1832 self.islistequal([node_id], conf_file['node_ids'], 'AddConfFileToNode - check')
1833 self.islistequal([nodegroup_id], conf_file['nodegroup_ids'], 'AddConfFileToNodeGroup - check')
1837 conf_files = GetConfFiles(auth, conf_file_ids)
1838 if conf_files is not None:
1839 self.islistequal(conf_file_ids, [c['conf_file_id'] for c in conf_files], 'GetConfFiles - isequal')
1840 if self.config.verbose:
1841 utils.header("Added conf_files: %s" % conf_file_ids)
1843 return conf_file_ids
1845 def DeleteConfFiles(self):
1847 GetConfFiles = self.debug(api.GetConfFiles)
1848 DeleteConfFile = self.debug(api.DeleteConfFile)
1849 DeleteConfFileFromNode = self.debug(api.DeleteConfFileFromNode)
1850 DeleteConfFileFromNodeGroup = self.debug(api.DeleteConfFileFromNodeGroup)
1852 conf_files = GetConfFiles(auth, self.conf_file_ids)
1853 if conf_files is None or not conf_files: return 0
1854 conf_file = conf_files[0]
1855 if conf_file['node_ids']:
1856 node_id = random.sample(conf_file['node_ids'], 1)[0]
1857 DeleteConfFileFromNode(auth, conf_file['conf_file_id'], node_id)
1858 if conf_file['nodegroup_ids']:
1859 nodegroup_id = random.sample(conf_file['nodegroup_ids'], 1)[0]
1860 DeleteConfFileFromNodeGroup(auth, conf_file['conf_file_id'], nodegroup_id)
1863 conf_files = GetConfFiles(auth, [conf_file['conf_file_id']], ['node_ids', 'nodegroup_ids'])
1864 if conf_files is None or not conf_files: return 0
1865 conf_file = conf_files[0]
1866 self.islistequal([], conf_file['node_ids'], 'AddConfFileToNode - check')
1867 self.islistequal([], conf_file['nodegroup_ids'], 'AddConfFileToNodeGroup - check')
1869 for conf_file_id in self.conf_file_ids:
1870 DeleteConfFile(auth, conf_file_id)
1873 conf_files = GetConfFiles(auth, self.conf_file_ids)
1874 self.islistequal(conf_files, [], 'DeleteConfFile - check')
1876 if self.config.verbose:
1877 utils.header("Deleted conf_files: %s" % self.conf_file_ids)
1879 self.conf_file_ids = []
1881 def NodeNetworks(self, n = 4):
1882 nodenetwork_ids = []
1883 AddNodeNetwork = self.debug(api.AddNodeNetwork)
1884 UpdateNodeNetwork = self.debug(api.UpdateNodeNetwork)
1885 GetNodeNetworks = self.debug(api.GetNodeNetworks)
1889 nodenetwork_fields = random_nodenetwork()
1890 node_id = random.sample(self.node_ids, 1)[0]
1891 nodenetwork_id = AddNodeNetwork(auth, node_id, nodenetwork_fields)
1892 if nodenetwork_id is None: continue
1894 # Should return a unique id
1895 self.isunique(nodenetwork_ids, nodenetwork_ids, 'AddNodeNetwork - isunique')
1896 nodenetwork_ids.append(nodenetwork_id)
1898 # check Node Network
1899 nodenetworks = GetNodeNetworks(auth, [nodenetwork_id])
1900 if nodenetworks is None: continue
1901 nodenetwork = nodenetworks[0]
1902 self.isequal(nodenetwork, nodenetwork_fields, 'AddNodeNetwork - isequal')
1904 # Update NodeNetwork
1905 nodenetwork_fields = random_nodenetwork()
1906 UpdateNodeNetwork(auth, nodenetwork_id, nodenetwork_fields)
1909 nodenetworks = GetNodeNetworks(auth, [nodenetwork_id])
1910 if nodenetworks is None: continue
1911 nodenetwork = nodenetworks[0]
1912 self.isequal(nodenetwork, nodenetwork_fields, 'UpdateNodeNetwork - isequal')
1914 nodenetworks = GetNodeNetworks(auth, nodenetwork_ids)
1915 if nodenetworks is not None:
1916 self.islistequal(nodenetwork_ids, [n['nodenetwork_id'] for n in nodenetworks], 'GetNodeNetworks - isequal')
1918 if self.config.verbose:
1919 utils.header('Added nodenetworks: %s' % nodenetwork_ids)
1921 return nodenetwork_ids
1923 def DeleteNodeNetworks(self):
1924 GetNodeNetworks = self.debug(api.GetNodeNetworks)
1925 DeleteNodeNetwork = self.debug(api.DeleteNodeNetwork)
1927 for nodenetwork_id in self.nodenetwork_ids:
1928 DeleteNodeNetwork(auth, nodenetwork_id)
1931 nodenetworks = GetNodeNetworks(auth, self.nodenetwork_ids)
1932 self.islistequal(nodenetworks, [], 'DeleteNodeNetwork - check')
1934 if self.config.verbose:
1935 utils.header("Deleted nodenetworks: %s " % self.nodenetwork_ids)
1936 self.nodenetwork_ids = []
1938 def NodeNetworkSettings(self, n=2):
1939 nodenetwork_setting_ids = []
1940 AddNodeNetworkSetting = self.debug(api.AddNodeNetworkSetting)
1941 UpdateNodeNetworkSetting = self.debug(api.UpdateNodeNetworkSetting)
1942 GetNodeNetworkSettings = self.debug(api.GetNodeNetworkSettings)
1944 for nodenetwork_id in self.nodenetwork_ids:
1946 nodenetwork_setting_fields = random_nodenetwork_setting()
1947 #nodenetwork_id = random.sample(self.nodenetwork_ids, 1)[0]
1948 nodenetwork_setting_type_id = random.sample(self.nodenetwork_setting_type_ids, 1)[0]
1949 value = nodenetwork_setting_fields['value']
1950 nodenetwork_setting_id = AddNodeNetworkSetting(auth, nodenetwork_id, nodenetwork_setting_type_id, value)
1951 if nodenetwork_setting_id is None: continue
1953 # Should return a unique id
1954 self.isunique(nodenetwork_setting_ids, nodenetwork_setting_ids, 'AddNodeNetworkSetting - isunique')
1955 nodenetwork_setting_ids.append(nodenetwork_setting_id)
1957 # check Node Network
1958 nodenetwork_settings = GetNodeNetworkSettings(auth, [nodenetwork_setting_id])
1959 if nodenetwork_settings is None: continue
1960 nodenetwork_setting = nodenetwork_settings[0]
1961 self.isequal(nodenetwork_setting, nodenetwork_setting_fields, 'AddNodeNetworkSetting - isequal')
1963 # Update NodeNetworkSetting
1964 nodenetwork_setting_fields = random_nodenetwork_setting()
1965 value = nodenetwork_setting_fields['value']
1966 UpdateNodeNetworkSetting(auth, nodenetwork_setting_id, value)
1969 nodenetwork_settings = GetNodeNetworkSettings(auth, [nodenetwork_setting_id])
1970 if nodenetwork_settings is None: continue
1971 nodenetwork_setting = nodenetwork_settings[0]
1972 self.isequal(nodenetwork_setting, nodenetwork_setting_fields, 'UpdateNodeNetworkSetting - isequal')
1974 nodenetwork_settings = GetNodeNetworkSettings(auth, nodenetwork_setting_ids)
1975 if nodenetwork_settings is not None:
1976 self.islistequal(nodenetwork_setting_ids, [n['nodenetwork_setting_id'] for n in nodenetwork_settings], 'GetNodeNetworkSettings - isequal')
1978 if self.config.verbose:
1979 utils.header('Added nodenetwork_settings: %s' % nodenetwork_setting_ids)
1981 return nodenetwork_setting_ids
1983 def DeleteNodeNetworkSettings(self):
1984 GetNodeNetworkSettings = self.debug(api.GetNodeNetworkSettings)
1985 DeleteNodeNetworkSetting = self.debug(api.DeleteNodeNetworkSetting)
1987 for nodenetwork_setting_id in self.nodenetwork_setting_ids:
1988 DeleteNodeNetworkSetting(auth, nodenetwork_setting_id)
1991 nodenetwork_settings = GetNodeNetworkSettings(auth, self.nodenetwork_setting_ids)
1992 self.islistequal(nodenetwork_settings, [], 'DeleteNodeNetworkSetting - check')
1994 if self.config.verbose:
1995 utils.header("Deleted nodenetwork settings: %s " % self.nodenetwork_setting_ids)
1996 self.nodenetwork_setting_ids = []
1998 def NodeNetworkSettingTypes(self, n = 2):
1999 nodenetwork_setting_type_ids = []
2000 AddNodeNetworkSettingType = self.debug(api.AddNodeNetworkSettingType)
2001 UpdateNodeNetworkSettingType = self.debug(api.UpdateNodeNetworkSettingType)
2002 GetNodeNetworkSettingTypes = self.debug(api.GetNodeNetworkSettingTypes)
2005 # Add Node Network Settings Type
2006 nodenetwork_setting_type_fields = random_nodenetwork_setting_type()
2007 nodenetwork_setting_type_id = AddNodeNetworkSettingType(auth, nodenetwork_setting_type_fields)
2008 if nodenetwork_setting_type_id is None: continue
2010 # Should return a unique id
2011 self.isunique(nodenetwork_setting_type_ids, nodenetwork_setting_type_ids, 'AddNodeNetworkSettingType - isunique')
2012 nodenetwork_setting_type_ids.append(nodenetwork_setting_type_id)
2014 # check Node Network Settings Type
2015 nodenetwork_setting_types = GetNodeNetworkSettingTypes(auth, [nodenetwork_setting_type_id])
2016 if nodenetwork_setting_types is None: continue
2017 nodenetwork_setting_type = nodenetwork_setting_types[0]
2018 self.isequal(nodenetwork_setting_type, nodenetwork_setting_type_fields, 'AddNodeNetworkSettingType - isequal')
2020 # Update NodeNetworkSetting
2021 nodenetwork_setting_type_fields = random_nodenetwork_setting_type()
2022 UpdateNodeNetworkSettingType(auth, nodenetwork_setting_type_id, nodenetwork_setting_type_fields)
2025 nodenetwork_setting_types = GetNodeNetworkSettingTypes(auth, [nodenetwork_setting_type_id])
2026 if nodenetwork_setting_types is None: continue
2027 nodenetwork_setting_type = nodenetwork_setting_types[0]
2028 self.isequal(nodenetwork_setting_type, nodenetwork_setting_type_fields, 'UpdateNodeNetworkSettingType - isequal')
2030 nodenetwork_setting_types = GetNodeNetworkSettingTypes(auth, nodenetwork_setting_type_ids)
2031 if nodenetwork_setting_types is not None:
2032 self.islistequal(nodenetwork_setting_type_ids, [n['nodenetwork_setting_type_id'] for n in nodenetwork_setting_types], 'GetNodeNetworkSettingTypes - isequal')
2034 if self.config.verbose:
2035 utils.header('Added nodenetwork_setting_types: %s' % nodenetwork_setting_type_ids)
2037 return nodenetwork_setting_type_ids
2039 def DeleteNodeNetworkSettingTypes(self):
2040 GetNodeNetworkSettingTypes = self.debug(api.GetNodeNetworkSettingTypes)
2041 DeleteNodeNetworkSettingType = self.debug(api.DeleteNodeNetworkSettingType)
2043 for nodenetwork_setting_type_id in self.nodenetwork_setting_type_ids:
2044 DeleteNodeNetworkSettingType(auth, nodenetwork_setting_type_id)
2047 nodenetwork_setting_types = GetNodeNetworkSettingTypes(auth, self.nodenetwork_setting_type_ids)
2048 self.islistequal(nodenetwork_setting_types, [], 'DeleteNodeNetworkSettingType - check')
2050 if self.config.verbose:
2051 utils.header("Deleted nodenetwork setting types: %s " % self.nodenetwork_setting_type_ids)
2052 self.nodenetwork_setting_type_ids = []
2054 def Messages(self, n = 2):
2056 AddMessage = self.debug(api.AddMessage)
2057 GetMessages = self.debug(api.GetMessages)
2058 UpdateMessage = self.debug(api.UpdateMessage)
2061 message_fields = random_message()
2062 message_id = message_fields['message_id']
2063 AddMessage(auth, message_fields)
2064 if message_id is None: continue
2066 # Should return a unique id
2067 self.isunique(message_id, message_ids, 'AddMessage - isunique')
2068 message_ids.append(message_id)
2069 messages = GetMessages(auth, [message_id])
2070 if messages is None: continue
2071 message = messages[0]
2072 self.isequal(message, message_fields, 'AddMessage - isequal')
2075 message_fields = random_message()
2076 result = UpdateMessage(auth, message_id, message_fields)
2079 messages = GetMessages(auth, [message_id])
2080 if messages is None: continue
2081 message = messages[0]
2082 self.isequal(message, message_fields, 'UpdateMessage - isequal')
2084 messages = GetMessages(auth, message_ids)
2085 if messages is not None:
2086 self.islistequal(message_ids, [m['message_id'] for m in messages], 'GetMessages - isequal')
2088 if self.config.verbose:
2089 utils.header("Added messages: %s" % message_ids)
2093 def DeleteMessages(self):
2094 # Delete all messages
2095 DeleteMessage = self.debug(api.DeleteMessage)
2096 GetMessages = self.debug(api.GetMessages)
2097 for message_id in self.message_ids:
2098 result = DeleteMessage(auth, message_id)
2100 # Check if messages are deleted
2101 messages = GetMessages(auth, self.message_ids)
2102 self.islistequal(messages, [], 'DeleteMessage - check')
2104 if self.config.verbose:
2105 utils.header("Deleted messages: %s" % self.message_ids)
2107 self.message_ids = []
2109 def Sessions(self, n = 2):
2111 AddSession = self.debug(api.AddSession)
2112 GetSession = self.debug(api.GetSession)
2113 GetSessions = self.debug(api.GetSessions)
2116 person_id = random.sample(self.person_ids, 1)[0]
2117 session_id = AddSession(auth, person_id)
2118 if session_id is None: continue
2119 session_ids.append(session_id)
2122 sessions = GetSessions(auth, [person_id])
2123 if not sessions: continue
2124 session = sessions[0]
2125 sess_id = session['session_id']
2126 self.islistequal([sess_id], [session_id], 'AddSession - isequal')
2128 # GetSession creates session_id based on auth, so we must use the current auth
2129 session_id = GetSession(auth)
2130 if session_id is None: continue
2131 session_ids.append(session_id)
2134 sessions = GetSessions(auth, [auth['Username']])
2135 if not sessions: continue
2136 session = sessions[0]
2137 sess_id = session['session_id']
2138 self.islistequal([sess_id], [session_id], 'GetSession - isequal')
2141 sessions = GetSessions(auth, session_ids)
2142 if sessions is not None:
2143 sess_ids = [s['session_id'] for s in sessions]
2144 self.islistequal(sess_ids, session_ids, 'GetSessions - isequal')
2146 if self.config.verbose:
2147 utils.header("Added sessions: %s" % session_ids)
2151 def DeleteSessions(self):
2152 DeleteSession = self.debug(api.DeleteSession)
2153 GetSessions = self.debug(api.GetSessions)
2155 # DeleteSession deletes based on auth, so we must create auths for the sessions we delete
2156 for session_id in self.session_ids:
2157 sessions = GetSessions(auth, [session_id])
2158 if not sessions: continue
2159 session = sessions[0]
2161 'session': session['session_id'],
2162 'AuthMethod': 'session'
2165 DeleteSession(tmpauth)
2167 # Check if sessions are deleted
2168 sessions = GetSessions(auth, self.session_ids)
2169 self.islistequal(sessions, [], 'DeleteBootState check')
2171 if self.config.verbose:
2172 utils.header("Deleted sessions: %s" % self.session_ids)
2174 self.session_ids = []
2176 def GenerateNodeConfFile(self):
2177 GetNodes = self.debug(api.GetNodes)
2178 GetNodeNetworks = self.debug(api.GetNodeNetworks)
2179 GenerateNodeConfFile = self.debug(api.GenerateNodeConfFile)
2181 nodes = GetNodes(auth, self.node_ids)
2182 nodes = filter(lambda n: n['nodenetwork_ids'], nodes)
2183 if not nodes: return 0
2185 nodenetworks = GetNodeNetworks(auth, node['nodenetwork_ids'])
2186 nodenetwork = nodenetworks[0]
2187 parts = node['hostname'].split(".", 1)
2191 'NODE_ID': node['node_id'],
2192 'NODE_KEY': node['key'],
2193 'IP_METHOD': nodenetwork['method'],
2194 'IP_ADDRESS': nodenetwork['ip'],
2195 'IP_GATEWAY': nodenetwork['gateway'],
2196 'IP_NETMASK': nodenetwork['netmask'],
2197 'IP_NETADDR': nodenetwork['network'],
2198 'IP_BROADCASTADDR': nodenetwork['broadcast'],
2199 'IP_DNS1': nodenetwork['dns1'],
2200 'IP_DNS2': nodenetwork['dns2'],
2202 'DOMAIN_NAME': domain
2204 node_config_file = GenerateNodeConfFile(auth, node['node_id'])
2205 self.isequal(node_config_file, node_config, 'GenerateNodeConfFile - isequal')
2207 if self.config.verbose:
2208 utils.header("GenerateNodeConfFile")
2210 def GetBootMedium(self):
2214 def GetEventObjects(self):
2215 GetEventObjects = self.debug(api.GetEventObjects)
2216 GetEventObjects(auth)
2218 if self.config.verbose:
2219 utils.header("GetEventObjects")
2221 def GetEvents(self):
2222 GetEvents = self.debug(api.GetEvents)
2225 if self.config.verbose:
2226 utils.header("GetEvents")
2228 def GetPeerData(self):
2229 GetPeers = self.debug(api.GetPeers)
2230 GetPeerData = self.debug(api.GetPeerData)
2232 peers = GetPeers(auth)
2233 if peers is None or not peers: return 0
2235 peer_data = GetPeerData(auth)
2237 # Manuall construt peer data
2239 if self.config.verbose:
2240 utils.header("GetPeerData")
2242 def GetPeerName(self):
2243 # GetPeerName should return the same as api.config.PLC_NAME
2244 GetPeerName = self.debug(api.GetPeerName)
2245 peer_name = GetPeerName(auth)
2246 self.islistequal([peer_name], [api.config.PLC_NAME], 'GetPeerName - isequal')
2248 if self.config.verbose:
2249 utils.header("GetPeerName")
2251 def GetPlcRelease(self):
2252 GetPlcRelease = self.debug(api.GetPlcRelease)
2253 plc_release = GetPlcRelease(auth)
2255 if self.config.verbose:
2256 utils.header("GetPlcRelease")
2258 def GetSliceKeys(self):
2259 GetSliceKeys = self.debug(api.GetSliceKeys)
2260 GetSlices = self.debug(api.GetSlices)
2262 slices = GetSlices(auth, self.slice_ids)
2263 if not slices: return 0
2264 slices = filter(lambda s: s['person_ids'], slices)
2265 if not slices: return 0
2268 slice_keys = GetSliceKeys(auth, [slice['slice_id']])
2269 # XX Manually construct slice_keys for this slice and compare
2271 if self.config.verbose:
2272 utils.header("GetSliceKeys(%s)" % [slice['slice_id']])
2274 def GetSliceTicket(self):
2275 GetSliceTicket = self.debug(api.GetSliceTicket)
2277 slice_id = random.sample(self.slice_ids, 1)[0]
2278 slice_ticket = GetSliceTicket(auth, slice_id)
2280 if self.config.verbose:
2281 utils.header("GetSliceTicket(%s)" % slice_id)
2283 def GetSlicesMD5(self):
2284 GetSlicesMD5 = self.debug(api.GetSlicesMD5)
2286 slices_md5 = GetSlicesMD5(auth)
2288 if self.config.verbose:
2289 utils.header("GetSlicesMD5")
2291 def GetSlivers(self):
2292 GetSlivers = self.debug(api.GetSlivers)
2293 GetNodes = self.debug(api.GetNodes)
2294 nodes = GetNodes(auth, self.node_ids)
2295 if nodes is None or not nodes: return 0
2296 nodes = filter(lambda n: n['slice_ids'], nodes)
2297 if not nodes: return 0
2300 slivers = GetSlivers(auth, node['node_id'])
2302 # XX manually create slivers object and compare
2304 if self.config.verbose:
2305 utils.header("GetSlivers(%s)" % node['node_id'])
2307 def GetWhitelist(self):
2308 GetWhitelist = self.debug(api.GetWhitelist)
2309 GetNodes = self.debug(api.GetNodes)
2311 whitelists = GetWhitelist(auth, self.node_ids)
2312 nodes = GetNodes(auth, self.node_ids)
2313 if nodes is None or not nodes: return 0
2314 nodes = filter(lambda n: n['slice_ids_whitelist'], nodes)
2315 self.islistequal(whitelists, nodes, 'GetWhitelist - isequal')
2317 if self.config.verbose:
2318 utils.header("GetWhitelist")
2320 def NotifyPersons(self):
2321 NotifyPersons = self.debug(api.NotifyPersons)
2322 person_id = random.sample(self.person_ids, 1)[0]
2324 NotifyPersons(auth, [person_id], 'QA Test', 'Welcome')
2326 if self.config.verbose:
2327 utils.header('NotifyPersons(%s)' % [person_id])
2329 def NotifySupport(self):
2330 NotifySupport = self.debug(api.NotifySupport)
2331 NotifySupport(auth, 'QA Test', 'Support Request')
2333 if self.config.verbose:
2334 utils.header('NotifSupport')
2336 def RebootNode(self):
2337 RebootNode = self.debug(api.RebootNode)
2338 node_id = random.sample(self.node_ids, 1)[0]
2339 RebootNode(auth, node_id)
2341 if self.config.verbose:
2342 utils.header('RebootNode(%s)' % node_id)
2344 def ResetPassword(self):
2345 ResetPassword = self.debug(api.ResetPassword)
2346 person_id = random.sample(self.person_ids, 1)[0]
2347 ResetPassword(auth, person_id)
2349 if self.config.verbose:
2350 utils.header('ResetPassword(%s)' % person_id)
2352 def SetPersonPrimarySite(self):
2353 SetPersonPrimarySite = self.debug(api.SetPersonPrimarySite)
2354 GetPersons = self.debug(api.GetPersons)
2355 person_id = random.sample(self.person_ids, 1)[0]
2356 persons = GetPersons(auth, person_id)
2357 if not persons: return 0
2359 site_id = random.sample(person['site_ids'], 1)[0]
2360 SetPersonPrimarySite(auth, person_id, site_id)
2362 if self.config.verbose:
2363 utils.header('SetPersonPrimarySite(%s, %s)' % (person_id, site_id))
2365 def VerifyPerson(self):
2366 VerifyPerson = self.debug(api.VerifyPerson)
2367 UpdatePerson = self.debug(api.UpdatePerson)
2368 GetPersons = self.debug(api.GetPersons)
2370 # can only verify new (disabled) accounts
2371 person_id = random.sample(self.person_ids, 1)[0]
2372 persons = GetPersons(auth, [person_id])
2373 if persons is None or not persons: return 0
2375 UpdatePerson(auth, person['person_id'], {'enabled': False})
2376 VerifyPerson(auth, person['person_id'])
2378 if self.config.verbose:
2379 utils.header('VerifyPerson(%s)' % person_id)
2381 if __name__ == '__main__':
2382 args = tuple(sys.argv[1:])
2383 api_unit_test()(*args)