def ssm(method, opt, wait=1): utils.framelog('%s .. %s' %(method, opt)) for pn, po in tb.crs.port_dict.items(): if pn.startswith('nc_'): getattr(po, method)(opt=opt) time.sleep(wait) tb.crs.cliexe('show port | match 1/2/c1/')
def cmuIfFailover(): results = list() ixia = _tbd.ixplte cmu_mate = _tbd.cmu_mate cmu_master = _tbd.cmu_master framelog('STEP 1: start ixia traffic') ixia.start_traffic() ixia.set_stats() framelog('STEP 2: CMU interface-1 failover') cmu_master.intf1.shutdown() framelog('STEP 3: stop traffic and check loss% (failover)') ixia.stop_traffic(btime=120) results += ixia.check_losspct() framelog('STEP 4: Start traffic and CMU interface-1 failback') ixia.start_traffic() cmu_master.intf1.noshutdown() framelog('STEP 5: stop traffic and check loss% (failback)') ixia.stop_traffic(btime=120) results += ixia.check_losspct() return [ppf(results)]
def cmuSvrFailover(): results = list() boot = True ixia = _tbd.ixplte cmu_mate = _tbd.cmu_mate cmu_master = _tbd.cmu_master step = 1 for cmu in [cmu_master, cmu_mate]: framelog('STEP %s: start ixia traffic' % step) ixia.start_traffic() ixia.set_stats() framelog('STEP %d: %s failover' % (step, cmu.name)) if not cmu_master.reboot(): boot = False results.append(False) framelog('STEP %d: stop traffic and check loss%') ixia.stop_traffic(btime=120) results += ixia.check_losspct() if boot: framelog('STEP %d: Wait till %s comes back' % (step, cmu.name)) utils.poll(cmu_master.connect, timeout=300, intv=20) return [ppf(results)]
def netconf_xml(): testcheck = True framelog('STEP 1: Port shut/noshut via netconf-xml', '*') for node in tb: framelog('Node %s port shut/noshut' % node.sysname) for port in node: port.shutdown(opt='netconf') testcheck and port.check_admin_state(state='down') port.noshutdown(opt='netconf') testcheck and port.check_admin_state() if testcheck: return ['PASS'] return ['FAIL']
def kpi_demo_1(tc_name): result = ['PASS'] # result is a list kpidict = OrderedDict() kpidict['KPIs'] = list() # init as empty list # kpi_name should be 'tc_name.kpi_name'. in this case # tc_name='kpi_demo_1' and kpi_name are 'tx' & 'rx' kpi1 = '.'.join([tc_name, 'tx']) # kpi1 = 'kpi_demo_1.tx' kpi2 = '.'.join([tc_name, 'rx']) # kpi2 = 'kpi_demo_2.rx' kpidict['KPIs'].append(kpi1) kpidict['KPIs'].append(kpi2) # now we have two kpi_names in kpidict # kpidict['KPIs']=['kpi_demo_1.tx', 'kpi_demo_1.rx'] # each kpi_name may have multiple actual ixia data streams # here we set up examle stream names and random data lstrms = ['streamA', 'streamB', 'streamC', 'streamD', 'streamE'] lrands = [random.random() for i in range(len(lstrms))] for k, v in zip(lstrms, lrands): kpidict['.'.join([kpi1, k])] = v kpidict['.'.join([kpi2, k])] = v # now kpidict looks like: # kpidict['KPIs']=['kpi_demo_1.tx', 'kpi_demo_1.rx'] # kpidict['kpi_demo_1.tx.streamA']=0.1765527465253881 # kpidict['kpi_demo_1.rx.streamA']=0.1765527465253881 # kpidict['kpi_demo_1.tx.streamB']=0.7410514463087737 # kpidict['kpi_demo_1.rx.streamB']=0.7410514463087737 # kpidict['kpi_demo_1.tx.streamC']=0.7467162353471369 # kpidict['kpi_demo_1.rx.streamC']=0.7467162353471369 # kpidict['kpi_demo_1.tx.streamD']=0.5611944638798385 # kpidict['kpi_demo_1.rx.streamD']=0.5611944638798385 # kpidict['kpi_demo_1.tx.streamE']=0.1742471165521735 # kpidict['kpi_demo_1.rx.streamE']=0.1742471165521735 # log kpidict utils.framelog('kpidict in this run') for k in kpidict: mylog.info('kpidict[%s]=%s' % (k, kpidict[k])) result.append(kpidict) # result = ['PASS', kpidict] return result
def netconf_cli(): testcheck = True framelog('STEP 1: Port shut/noshut via netconf-cli', '*') for node in tb: framelog('Node %s port shut/noshut' % node.sysname) for port in node: cmd = 'config port %s shutdown' % port.port port.node.send_command(cmd, protocol='netconf') testcheck and port.check_admin_state(state='down') cmd = 'config port %s no shutdown' % port.port port.node.send_command(cmd, protocol='netconf') testcheck and port.check_admin_state() if testcheck: return ['PASS'] return ['FAIL']
def ssh_modeldriven(): testcheck = True framelog('STEP 1: Port shut/noshut via ssh/model-driven', '*') for node in tb: framelog('Node %s port shut/noshut' % node.sysname) for port in node: cmd = 'config port %s admin-state disable' % port.port port.node.send_command(cmd, style='md') testcheck and port.check_admin_state(state='down', style='md') cmd = 'config port %s admin-state enable' % port.port port.node.send_command(cmd, style='md') testcheck and port.check_admin_state(style='md') if testcheck: return ['PASS'] return ['FAIL']
def vsrfailover(tc=1): results = list() ixia = _tbd.ixplte vsri1 = [_tbd.vSRi01] vsri1n2 = [_tbd.vSRi01, _tbd.vSRi02] vsra1 = [_tbd.vSRa01] vsra1n2 = [_tbd.vSRa01, _tbd.vSRa02] core1 = [_tbd.SRa8_01] core1n2 = [_tbd.SRa8_01, _tbd.SRa8_01] rtrs = vsri1 losspct = 2 # for various test cases if tc == 2: rtrs = vsri1n2 losspct = 5 elif tc == 4: rtrs = core1 elif tc == 5: rtrs = core1n2 framelog('STEP 0: shutdown core1&2 ports') for sr in core1n2: sr.port1.shutdown() sr.port2.shutdown() framelog('STEP 1: start ixia traffic') ixia.start_traffic(atime=30) ixia.set_stats() framelog('STEP 2: router reboot (failover)') for rtr in rtrs: mylog.info('%s reboot' % rtr.name) rtr.reboot() framelog('STEP 3: stop traffic and check loss%') ixia.stop_traffic(btime=120) results += ixia.check_losspct(losspct) framelog('STEP 4: re-connect routers') for rtr in rtrs: mylog.info('%s re-connect' % rtr.name) utils.poll(rtr.connect, timeout=60, intv=10) return [ppf(results)]
def snmp_and_ssh_classic(): testcheck = True step = 1 for protocol in ['snmp', 'ssh']: framelog('STEP %d: Port shut/noshut via %s' % (step, protocol), '*') step += 1 for node in tb: framelog('Node %s port shut/noshut' % node.sysname) for port in node: port.shutdown(opt=protocol) testcheck and port.check_admin_state(state='down') port.noshutdown(opt=protocol) testcheck and port.check_admin_state(state='up') # return result list # 1st element must present. -- PASS|FAIL # 2nd element is optional. -- KPI dictionary for regression kpi diagram if testcheck: return ['PASS'] return ['FAIL']
def main(testsuite_name='exampleA', testcase_name='snmp_and_ssh_classic', testbed_file='example.yaml'): global tb if not tb: tb = nodelib.Testbed(testbed_file) # initialize testcheck True testcheck = True # tc: snmp_and_ssh_classic if testcase_name == 'snmp_and_ssh_classic': step = 1 for protocol in ['snmp', 'ssh']: framelog('STEP %d: Port shut/noshut via %s' % (step, protocol), '*') step += 1 for node in tb: framelog('Node %s port shut/noshut' % node.sysname) for port in node: port.shutdown(opt=protocol) testcheck and port.check_admin_state(state='down') port.noshutdown(opt=protocol) testcheck and port.check_admin_state(state='up') # tc: ssh_modeldriven elif testcase_name == 'ssh_modeldriven': framelog('STEP 1: Port shut/noshut via ssh/model-driven', '*') for node in tb: framelog('Node %s port shut/noshut' % node.sysname) for port in node: cmd = 'config port %s admin-state disable' % port.port port.node.send_command(cmd, style='md') testcheck and port.check_admin_state(state='down', style='md') cmd = 'config port %s admin-state enable' % port.port port.node.send_command(cmd, style='md') testcheck and port.check_admin_state(style='md') # tc: netconf_cli elif testcase_name == 'netconf_cli': framelog('STEP 1: Port shut/noshut via netconf-cli', '*') for node in tb: framelog('Node %s port shut/noshut' % node.sysname) for port in node: cmd = 'config port %s shutdown' % port.port port.node.send_command(cmd, protocol='netconf') testcheck and port.check_admin_state(state='down') cmd = 'config port %s no shutdown' % port.port port.node.send_command(cmd, protocol='netconf') testcheck and port.check_admin_state() # tc: netconf_cli elif testcase_name == 'netconf_xml': framelog('STEP 1: Port shut/noshut via netconf-xml', '*') for node in tb: framelog('Node %s port shut/noshut' % node.sysname) for port in node: port.shutdown(opt='netconf') testcheck and port.check_admin_state(state='down') port.noshutdown(opt='netconf') testcheck and port.check_admin_state() else: mylog.error('Wrong testcase_name %s' % testcase_name) return ['FAIL'] if testcheck: return ['PASS'] return ['FAIL']
def sanity1(): results = list() sarhms7475 = utils.find_nodes( _tbd.node_dict, '_SARHm02 - DC01|_SARHm07 - DC01|_SARHm02 - DC02|_SARHm07 - DC02') sarhms7455 = utils.find_nodes(_tbd.node_dict, '_SARHm11 - DC02') sarhms = sarhms7475 + sarhms7455 #sarhms=utils.find_nodes(_tbd.node_dict,'_SARHm') srhm = utils.find_nodes(_tbd.node_dict, '_SARHm06 - DC01') vsrs = utils.find_nodes(_tbd.node_dict, '_vSRi') bgpsum = vsrs[0].cliexe('show router bgp summary') ports = srhm[0].cliexe("show port") ports = vsrs[0].cliexe("show port") vsrs[0].cellif.shutdown() sst = vsrs[0].cellif.getstate() ports = vsrs[0].cliexe("show port") vsrs[0].cellif.noshutdown() sst = vsrs[0].cellif.getstate() ports = vsrs[0].cliexe("show port") vsrs[0].cellif.shutdown(snmp=True) ports = vsrs[0].cliexe("show port") vsrs[0].cellif.noshutdown(snmp=True) ports = vsrs[0].cliexe("show port") log99 = vsrs[0].show_log_99() vsrs[0].clear_log_99() log99 = vsrs[0].show_log_99() srbof = vsrs[0].show_bof() vsrs[0].send_cli_command('/configure router isis area-id 49.0002') vsrs[0].send_cli_command('/configure router isis area-id 49.0003') vsrs[0].send_cli_command('/configure router isis area-id 49.0004') vsrs[0].send_cli_command('admin display-config | match area-id') vsrs[0].send_cli_command('/configure router isis no area-id 49.0002') vsrs[0].send_cli_command('/configure router isis no area-id 49.0003') vsrs[0].send_cli_command('/configure router isis no area-id 49.0004') vsrs[0].send_cli_command('admin display-config | match area-id') vsrs[0].shutdown_log_98() vsrs[0].no_shutdown_log_98() vsrs[0].close() vsrs[0].send_cli_command('admin display-config | match area-id') results.append('PASS') framelog('STEP 2: No shutdown SRHm LTE ports\n' + 'step3: whatever is \n' + ' step4: good stuff\n ' + ' step5: the end') framelog('STEP 2: No shutdown SRHm LTE ports', '*') xx = vsrs[0].cliexe('show port') yy = vsrs[0].cliexe('admin display-config') vsrs[0].connect() vsrs[0].close() vsrs[0].send_cli_command('admin display-config | match area-id') vsrs[0].send_cli_command('show port') return results framelog('STEP 2: No shutdown SRHm LTE ports', '*') for sr in sarhms: sr.cellif.noshutdown() framelog('STEP 3: Verify cellular-interfaces info', '*') ta_verify(nodes=sarhms, save=True) for sr in sarhms7475: if not hasattr(sr, 'lted'): mylog.error('%s failed to get LTE data') results.append(False) continue # verify LTE port status on 7475 SARHms check = True srpt = (sr.name, sr.cellif.port) if sr.lted['stat'] != 'up': mylog.error('%s %s NOT up' % srpt) check = False if sr.lted['band'] != '125': mylog.error('%s %s band NOT 125' % srpt) check = False if sr.lted['pdn'] != 'connected': mylog.error('%s %s PDN NOT connected' % srpt) check = False if sr.lted['network'] != 'registered-home': mylog.error('%s %s network NOT registered-home' % srpt) check = False if check: mylog.info('%s %s in good state' % srpt) results.append(check) for sr in sarhms7455: if not hasattr(sr, 'lted'): mylog.error('%s failed to get LTE data') results.append(False) continue # verify LTE port status on 7455 SARHms check = True srpt = (sr.name, sr.cellif.port) if sr.lted['stat'] != 'up': mylog.error('%s %s NOT up' % srpt) check = False if sr.lted['band'] != '8': mylog.error('%s %s band NOT 8' % srpt) check = False if sr.lted['pdn'] != 'connected': mylog.error('%s %s PDN NOT connected' % srpt) check = False if sr.lted['network'] != 'registered-home': mylog.error('%s %s network NOT registered-home' % srpt) check = False if check: mylog.info('%s %s in good state' % srpt) results.append(check) for sr in vsrs: txt = sr.cliexe('show router bgp summary') if txt == 'ERROR': results.append(False) continue # parse bgp stats and verify up check = True bgpd = utils.parse_show_bgp(txt) if bgpd['operState'] == "Up": mylog.info('%s BGP Up. Good!' % sr.name) else: mylog.error('%s BGP NOT Up' % sr.name) check = False results.append(check) return [ppf(results)]
def mobility_test(): results = list() ta1 = '0032' ta2 = '0001' ta3 = '000a' sarhmG1 = utils.find_nodes(_tbd.node_dict, ta1, attr='area_code') #sarhmG2=utils.find_nodes(_tbd.node_dict,ta2,attr='area_code') #sarhms=utils.find_nodes(_tbd.node_dict,'_SARHm') #for dev in sarhmG1: dev.clear_console() #for dev in sarhmG1: dev.connect() rfsim1a = _tbd.rfsim1a # initialize rfsim1A framelog('STEP 0: Force group1 UEs to attach to cell-1') rfsim1a.set_rssi(mobiles=3, cells=1, rssi=0) rfsim1a.set_rssi(mobiles=3, cells=234, rssi=127) utils.poll(ta_verify, nodes=sarhmG1, log=False) # open cell-4 RF (TA=0001) framelog('STEP 1: Turn on cell-4 RF (TA=0001)') rfsim1a.set_rssi(mobiles=3, cells=4, rssi=0) # increase rssi and check G1-UE status for i in range(2, 6): rssi = i * 10 framelog('STEP %s: Increase cell-1 RF attenuation to %s' % (i, rssi), '*') rfsim1a.set_rssi(mobiles=3, cells=1, rssi=rssi) framelog('STEP %s.1: Check UE switch to cell-4 TA' % i, '*') ta_verify(nodes=sarhmG1, log=False) # check TA switched if not ta_verify(nodes=sarhmG1, ta=ta2, log=False): results.append(False) framelog('STEP %s: Turn off cell-4 RF' % (i + 1), '*') rfsim1a.set_rssi(mobiles=3, cells=1, rssi=0) rfsim1a.set_rssi(mobiles=3, cells=234, rssi=127) framelog('STEP %s: check UE switch back to cell-1 TA' % (i + 1), '*') if not utils.poll(ta_verify, nodes=sarhmG1, ta=ta1, log=False): results.append(False) return [ppf(results)]
# test backup via ftp and netconf for nd in tb: nd.backup_ftp() nd.backup_xml() bkdir = tb.bkup_dir mylog.info('Testbed backup: %s' % bkdir) resultd['backup_case'] = 'PASS' #mylog.info('JSON result: %s' % json.dumps(resultd)) #utils.log2html(logfile, logid, bkdir) #sys.exit(0) # test port shut and noshut for opt in ['ssh', 'snmp', 'netconf']: for nd in tb: utils.framelog(">%s< %s switch to Classic" % (opt, nd.sysname)) for pt in nd: pt.shutdown(opt=opt) pt.noshutdown(opt=opt) time.sleep(2) nd.cliexe('show port | match %s' % pt.port) utils.framelog(">%s< %s switch to MD-CLI" % (opt, nd.sysname)) for pt in nd: pt.shutdown(opt=opt) pt.noshutdown(opt=opt) time.sleep(2) nd.cliexe('show port | match %s' % pt.port) resultd['shut/noshut port'] = 'PASS' mylog.info('JSON result: %s' % json.dumps(resultd))