+ # populate runs the same utility without slightly different options
+ # in particular runs with --preserve (dont cleanup) and without --check
+ # also it gets run twice, once with the --foreign option for creating fake foreign entries
+
+ ### install_sfa_rpm
+ def install_sfa(self):
+ "yum install sfa, sfa-plc and sfa-client"
+ if self.options.personality == "linux32":
+ arch = "i386"
+ elif self.options.personality == "linux64":
+ arch = "x86_64"
+ else:
+ raise Exception, "Unsupported personality %r"%self.options.personality
+ return self.run_in_guest("yum -y install sfa sfa-client sfa-plc sfa-sfatables")==0
+
+ ###
+ def configure_sfa(self):
+ "run sfa-config-tty"
+ tmpname='%s.sfa-config-tty'%(self.name())
+ fileconf=open(tmpname,'w')
+ for var in [ 'SFA_REGISTRY_ROOT_AUTH',
+# 'SFA_REGISTRY_LEVEL1_AUTH',
+ 'SFA_REGISTRY_HOST',
+ 'SFA_AGGREGATE_HOST',
+ 'SFA_SM_HOST',
+ 'SFA_PLC_USER',
+ 'SFA_PLC_PASSWORD',
+ 'SFA_PLC_DB_HOST',
+ 'SFA_PLC_DB_USER',
+ 'SFA_PLC_DB_PASSWORD',
+ 'SFA_PLC_URL',
+ ]:
+ fileconf.write ('e %s\n%s\n'%(var,self.plc_spec['sfa'][var]))
+ fileconf.write('w\n')
+ fileconf.write('R\n')
+ fileconf.write('q\n')
+ fileconf.close()
+ utils.system('cat %s'%tmpname)
+ self.run_in_guest_piped('cat %s'%tmpname,'sfa-config-tty')
+ utils.system('rm %s'%tmpname)
+ return True
+
+ def import_sfa(self):
+ "sfa-import-plc"
+ auth=self.plc_spec['sfa']['SFA_REGISTRY_ROOT_AUTH']
+ return self.run_in_guest('sfa-import-plc.py')==0
+# not needed anymore
+# self.run_in_guest('cp /etc/sfa/authorities/%s/%s.pkey /etc/sfa/authorities/server.key'%(auth,auth))
+
+ def start_sfa(self):
+ "service sfa start"
+ return self.run_in_guest('service sfa start')==0
+
+ def setup_sfa(self):
+ sfa_spec=self.plc_spec['sfa']
+ "sfi client configuration"
+ dir_name=".sfi"
+ if os.path.exists(dir_name):
+ utils.system('rm -rf %s'%dir_name)
+ utils.system('mkdir %s'%dir_name)
+ file_name=dir_name + os.sep + 'fake-pi1.pkey'
+ fileconf=open(file_name,'w')
+ fileconf.write (self.plc_spec['keys'][0]['private'])
+ fileconf.close()
+
+ file_name=dir_name + os.sep + 'sfi_config'
+ fileconf=open(file_name,'w')
+ SFI_AUTH="%s.%s"%(sfa_spec['SFA_REGISTRY_ROOT_AUTH'],sfa_spec['login_base'])
+ fileconf.write ("SFI_AUTH='%s'"%SFI_AUTH)
+ fileconf.write('\n')
+ SFI_USER=SFI_AUTH+'.fake-pi1'
+ fileconf.write ("SFI_USER='%s'"%SFI_USER)
+ fileconf.write('\n')
+ SFI_REGISTRY='http://' + sfa_spec['SFA_PLC_DB_HOST'] + ':12345/'
+ fileconf.write ("SFI_REGISTRY='%s'"%SFI_REGISTRY)
+ fileconf.write('\n')
+ SFI_SM='http://' + sfa_spec['SFA_PLC_DB_HOST'] + ':12347/'
+ fileconf.write ("SFI_SM='%s'"%SFI_SM)
+ fileconf.write('\n')
+ fileconf.close()
+
+ file_name=dir_name + os.sep + 'person.xml'
+ fileconf=open(file_name,'w')
+ for record in sfa_spec['sfa_person_xml']:
+ person_record=record
+ fileconf.write(person_record)
+ fileconf.write('\n')
+ fileconf.close()
+
+ file_name=dir_name + os.sep + 'slice.xml'
+ fileconf=open(file_name,'w')
+ for record in sfa_spec['sfa_slice_xml']:
+ slice_record=record
+ #slice_record=sfa_spec['sfa_slice_xml']
+ fileconf.write(slice_record)
+ fileconf.write('\n')
+ fileconf.close()
+
+ file_name=dir_name + os.sep + 'slice.rspec'
+ fileconf=open(file_name,'w')
+ slice_rspec=''
+ for (key, value) in sfa_spec['sfa_slice_rspec'].items():
+ slice_rspec +=value
+ fileconf.write(slice_rspec)
+ fileconf.write('\n')
+ fileconf.close()
+ location = "root/"
+ remote="/vservers/%s/%s"%(self.vservername,location)
+ self.test_ssh.copy_abs(dir_name, remote, recursive=True)
+
+ #utils.system('cat %s'%tmpname)
+ utils.system('rm -rf %s'%dir_name)
+ return True
+
+ def add_sfa(self):
+ "run sfi.py add (on Registry) and sfi.py create (on SM) to form new objects"
+ test_plc=self
+ test_user_sfa=TestUserSfa(test_plc,self.plc_spec['sfa'])
+ success=test_user_sfa.add_user()
+
+ for slice_spec in self.plc_spec['sfa']['slices_sfa']:
+ site_spec = self.locate_site (slice_spec['sitename'])
+ test_site = TestSite(self,site_spec)
+ test_slice_sfa=TestSliceSfa(test_plc,test_site,slice_spec)
+ success1=test_slice_sfa.add_slice()
+ success2=test_slice_sfa.create_slice()
+ return success and success1 and success2
+
+ def update_sfa(self):
+ "run sfi.py update (on Registry) and sfi.py create (on SM) on existing objects"
+ test_plc=self
+ test_user_sfa=TestUserSfa(test_plc,self.plc_spec['sfa'])
+ success1=test_user_sfa.update_user()
+
+ for slice_spec in self.plc_spec['sfa']['slices_sfa']:
+ site_spec = self.locate_site (slice_spec['sitename'])
+ test_site = TestSite(self,site_spec)
+ test_slice_sfa=TestSliceSfa(test_plc,test_site,slice_spec)
+ success2=test_slice_sfa.update_slice()
+ return success1 and success2
+
+ def view_sfa(self):
+ "run sfi.py list and sfi.py show (both on Registry) and sfi.py slices and sfi.py resources (both on SM)"
+ auth=self.plc_spec['sfa']['SFA_REGISTRY_ROOT_AUTH']
+ return \
+ self.run_in_guest("sfi.py -d /root/.sfi/ list %s.main"%auth)==0 and \
+ self.run_in_guest("sfi.py -d /root/.sfi/ show %s.main"%auth)==0 and \
+ self.run_in_guest("sfi.py -d /root/.sfi/ slices")==0 and \
+ self.run_in_guest("sfi.py -d /root/.sfi/ resources -o resources")==0
+
+ @slice_mapper_options_sfa
+ def check_slice_sfa(self):
+ "tries to ssh-enter the SFA slice"
+ pass
+
+ def delete_sfa(self):
+ "run sfi.py delete (on SM), sfi.py remove (on Registry)"
+ test_plc=self
+ test_user_sfa=TestUserSfa(test_plc,self.plc_spec['sfa'])
+ success1=test_user_sfa.delete_user()
+ for slice_spec in self.plc_spec['sfa']['slices_sfa']:
+ site_spec = self.locate_site (slice_spec['sitename'])
+ test_site = TestSite(self,site_spec)
+ test_slice_sfa=TestSliceSfa(test_plc,test_site,slice_spec)
+ success2=test_slice_sfa.delete_slice()
+
+ return success1 and success2
+
+ def stop_sfa(self):
+ "service sfa stop"
+ return self.run_in_guest('service sfa stop')==0
+
+ def populate (self):
+ "creates random entries in the PLCAPI"
+ # install the stress-test in the plc image
+ location = "/usr/share/plc_api/plcsh_stress_test.py"
+ remote="/vservers/%s/%s"%(self.vservername,location)
+ self.test_ssh.copy_abs("plcsh_stress_test.py",remote)
+ command = location
+ command += " -- --preserve --short-names"
+ local = (self.run_in_guest(command) == 0);
+ # second run with --foreign
+ command += ' --foreign'
+ remote = (self.run_in_guest(command) == 0);
+ return ( local and remote)
+