#!/usr/bin/env python ### ############################## ### ### preparation / requirements ### ### two separate instances of myplc ### for now they are located on the same box on lurch ### ### expectations : ### your myplcs should more or less come out of the box, ### I prefer not to alter the default PLC_ROOT_USER value, ### instead we create a PI account on the site_id=1 ### ############################## ### xxx todo # check sites # check persons # support reloading without wiping everything off # dunno how to do (defvar plc) import getopt import sys import time ## we use indexes 1 and 2 try: dir(plc) except: plc=[None,None,None] ## the server objects try: dir(s) except: s=[None,None,None] ## the authentication objects ## our user try: dir(a) except: a=[None,None,None] ## the builtin root user for bootstrapping try: dir(aa) except: aa=[None,None,None] #################### import xmlrpclib import os #################### # predefined stuff # number of 'system' persons # builtin maint, local root, 2 persons for the peering system_persons = 4 # among that, 1 gets refreshed - other ones have conflicting names system_persons_cross = 1 system_slices_ids = (1,2) def system_slices (): return len(system_slices_ids) def total_slices (): return number_slices+system_slices() # temporary - the myplc I use doesnt know about 'system' yet def system_slivers (): # return len(system_slices_ids) return 0 def total_slivers (): return number_slices+system_slivers() #################### # set initial conditions def define_test (keys,sites,persons,nodes,slices,fast_mode=None): global number_keys, number_sites, number_persons, number_nodes, number_slices, fast_flag number_keys=keys number_sites = sites number_persons=persons number_nodes=nodes number_slices=slices if fast_mode is not None: fast_flag=fast_mode local_index=None def show_test(): print '%d keys, %d sites, %d persons, %d nodes & %d slices'%( number_keys, number_sites,number_persons,number_nodes,number_slices), print 'fast_flag',fast_flag if local_index is not None: print 'Running locally on index %d'%local_index def mini(): define_test(1,1,1,1,1,True) def normal(): define_test (keys=2,sites=4,persons=4,nodes=5,slices=4,fast_mode=False) # use only 1 key in this case big_factor=4 def big(): global number_keys, number_sites, number_persons, number_nodes, number_slices normal() (number_sites,number_persons,number_nodes,number_slices) = [ big_factor * x for x in (number_sites,number_persons,number_nodes,number_slices)] number_keys=1 huge_factor=50 def huge(): global number_keys, number_sites, number_persons, number_nodes, number_slices normal() (number_sites,number_persons,number_nodes,number_slices) = [ huge_factor * x for x in (number_sites,number_persons,number_nodes,number_slices)] number_keys=1 # use fast by default in interactive mode mini() #normal() #################### # argh, for login_name that doesn't accept digits plain_numbers=['zero','one','two','three','four','five','six','seven','eight','nine','ten', 'eleven','twelve','thirteen','fourteen','fifteen','sixteen','seventeen','eighteen','nineteen','twenty'] plain_digits=['a','b','c','d','e','f','g','h','i','j'] #################### plc1={ 'plcname':'plc1 in federation', 'hostname':'lurch.cs.princeton.edu', 'url-format':'https://%s:443/PLCAPI/', 'builtin-admin-id':'root@plc1.org', 'builtin-admin-password':'root', 'peer-admin-name':'peer1@planet-lab.org', 'peer-admin-password':'peer', 'node-format':'n1%02d.plc1.org', 'plainname' : 'one', 'site-format':'one%s', 'person-format' : 'user1-%d@plc1.org', 'key-format':'ssh-rsa 11key4plc11 user%d-key%d', 'person-password' : 'password1', } plc2={ 'plcname':'plc2 in federation', 'hostname':'planetlab-devbox.inria.fr', 'url-format':'https://%s:443/PLCAPI/', 'builtin-admin-id':'root@plc2.org', 'builtin-admin-password':'root', 'peer-admin-name':'peer2@planet-lab.org', 'peer-admin-password':'peer', 'node-format':'n2%02d.plc2.org', 'plainname' : 'two', 'site-format':'two%s', 'person-format' : 'user2-%d@plc2.org', 'key-format':'ssh-rsa 22key4plc22 user%d-key%d', 'person-password' : 'password2', } #################### def peer_index(i): return 3-i def plc_name (i): return plc[i]['plcname'] def site_name (i,n): x=site_login_base(i,n) return 'Site fullname '+x def site_login_base (i,n): # for huge if number_sites=expected_nodes if len(slice_node_ids) != expected_nodes: print 'TEMPORARY' # expected : nodes on local slice def check_local_slice_nodes (expected, args=[1,2]): check_slice_nodes(expected,True,args) # expected : nodes on foreign slice def check_foreign_slice_nodes (expected, args=[1,2]): check_slice_nodes(expected,False,args) def check_conf_files (args=[1,2]): for nn in myrange(number_nodes): check_conf_files_n (nn,args) def check_conf_files_n (nn,args=[1,2]): for i in args: nodename=node_name(i,nn) ndict= s[i].GetSlivers(a[i],[nodename])[0] assert ndict['hostname'] == nodename conf_files = ndict['conf_files'] print '%02d: %d conf_files in GetSlivers for node %s'%(i,len(conf_files),nodename) for conf_file in conf_files: print 'source=',conf_file['source'],'|', print 'dest=',conf_file['dest'],'|', print 'enabled=',conf_file['enabled'],'|', print '' import pprint pp = pprint.PrettyPrinter(indent=3) def check_slivers (esn,args=[1,2]): for nn in myrange(number_nodes): check_slivers_n (nn,esn,args) # too verbose to check all nodes, let's check only the first one def check_slivers_1 (esn,args=[1,2]): check_slivers_n (1,esn,args) def check_slivers_n (nn,esn,args=[1,2]): for i in args: nodename=node_name(i,nn) ndict= s[i].GetSlivers(a[i],[nodename])[0] assert ndict['hostname'] == nodename slivers = ndict['slivers'] print '%02d: %d slivers (exp. %d) in GetSlivers for node %s'\ %(i,len(slivers),esn,nodename) for sliver in slivers: print '>>slivername = ',sliver['name'] pretty_printer.pprint(sliver) assert len(slivers) == esn #################### def test00_admin_person (args=[1,2]): global plc for i in args: email = plc[i]['peer-admin-name'] try: p=s[i].GetPersons(a[i],[email])[0] plc[i]['peer-admin-id']=p['person_id'] except: person_id=s[i].AddPerson(aa[i],{'first_name':'Local', 'last_name':'PeerPoint', 'role_ids':[10], 'email':email, 'password':plc[i]['peer-admin-password']}) print '%02d:== created peer admin account %d, %s - %s'%(i, person_id,plc[i]['peer-admin-name'], plc[i]['peer-admin-password']) plc[i]['peer-admin-id']=person_id def test00_admin_enable (args=[1,2]): for i in args: s[i].AdmSetPersonEnabled(aa[i],plc[i]['peer-admin-id'],True) s[i].AddRoleToPerson(aa[i],'admin',plc[i]['peer-admin-id']) print '%02d:== enabled+admin on account %d:%s'%(i,plc[i]['peer-admin-id'],plc[i]['peer-admin-name']) def test00_peer_person (args=[1,2]): global plc for i in args: peer=peer_index(i) email=plc[peer]['peer-admin-name'] try: p=s[i].GetPersons(a[i],[email])[0] plc[i]['peer_person_id']=p['person_id'] except: person_id = s[i].AddPerson (a[i], {'first_name':'Peering(plain passwd)', 'last_name':plc_name(peer), 'role_ids':[3000], 'email':email,'password':plc[peer]['peer-admin-password']}) print '%02d:Created person %d as the peer person'%(i,person_id) plc[i]['peer_person_id']=person_id #################### def test00_peer (args=[1,2]): global plc for i in args: peer=peer_index(i) peername = plc_name(peer) try: p=s[i].GetPeers (a[i], [peername])[0] plc[i]['peer_id']=p['peer_id'] except: peer_id=s[i].AddPeer (a[i], {'peername':peername,'peer_url':plc[peer]['url'],'person_id':plc[i]['peer_person_id']}) # NOTE : need to manually reset the encrypted password through SQL at this point print '%02d:Created peer %d'%(i,peer_id) plc[i]['peer_id']=peer_id print "PLEASE manually set password for person_id=%d in DB%d"%(plc[i]['peer_person_id'],i) def test00_peer_passwd (args=[1,2]): for i in args: # using an ad-hoc local command for now - never could get quotes to reach sql.... print "Attempting to set passwd for person_id=%d in DB%d"%(plc[i]['peer_person_id'],i), retcod=os.system("ssh root@%s new_plc_api/person-password.sh %d"%(plc[i]['hostname'],plc[i]['peer_person_id'])) print '-> system returns',retcod # this one gets cached def get_peer_id (i): try: return plc[i]['peer_id'] except: peername = plc_name (peer_index(i)) peer_id = s[i].GetPeers(a[i],[peername])[0]['peer_id'] plc[i]['peer_id'] = peer_id return peer_id ############################## def test00_refresh (message,args=[1,2]): print '=== refresh',message timer_show() for i in args: print '%02d:== Refreshing peer'%(i), retcod=s[i].RefreshPeer(a[i],get_peer_id(i)) print 'got ',retcod timer_show() #################### def test01_site (args=[1,2]): for ns in myrange(number_sites): test01_site_n (ns,True,args) def test01_del_site (args=[1,2]): for ns in myrange(number_sites): test01_site_n (ns,False,args) def test01_site_n (ns,add_if_true,args=[1,2]): for i in args: login_base = site_login_base (i,ns) try: site_id = s[i].GetSites(a[i],[login_base])[0]['site_id'] if not add_if_true: s[i].DeleteSite(a[i],site_id) print "%02d:== deleted site_id %d"%(i,site_id) except: if add_if_true: sitename=site_name(i,ns) abbrev_name="abbr"+str(i) max_slices = number_slices site_id=s[i].AddSite (a[i], {'name':plc_name(i), 'abbreviated_name': abbrev_name, 'login_base': login_base, 'is_public': True, 'url': 'http://%s.com/'%abbrev_name, 'max_slices':max_slices}) ### max_slices does not seem taken into account at that stage s[i].UpdateSite(a[i],site_id,{'max_slices':max_slices}) print '%02d:== Created site %d with max_slices=%d'%(i,site_id,max_slices) #################### def test02_person (args=[1,2]): for np in myrange(number_persons): test02_person_n (np,True,args) def test02_del_person (args=[1,2]): for np in myrange(number_persons): test02_person_n (np,False,args) def test02_person_n (np,add_if_true,args=[1,2]): test02_person_n_ks (np, myrange(number_keys),add_if_true,args) def test02_person_n_ks (np,nks,add_if_true,args=[1,2]): for i in args: email = person_name(i,np) try: person_id=s[i].GetPersons(a[i],[email])[0]['person_id'] if not add_if_true: s[i].DeletePerson(a[i],person_id) print "%02d:== deleted person_id %d"%(i,person_id) except: if add_if_true: password = plc[i]['person-password'] person_id=s[i].AddPerson(a[i],{'first_name':'Your average', 'last_name':'User%d'%np, 'role_ids':[30], 'email':email, 'password': password }) print '%02d:== created user account %d, %s - %s'%(i, person_id,email,password) for nk in nks: key=key_name(i,np,nk) s[i].AddPersonKey(aa[i],email,{'key_type':'ssh', 'key':key}) print '%02d:== added key %s to person %s'%(i,key,email) #################### # retrieves node_id from hostname - checks for local nodes only def get_local_node_id(i,nodename): return s[i].GetNodes(a[i],{'hostname':nodename,'peer_id':None})[0]['node_id'] # clean all local nodes - foreign nodes are not supposed to be cleaned up manually def clean_all_nodes (args=[1,2]): for i in args: print '%02d:== Cleaning all nodes'%i loc_nodes = s[i].GetNodes(a[i],{'peer_id':None}) for node in loc_nodes: print '%02d:==== Cleaning node %d'%(i,node['node_id']) s[i].DeleteNode(a[i],node['node_id']) def test03_node (args=[1,2]): for nn in myrange(number_nodes): test03_node_n (nn,args) def test03_node_n (nn,args=[1,2]): for i in args: nodename = node_name(i,nn) try: get_local_node_id(i,nodename) except: login_base=site_login_base(i,map_on_site(nn)) n=s[i].AddNode(a[i],login_base,{'hostname': nodename}) print '%02d:== Added node %d %s'%(i,n,node_name(i,i)) def test02_delnode (args=[1,2]): for nn in myrange(number_nodes): test02_delnode_n (nn,args) def test02_delnode_n (nn,args=[1,2]): for i in args: nodename = node_name(i,nn) node_id = get_local_node_id (i,nodename) retcod=s[i].DeleteNode(a[i],nodename) print '%02d:== Deleted node %d, returns %s'%(i,node_id,retcod) #################### def clean_all_slices (args=[1,2]): for i in args: print '%02d:== Cleaning all slices'%i for slice in s[i].GetSlices(a[i],{'peer_id':None}): slice_id = slice['slice_id'] if slice_id not in system_slices_ids: print '%02d:==== Cleaning slice %d'%(i,slice_id) s[i].DeleteSlice(a[i],slice_id) def test04_slice (args=[1,2]): for n in myrange(number_slices): test04_slice_n (n,args) def test04_slice_n (ns,args=[1,2]): for i in args: peer=peer_index(i) plcname=plc_name(i) slicename=slice_name(i,ns) max_nodes=number_nodes try: s[i].GetSlices(a[i],[slicename])[0] except: slice_id=s[i].AddSlice (a[i],{'name':slicename, 'description':'slice %s on %s'%(slicename,plcname), 'url':'http://planet-lab.org/%s'%slicename, 'max_nodes':max_nodes, 'instanciation':'plc-instantiated', }) print '%02d:== created slice %d - max nodes=%d'%(i,slice_id,max_nodes) for np in myrange(number_persons): email = person_name (i,np) retcod = s[i].AddPersonToSlice (a[i], email, slicename) print '%02d:== Attached person %s to slice %s'%(i,email,slicename) def test04_node_slice (is_local, add_if_true, args=[1,2]): for ns in myrange(number_slices): test04_node_slice_ns (ns,is_local, add_if_true, args) def test04_node_slice_ns (ns,is_local, add_if_true, args=[1,2]): test04_node_slice_nl_n (myrange(number_nodes),ns,is_local, add_if_true, args) def test04_node_slice_nl_n (nnl,ns,is_local, add_if_true, args=[1,2]): for i in args: peer=peer_index(i) sname = slice_name (i,ns) if is_local: hostnames=[node_name(i,nn) for nn in nnl] nodetype='local' else: hostnames=[node_name(peer,nn) for nn in nnl] nodetype='foreign' if add_if_true: s[i].AddSliceToNodes (a[i], sname,hostnames) message="added" else: s[i].DeleteSliceFromNodes (a[i], sname,hostnames) message="deleted" print '%02d:== %s in slice %s %s '%(i,message,sname,nodetype), print hostnames def test04_slice_add_lnode (args=[1,2]): test04_node_slice (True,True,args) def test04_slice_add_fnode (args=[1,2]): test04_node_slice (False,True,args) def test04_slice_del_lnode (args=[1,2]): test04_node_slice (True,False,args) def test04_slice_del_fnode (args=[1,2]): test04_node_slice (False,False,args) #################### def test05_sat (args=[1,2]): for i in args: name = sat_name(i) try: sat_id=s[i].GetSliceAttributeTypes (a[i],[name])[0] except: description="custom sat on plc%d"%i min_role_id=10 sat_id=s[i].AddSliceAttributeType (a[i], { 'name':name, 'description': description, 'min_role_id' : min_role_id}) print '%02d:== created SliceAttributeType = %d'%(i,sat_id) # for test, we create 4 slice_attributes # on slice1 - sat=custom_made (see above) - all nodes # on slice1 - sat=custom_made (see above) - node=n1 # on slice1 - sat='net_max' - all nodes # on slice1 - sat='net_max' - node=n1 def test05_sa_atom (slice_name,sat_name,value,node,i): sa_id=s[i].GetSliceAttributes(a[i],{'name':sat_name, 'value':value}) if not sa_id: if node: sa_id=s[i].AddSliceAttribute(a[i], slice_name, sat_name, value, node) else: print 'slice_name',slice_name,'sat_name',sat_name sa_id=s[i].AddSliceAttribute(a[i], slice_name, sat_name, value) print '%02d:== created SliceAttribute = %d'%(i,sa_id), print 'On slice',slice_name,'and node',node def test05_sa (args=[1,2]): for i in args: test05_sa_atom (slice_name(i,1),sat_name(i),'custom sat/all nodes',None,i) test05_sa_atom (slice_name(i,1),sat_name(i),'custom sat/node1',node_name(i,1),i) test05_sa_atom (slice_name(i,1),'net_max','predefined sat/all nodes',None,i) test05_sa_atom (slice_name(i,1),'net_max','predefined sat/node1',node_name(i,1),i) ############################## # readable dumps ############################## def p_site (s): print s['site_id'],s['peer_id'],s['login_base'],s['name'],s['node_ids'] def p_key (k): print k['key_id'],k['peer_id'],k['key'] def p_person (p): print p['person_id'],p['peer_id'],p['email'],'keys:',p['key_ids'],'sites:',p['site_ids'] def p_node(n): print n['node_id'],n['peer_id'],n['hostname'],'sls=',n['slice_ids'],'site=',n['site_id'] def p_slice(s): print s['slice_id'],s['peer_id'],s['name'],'nodes=',s['node_ids'],'persons=',s['person_ids'] print '---','sas=',s['slice_attribute_ids'],s['name'],'crp=',s['creator_person_id'],'e=',s['expires'] def p_sat(sat): print sat['attribute_type_id'],sat['peer_id'], sat['name'], sat['min_role_id'], sat['description'] def p_sa (sa): print sa['slice_attribute_id'],sa['peer_id'],sa['name'],'AT_id:',sa['attribute_type_id'] print '---','v=',sa['value'],'sl=',sa['slice_id'],'n=',sa['node_id'] import pprint pretty_printer=pprint.PrettyPrinter(5) def p_sliver (margin,x): print margin,'SLIVERS for : hostname',x['hostname'] print margin,'%d config files'%len(x['conf_files']) for sv in x['slivers']: p_sliver_slice(margin,sv,x['hostname']) def p_sliver_slice(margin,sliver,hostname): print margin,'SLIVER on hostname %s, s='%hostname,sliver['name'] print margin,'KEYS', pretty_printer.pprint(sliver['keys']) print margin,'ATTRIBUTES', pretty_printer.pprint(sliver['attributes']) def dump (args=[1,2]): for i in args: print '%02d:============================== DUMPING'%i print '%02d: SITES'%i [p_site(x) for x in s[i].GetSites(a[i])] print '%02d: KEYS'%i [p_key(x) for x in s[i].GetKeys(a[i])] print '%02d: PERSONS'%i [p_person(x) for x in s[i].GetPersons(a[i])] print '%02d: NODES'%i [p_node(x) for x in s[i].GetNodes(a[i])] print '%02d: SLICES'%i [p_slice(x) for x in s[i].GetSlices(a[i])] print '%02d: Slice Attribute Types'%i [p_sat(x) for x in s[i].GetSliceAttributeTypes(a[i])] print '%02d: Slice Attributes'%i [p_sa(x) for x in s[i].GetSliceAttributes(a[i])] print '%02d: SLIVERS'%i [p_sliver('%02d:'%i,x) for x in s[i].GetSlivers(a[i])] print '%02d:============================== END DUMP'%i ## for usage under the api def pt (): for x in GetSites(): p_site(x) def pk (): for x in GetKeys(): print (x['key_id'],x['peer_id'],x['key']) def pp (): for x in GetPersons(): p_person(x) def pn (): for x in GetNodes(): p_node(x) def ps (): for x in GetSlices(): p_slice(x) def psat(): for x in GetSliceAttributeTypes(): p_sat(x) def psa(): for x in GetSliceAttributes(): p_sa(x) def pv (): for s in GetSlivers(): p_sliver('',s) def all(): print 'SITES' pt() print 'KEYS' pk() print 'PERSONS' pp() print 'NODES' pn() print 'SLICES' ps() print 'SLICE ATTR TYPES' psat() print 'SLICE ATTRS' psa() print 'SLIVERS' pv() #################### def test_all_init (): message ("INIT") test00_init () test00_print () test00_admin_person () test00_admin_enable () test00_peer_person () test00_peer () test00_peer_passwd () def test_all_sites (): test01_site () test00_refresh ('after site creation') def test_all_persons (): test02_del_person() test00_refresh ('before persons&keys creation') check_keys(0,0) check_persons(system_persons,system_persons_cross) message ("Creating persons&keys") test02_person () if not fast_flag: message ("1 extra del/add cycle for unique indexes") test02_del_person([2]) test02_person([2]) check_keys(number_persons*number_keys,0) check_persons(system_persons+number_persons,system_persons_cross) test00_refresh ('after persons&keys creation') check_keys(number_persons*number_keys,number_persons*number_keys) check_persons(system_persons+number_persons,system_persons_cross+number_persons) def test_all_nodes (): message ("RESETTING NODES") clean_all_nodes () test00_refresh ('cleaned nodes') check_nodes(0,0) # create one node on each site message ("CREATING NODES") test03_node () check_nodes(number_nodes,0) test00_refresh ('after node creation') check_nodes(number_nodes,number_nodes) test02_delnode([2]) if not fast_flag: message ("2 extra del/add cycles on plc2 for different indexes") test03_node ([2]) test02_delnode([2]) test03_node ([2]) test02_delnode([2]) check_nodes(0,number_nodes,[2]) test00_refresh('after deletion on plc2') check_nodes(number_nodes,0,[1]) check_nodes(0,number_nodes,[2]) message ("ADD on plc2 for different indexes") test03_node ([2]) check_nodes (number_nodes,0,[1]) check_nodes (number_nodes,number_nodes,[2]) test00_refresh('after re-creation on plc2') check_nodes (number_nodes,number_nodes,) def test_all_addslices (): # reset message ("RESETTING SLICES TEST") clean_all_nodes () test03_node () clean_all_slices () test00_refresh ("After slices init") # create slices on plc1 message ("CREATING SLICES on plc1") test04_slice ([1]) # each site has 3 local slices and 0 foreign slice check_slices (total_slices(),0,[1]) check_slices (system_slices(),0,[2]) test00_refresh ("after slice created on plc1") check_slices (total_slices(),0,[1]) check_slices (system_slices(),number_slices,[2]) # no slice has any node yet check_local_slice_nodes(0,[1]) check_foreign_slice_nodes(0,[2]) # insert local nodes in local slice on plc1 message ("ADDING LOCAL NODES IN SLICES") test04_slice_add_lnode ([1]) # of course the change is only local check_local_slice_nodes (number_nodes,[1]) check_foreign_slice_nodes(0,[2]) # refreshing test00_refresh ("After local nodes were added on plc1") check_local_slice_nodes (number_nodes,[1]) check_foreign_slice_nodes (number_nodes,[2]) # now we add foreign nodes into local slice message ("ADDING FOREIGN NODES IN SLICES") test04_slice_add_fnode ([1]) check_local_slice_nodes (2*number_nodes,[1]) check_foreign_slice_nodes (number_nodes,[2]) # refreshing test00_refresh ("After foreign nodes were added in plc1") # remember that foreign slices only know about LOCAL nodes # so this does not do anything check_local_slice_nodes (2*number_nodes,[1]) check_foreign_slice_nodes (2*number_nodes,[2]) check_slivers_1(total_slivers()) def test_all_delslices (): message ("DELETING FOREIGN NODES FROM SLICES") test04_slice_del_fnode([1]) check_local_slice_nodes (number_nodes,[1]) check_foreign_slice_nodes (2*number_nodes,[2]) # mmh? check_slivers_1(total_slivers(),[1]) test00_refresh ("After foreign nodes were removed on plc1") check_local_slice_nodes (number_nodes,[1]) check_foreign_slice_nodes (number_nodes,[2]) message ("DELETING LOCAL NODES FROM SLICES") test04_slice_del_lnode([1]) check_local_slice_nodes (0,[1]) check_foreign_slice_nodes (number_nodes,[2]) test00_refresh ("After local nodes were removed on plc1") check_local_slice_nodes (0,[1]) check_foreign_slice_nodes (0,[2]) message ("CHECKING SLICES CLEAN UP") clean_all_slices([1]) check_slices (system_slices(),0,[1]) check_slices (system_slices(),number_slices,[2]) test00_refresh ("After slices clenaup") check_slices(system_slices(),0) def test_all_slices (): test_all_addslices () test_all_delslices () def test_all_sats (): test05_sat () test00_refresh("after SliceAttributeType creation") def test_all (): test_all_init () timer_show() test_all_sites () timer_show() test_all_persons () timer_show() test_all_nodes () timer_show() test_all_slices () timer_show() test_all_sats () timer_show() dump() timer_show() message("END") ### ad hoc test sequences def populate (): timer_start() test_all_init() timer_show() test01_site() timer_show() test02_person() timer_show() test03_node() timer_show() test04_slice([1]) timer_show() test04_slice_add_lnode([1]) timer_show() test05_sat() timer_show() test05_sa([1]) timer_show() test00_refresh ("populate: refreshing peer 1",[1]) timer_show() test04_slice_add_fnode([1]) timer_show() test00_refresh("populate: refresh all") dump() timer_show() # temporary - scratch as needed def test_now (): test_all_init() test_all_sites () # clean_all_nodes() # clean_all_slices() # populate() ##### def usage (): print "Usage: %s [-n] [-f]"%sys.argv[0] print " -n runs test_now instead of test_all" print " -p runs populate instead of test_all" print " -m run in mini mode (1 instance of each class)" print " -b performs big run (%d times as large as normal)"%big_factor print " -H performs huge run (%d times as large as normal)"%huge_factor print " -l n : tester runs locally for peer , rather than through xmlrpc" sys.exit(1) def main (): try: (o,a) = getopt.getopt(sys.argv[1:], "mnpbHl:") except: usage() func = test_all for (opt,val) in o: if opt=='-n': print 'Running test_now' func = test_now elif opt=='-p': print 'Running populate' func = populate elif opt=='-m': mini() elif opt=='-b': big() elif opt=='-H': huge() elif opt=='-l': if val in (1,2): local_index=val print '-l option not implemented yet' # need to figure a way to use Shell.py-like calling paradigm sys.exit(1) else: usage() else: usage() if a: usage() show_test() func() timer_show() if __name__ == '__main__': normal() main()