# -*- coding: utf-8 -*-
from PyQt4 import QtCore
import os,time,datetime,codecs
import telnetlib #telnet连接模块
import paramiko #ssh连接模块
import ConfigParser #配置文件模块
import sys,socket
import thread #处理和控制线程
import gc #垃圾回收
reload(sys)
sys.setdefaultencoding('utf8') #设置utf8为默认编码
#Telnet登录
class Telnet():
def __init__(self,host):
self.telnet = telnetlib.Telnet(host, port = 10020, timeout=10) #连接telnet服务器
self.telnet.set_debuglevel(2)
#读取用户名及密码
def Read(self,Prompt,Timeout):
buff = ""
try:
buff += self.telnet.read_until(Prompt,Timeout) #读取指定的用户名或密码,Timeout超时
except:
self.Send("\n")
buff += self.telnet.read_until(Prompt,Timeout)
return buff
#发送命令
def Send(self,Command):
self.telnet.write(str(Command)+'\n') #向远端发送命令
#关闭连接
def Close(self):
self.telnet.close() #终止telnet连接
#ssh登录
class ssh():
def __init__(self,host,username,passwd):
self.s = paramiko.SSHClient() #建立一个连接对象
self.s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
self.s.connect(hostname=host,port=22, username=username, password=passwd,timeout = 30) #连接服务器
self.ssh = self.s.invoke_shell() #建立交互式shell连接
time.sleep(2)
#发送数据
def Send(self,Command):
self.ssh.send(str(Command) + '\r')
#接收数据
def Recv(self,Buff_Size,Time):
buff = ""
try:
buff += self.ssh.recv(Buff_Size,Time) #获取回显
except:
self.Send("\n")
buff += self.ssh.recv(Buff_Size,Time)
return buff
#关闭连接
def Close(self):
self.s.close()
#获取配置文件信息
class Config_ini():
def __init__(self,filename):
self.config = ConfigParser.ConfigParser() #创建配置文件对象
self.config.readfp(open(filename)) #打开并读取配置文件
def get_info(self,session,key):
return self.config.get(session,key) #读取配置文件中指定段的键值
def session(self):
return self.config.sections() #获取所有的段
def option(self,session):
return self.config.options(session) #得到指定段的所有信息
def set(self,session,option,value):
return self.config.set(session,option,value) #修改配置文件的值
#log信息保存
class Consumer(QtCore.QThread):
def __init__(self,queue,parent = None):
super(Consumer,self).__init__(parent)
self.data = queue
self.working = True
def write_log(self,PD,SN,Time):
if not os.path.exists(os.getcwd() + "\\log"): #exists()函数判断路径,getcwd()函数返回当前路径
os.makedirs(os.getcwd() + "\\log") #递归创建目录
Path = os.getcwd() + "\\log\\" #文件路径
self.data_file = Path + PD + "_whole_" + SN + "_" + Time + ".log" #在Path路径下创建log文件
while self.working: #循环
s = self.data.get() #获取测试数据
F = codecs.open(self.data_file, "a+", encoding='gb18030') #以指定的编码读取模式打开文件
F.write(s + "\r\n") #写入文件
F.close() #关闭文件
#主测试程序
class Main_Test(QtCore.QThread):
def __init__(self,queue,parent = None):
super(Main_Test,self).__init__(parent)
self.data = queue #数据
self.isWait = True #等待
self.working = True #工作
self.Input_IP_address=None
self.error_count=0 #错误次数为0
self.Ship_Out_Address=None
self.Red = "QPushButton{background-color:RED}" #红色
self.Yellow = "QPushButton{background-color:YELLOW}" #黄色
self.Green = "QPushButton{background-color:GREEN}" #绿色
self.Config_ini = Config_ini("ini/Paramiters.ini") #获取配置文件信息
self.GNS_SWV = self.Config_ini.get_info("GNS", "swv") #获取GNS段swv信息
self.GNS_SPN = self.Config_ini.get_info("GNS", "spn")
self.GNS_DPN = self.Config_ini.get_info("GNS", "dpn")
self.GNS_BPN = self.Config_ini.get_info("GNS", "bpn")
self.GNS_FPGAPN = self.Config_ini.get_info("GNS", "fpgapn")
self.GNS_ISOPN = self.Config_ini.get_info("GNS", "isopn")
self.GNS_MOD=self.Config_ini.get_info("GNS", "mod")
self.GNS_FPGA=self.Config_ini.get_info("GNS","fpga_version")
self.GNS_Docker = self.Config_ini.get_info("GNS", "docker")
self.GNS_Nginx = self.Config_ini.get_info("GNS", "nginx")
self.GNS_Nodejs = self.Config_ini.get_info("GNS", "nodejs")
self.GNS_Mongodb = self.Config_ini.get_info("GNS", "mongodb")
self.GNS_Underlying = self.Config_ini.get_info("GNS", "underlying")
self.MAC = ""
self.Boot = ""
self.Kernel = ""
self.APP = ""
self.Config = ""
#获取IP地址
def Local_IP(self):
self.Local_IP = socket.gethostbyname(socket.gethostname()) #获取本地主机名的IP地址
return str(self.Local_IP)
#连接设备
def Connection(self, host):
username = "gns"
passwd = "feitian"
try:
self.Connect = ssh(str(host), username, passwd) #ssh连接服务器
self.Send_Command("\n")
except Exception, e:
self.Test_Fail(str(e))
#发送接收数据
def Send_Command(self, Command, Prompt='#', Timeout=10,wait_time=1):
try:
buff = ""
log = ""
self.Connect.Send(Command) #发送命令
starttime = datetime.datetime.now() #获取当前时间
# while not buff.endswith(Prompt):
while Prompt not in buff:
buff = ""
time.sleep(1)
buff += self.Connect.Recv(99999,wait_time)
log += buff
self.data.put(buff)
self.emit(QtCore.SIGNAL('output(QString)'), buff)
endtime = datetime.datetime.now()
if (endtime - starttime).seconds > Timeout:
self.Test_Fail(u"超时, %s 不能找到" % Prompt)
break
return log
except Exception, E:
self.Test_Fail(u"命令错误,%s 不能找到" % Prompt)
#通过开头和结尾字符串获取中心字符串
def GetMiddleStr(self, content, startStr, endStr):
try:
startIndex = content.index(startStr) #检测content字符串中是否包含startstr字符串,返回开始的索引
if startIndex >= 0:
startIndex += len(startStr)
endIndex = content.index(endStr) #检测content字符串中是否包含endstr字符串,返回开始的索引
return content[startIndex:endIndex].strip() #移除字符串收尾的空格,并返回字符串指定的字符
except Exception, e:
self.Test_Fail(u"内容返回错误")
#设置颜色
def Set_Color(self, message):
self.emit(QtCore.SIGNAL('color'), message)
#设置地址
def Set_Status(self, message):
self.emit(QtCore.SIGNAL('status'), message)
#错误消息
def error(self,message):
if message !="":
self.emit(QtCore.SIGNAL('error'),message)
self.data.put(message)
#测试通过提示
def Test_Pass(self,message):
if message !="":
self.emit(QtCore.SIGNAL('pass'),message) #发送信号
self.data.put(message)
#测试开始
def Test_Running(self,message):
l = "########################################" + message + "########################################"
self.emit(QtCore.SIGNAL('dis_message'), l) #发送信号
self.data.put(l) #入队
#测试失败
def Test_Fail(self,message):
self.working = False
self.error_count = 1 #错误计数
self.Set_Color(self.Red)
self.data.put(message) #测试失败信息入队
self.error(message) #发送错误信息
self.emit(QtCore.SIGNAL('error'), "%s" % u"Test FAIL\n")
self.emit(QtCore.SIGNAL('stop'), self.working)
thread.exit_thread() # 终止线程
#输入IP地址
def Input_IP(self,message):
self.emit(QtCore.SIGNAL('input'),message)
while self.isWait:
time.sleep(1)
self.isWait = True
return self.Input_IP_address
#输入地址
def Ship_Out_Address_setting(self,message):
self.emit(QtCore.SIGNAL('ship'),message)
while self.isWait:
time.sleep(1)
self.isWait = True
return self.Ship_Out_Address
#提示消息
def Prompt(self,message):
self.emit(QtCore.SIGNAL('Prompt'),message)
while self.isWait:
time.sleep(1)
self.isWait=True
#测试完成
def Test_Finished(self,message):
self.working = False
if self.error_count == 0:
self.Test_Pass(message)
self.emit(QtCore.SIGNAL('stop'),self.working)
thread.exit_thread() # 终止线程
#程序运行
def Script_Start(self,PD,SN,Time,Host,Server_IP = None):
self.working = True
self.PD = PD
self.SN = SN
self.Host = Host
self.Time = Time
self.error_count = 0 #错误计数
Ping=os.system("ping -n 5 %s"%Host)
if Ping == 0:
self.Test_Running(u"##### Login #####") #测试开始信号
self.Connection(Host) #连接测试设备
os.system('netsh firewall set opmode disable') #后台关闭windows系统防火墙
os.system("start /b iperf.exe -s -w1m&") #windows系统后台运行iperf,并指定选项
time.sleep(5)
self.Install_Tools() #GNS工具安装
while self.working == True:
self.VersionCheck() #版本检测
self.MAC_check() #MAC地址检测
self.ShowTemperature() #温度检测
self.MemeryCheck() #内存检测
if Server_IP != "":
self.clock_test(Server_IP) #时钟检测
self.Discrete() #离散量检测
if Server_IP != "":
self.EthSpeedCheck(Server_IP) #网口速率检测
self.USBCheck() #USB检测
self.SSDCheck() #硬盘检测
self.Clean_Caches() #清理缓存
os.system('netsh firewall set opmode mode=enable') #开启Windows防火墙
os.system("taskkill /f /t /im iperf.exe") #关闭iperf进程
os.system("taskkill /f /t /im cmd.exe") #关闭dos窗口
self.Test_Finished(u"LRU Test Completed PASS")
gc.collect() #垃圾回收
else:
self.Test_Fail(u"IP ping failed")
self.Prompt(u"IP ping failed")
#GNS工具安装
def Install_Tools(self):
self.Send_Command("cd /root/software/gns_test/")
self.Send_Command("chmod +x *")
self.Send_Command("./install_sysstat.sh","#",60)
time.sleep(3)
self.Send_Command("\cp -f kcpu /sbin")
self.Send_Command("\cp -f iozone /sbin")
self.Send_Command("\cp -f nmon /sbin")
self.Send_Command("\cp -f iperf /sbin")
self.Send_Command("\cp -f cpulimit /sbin")
self.Send_Command("\cp -f run_kcpu.sh /sbin")
self.Send_Command("cd 429")
self.Send_Command("\cp -f * /sbin")
self.Send_Command('cd /')
#清理缓存
def Clean_Caches(self):
self.Send_Command("echo 3 >> /proc/sys/vm/drop_caches&")
time.sleep(3)
self.Send_Command("free -m")
self.Send_Command('cd /')
#MAC地址检测
def MAC_check(self):
self.Test_Running(u"### MAC Check ###")
MAC = self.Send_Command("ifconfig | grep eth0")
if "5C:E0:CA" in MAC:
self.Test_Pass(u"MAC PASS")
else:
self.Test_Fail(u"MAC FAIL")
#时钟检测
def clock_test(self, Server_IP):
self.Test_Running(U"##### NTP Check #####")
os.system(
'reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer /v Enabled /t REG_DWORD /d 1 /f') # 修改注册表
os.system(
'reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config /v AnnounceFlags /t REG_DWORD /d 5 /f') # 修改注册表
os.system("net stop w32time & net start w32time") # 后台停止和启动windows系统NTP服务
self.Send_Command("service ntpd stop")
self.Send_Command("ntpdate %s &" % Server_IP, "Done", 15)
time.sleep(5)
date = self.Send_Command("date") #获取设备时间
clock = str(datetime.datetime.now().year) #获取本地时间
if clock in date:
self.Test_Pass(u'NTP PASS')
else:
self.Test_Fail(u"NTP FAIL")
#网口速率
def EthSpeedCheck(self, Server_IP):
self.Test_Running(u" Ethernet Front-end Ports Rate Check ")
Ping_message = self.Send_Command("ping %s -c5" % Server_IP)
if "Host Unreachable" in Ping_message:
self.Test_Fail(u"Ping Server Fail")
else:
time.sleep(5)
for count in range (1,6):
time.sleep(3)
Eth_Speed = self.Send_Command("iperf -c "+Server_IP+" -w1m -i1 -t30 | grep '0.0-3'&","Done",40)
if "Broken pipe" not in Eth_Speed:
result= self.GetMiddleStr(str(Eth_Speed),'Bytes',"Mbits")
if float(result) >500: #以太网接口速率大于500兆
if count < 5 :
info = u'Ethernet port '+ str(count) + u' rate:' + str(result) + u'Mbits/sec PASS,please connect to ETH' + str(count+1)
else :
info = u'Ethernet port 5 rate:%sMbits/sec PASS'% str(result)
self.Test_Pass(info)
self.Prompt(info)
else:
info = u'Ethernet port rate ' + str(result) +u'Mbits/sec,FAIL.'
self.Test_Fail(info)
else:
self.Test_Fail(u'Iperf address access failed')
#温度检测
def ShowTemperature(self):
self.Test_Running(u"##### Temperature Check #####")
temp = self.Send_Command("sensors -u&", "Done", 10)
Core0 = self.GetMiddleStr(str(temp), 'temp2_input:', "temp2_max:")
if float(Core0) > 96:
self.Test_Fail(u"CPU Core 0 Temperature:%s℃,More than 96℃,FAIL" % Core0)
else:
self.Test_Pass(u"CPU Core 0 Temperature:%s℃,PASS" % Core0)
Core1 = self.GetMiddleStr(str(temp), 'temp3_input:', "temp3_max:")
if float(Core1) > 96:
self.Test_Fail(u"CPU Core 1 Temperature:%s℃,More than 96℃,FAIL" % Core1)
else:
self.Test_Pass(u"CPU Core 1 Temperature:%s℃,PASS" % Core1)
#内存检测
def MemeryCheck(self):
self.Test_Running(u"##### Memory Check #####")
self.Send_Command("iostat -m")
mem = self.Send_Command("free | grep Mem | awk '{print $2}'", "#", 30)
mem = self.GetMiddleStr(str(mem), "}'", "[").strip()
if float(mem) < 8126000:
self.Test_Fail(u"Memory < 8G,FAIL")
else:
self.Test_Pass(u"Memory:%s,PASS" % mem)
#版本检测
def VersionCheck(self):
self.Test_Running(u"##### Version Check #####")
vershow = self.Send_Command("vershow&", "Done", 60,5)
underlying_version=self.GetMiddleStr(vershow,'underlying version:',"Config").strip()
if underlying_version == self.GNS_Underlying:
self.Test_Pass(u"Software Version:%s,PASS" % underlying_version)
else:
self.Test_Fail(u"Software Version:%s,FAIL" % underlying_version)
fpga = self.Send_Command('fpga_version')
FPGA=self.GetMiddleStr(fpga,'version:',"[").strip()
if FPGA == self.GNS_FPGA:
self.Test_Pass(u"FPGA:%s,PASS" % FPGA)
else:
self.Test_Fail(u"FPGA:%s,FAIL" % FPGA)
swv = self.Send_Command('swv_read')
swv = self.GetMiddleStr(swv, "version :", "[").strip()
if swv == self.GNS_SWV:
self.Test_Pass(u"SWV:%s,PASS" % swv)
else:
self.Test_Fail(u"SWV:%s,FAIL" % swv)
mod = self.Send_Command('mod_read')
mod = self.GetMiddleStr(mod, "Mod number:", "[").strip()
if mod == self.GNS_MOD:
self.Test_Pass(u"MOD:%s,PASS" % mod)
else:
self.Test_Fail(u"MOD:%s,FAIL" % mod)
spn = self.Send_Command('spn_read')
spn = self.GetMiddleStr(spn, "part number:", "[").strip()
if spn == self.GNS_SPN:
self.Test_Pass(u"SPN:%s,PASS" % spn)
else:
self.Test_Fail(u"SPN:%s,FAIL" % spn)
dpn = self.Send_Command('dpn_read')
dpn = self.GetMiddleStr(dpn, "PN_VERSION:", "[").strip()
if dpn == self.GNS_DPN:
self.Test_Pass(u"DPN:%s,PASS" % dpn)
else:
self.Test_Fail(u"DPN:%s,FAIL" % dpn)
bpn = self.Send_Command('board_pn_read')
bpn = self.GetMiddleStr(bpn, "Board_Product_Number:", "[").strip()
if bpn == self.GNS_BPN:
self.Test_Pass(u"BPN:%s,PASS" % bpn)
else:
self.Test_Fail(u"BPN:%s,FAIL" % bpn)
fpgapn = self.Send_Command('fpgapn_read')
fpgapn = self.GetMiddleStr(fpgapn, "fpga part number:", "[").strip()
if fpgapn == self.GNS_FPGAPN:
self.Test_Pass(u"FPGA PN:%s,PASS" % fpgapn)
else:
self.Test_Fail(u"FPGA PN:%s,FAIL" % fpgapn)
isopn = self.Send_Command('isopn_read')
isopn = self.GetMiddleStr(isopn, "iso part number:", "[").strip()
if isopn == self.GNS_ISOPN:
self.Test_Pass(u"ISO PN:%s,PASS" % isopn)
else:
self.Test_Fail(u"ISO PN:%s,FAIL" % isopn)
if "3.10.5-3.el6.x86_64" in self.Send_Command('uname -a'):
self.Test_Pass(u"System Version:3.10.5-3.el6.x86_64,PASS")
else:
self.Test_Fail(u"System Version:3.10.5-3.el6.x86_64,FAIL")
dsn = self.Send_Command('dsn_read')
bsn = self.Send_Command('board_sn_read')
if "failed" in vershow:
self.Test_Fail(u"Version Upgrade FAIL")
#USB模块检测
def USBCheck(self):
self.Test_Running(u"##### USB Check #####")
self.Prompt(u"Please insert a USB flash drive in FAT32 format") #消息提示
self.Send_Command('mkdir usb','#',10)
usb_drive=self.Send_Command("fdisk -l | grep FAT32 | awk '{print $1}'")
drive= self.GetMiddleStr(str(usb_drive),"}'","[").strip()
if '/dev/sd' in drive:
self.Test_Pass('U Disk PASS')
self.Send_Command('mount %s usb' % drive)
self.Send_Command('cd usb' )
usb_wr = self.Send_Command('dd bs=1M count=100 if=%s of=test conv=fsync'%drive,'#',30)
usb_wr_A= self.GetMiddleStr(str(usb_wr),'s,',"[")
self.Send_Command('rm -rf test')
self.Send_Command('cd ..' )
self.Send_Command('umount usb')
self.Send_Command('rm -rf usb')
self.Test_Pass(u"USB W+R Rate: %s"%str(usb_wr_A) )
else:
self.Test_Fail(u'U Disk FAIL' )
#硬盘检测
def SSDCheck(self):
self.Test_Running(u"### SSD Check ###")
if 'SATA' in self.Send_Command('lspci'):
self.Test_Pass(u'SSD Module Recognition PASS')
else:
self.Test_Fail(u"SSD Module Recognition FAIL")
num1 = self.Send_Command("fdisk -l | grep -c sda")
num2 = self.Send_Command("df | grep -c sda")
if "7" in num1 and "4" in num2:
GNS_DISK = self.Send_Command('fdisk -l | grep sda')
sda_size = self.GetMiddleStr(GNS_DISK, '/dev/sda:', "GB")
if float(sda_size) > 950:
self.Test_Pass(u"SSD-1 size=%sGB PASS" % sda_size)
else:
self.Test_Fail(u"SSD-1 size<950GB FAIL")
GNS_DISK = self.Send_Command('fdisk -l | grep sdb')
if '/dev/sdb' in GNS_DISK:
sdb_size = self.GetMiddleStr(str(GNS_DISK), 'Disk /dev/sdb: ', "GB,")
if float(sdb_size) > 950:
self.Test_Pass(u"SSD-2 size=%sGB PASS" % sdb_size)
else:
self.Test_Fail(u"SSD-2 size<950GB FAIL")
else:
self.Test_Fail(u"SSD-2 Recognition FAIL ")
HD_write = self.Send_Command('dd bs=16M count=1024 if=/dev/zero of=test conv=fdatasync', '#', 300,10)
HD_write_A = self.GetMiddleStr(str(HD_write), 's,', "MB/s")
HD_read = self.Send_Command('dd bs=16M if=test of=/dev/null', '#', 300,10)
HD_read_A = self.GetMiddleStr(str(HD_read), 's,', "MB/s")
self.Send_Command("rm -rf test", "#", 30)
if float(HD_write_A) < 150:
self.Test_Fail(u"SSD Write Rate < 150MB/s FAIL")
elif float(HD_read_A) < 170:
self.Test_Fail(u"SSD Read Rate < 170MB/s FAIL")
else:
self.Test_Pass(u"SSD Read Rate:%sMB/s PASS" % str(HD_read_A))
self.Test_Pass(u"SSD Write Rate:%sMB/s PASS" % str(HD_write_A))
else:
self.Test_Fail(u"SSD Partition FAIL")
#离散量检测
def Discrete(self):
self.Test_Running(u"#### Discrete Check ####")
self.Send_Command("arinc set_control_off")
for i in range(1,17):
if i<15:
self.Send_Command("hi8435_cfg wrDiscOut %s low" % str(i))
else:
self.Send_Command("hi8435_cfg wrDiscOut %s low" % str(i))
low = self.Send_Command("arinc get_signalstatusmatrix", '#', 5)
low=self.GetMiddleStr(low,'get_signalstatusmatrix','[')
low = int(low[3] + low[7] + low[11] + low[15] + low[19] + low[23] + low[27] + low[31] + low[35] + low[39] + low[44] +low[49] + low[54])
for i in range(1, 17):
if i < 15:
self.Send_Command("hi8435_cfg wrDiscOut %s high" % str(i))
else:
self.Send_Command("hi8435_cfg wrDiscOut %s high" % str(i))
high = self.Send_Command("arinc get_signalstatusmatrix", '#', 5)
high = self.GetMiddleStr(high,'get_signalstatusmatrix','[')
high = int(high[3] + high[7] + high[11] + high[15] + high[19] + high[23] + high[27] + high[31] + high[35] + high[39] +high[44] + high[49] + high[54])
log1=low+high
for i in range(1, 17):
if i < 15:
self.Send_Command("hi8435_cfg wrDiscOut %s low" % str(i))
else:
self.Send_Command("hi8435_cfg wrDiscOut %s low" % str(i))
low = self.Send_Command("arinc get_signalstatusmatrix", '#', 5)
low = self.GetMiddleStr(low, 'get_signalstatusmatrix', '[')
low = int(low[3] + low[7] + low[11] + low[15] + low[19] + low[23] + low[27] + low[31] + low[35] + low[39] + low[44] +low[49] + low[54])
log2=high+low
if log1==1111111111111 and log2==1111111111111:
self.Test_Pass('Discrete Check PASS')
else:
self.Test_Fail('Discrete Check FAIL')
#429检测
self.Test_Running(u"##### ARINC429 Check #####")
self.Send_Command("hi3593_c0_cfg setRx1BitRate high\r")
self.Send_Command("hi3593_c0_cfg setRx2BitRate high\r")
self.Send_Command("hi3593_c0_cfg setTxBitRate high\r")
self.Send_Command("hi3593_c1_cfg setRx1BitRate high\r")
self.Send_Command("hi3593_c1_cfg setRx2BitRate high\r")
self.Send_Command("hi3593_c1_cfg setTxBitRate high\r")
if int(self.GetMiddleStr(self.Send_Command("ps | grep -c netlink_u_self.APP"), "self.APP", "[")) < 1:
self.Send_Command("netlink_u_app &\r", '#', 3)
c = self.Send_Command("hi429_sendmsg_user_chip0 123 3\r")
if "0x42910001" in c:
self.Test_Pass(u"ARINC429 CHIP0 PASS")
#if "0x42910002" not in c:
#self.Test_Fail(u"429 CHIP0 RX2 测试失败")
else:
self.Test_Fail(u"ARINC429 CHIP0 FAIL")
d = self.Send_Command("hi429_sendmsg_user_chip1 456 3\r")
if "0x42920001" in d:
self.Test_Pass(u"ARINC429 CHIP1 PASS")
#if "0x42920002" not in d:
#self.Test_Fail(u"429 CHIP1 RX4 测试失败")
else:
self.Test_Fail(u"ARINC429 CHIP1 FAIL")
#升级
def upgrade(self,PD,Host,Boot,Kernel,APP,Config,MAC,Server_IP):
self.working = True
self.starttime = datetime.datetime.now()
self.PD = PD
self.Host = Host
self.Boot = Boot
self.Kernel = Kernel
self.APP = APP
self.Config = Config
self.MAC = MAC
self.error_count = 0
self.Connection(Host)
time.sleep(5)
PD_message = self.Send_Command("cat /sbin/PRODUCT_MESSAGE ","#",5 )
SN = self.GetMiddleStr(str(PD_message),'SN_VERSION:',"PN_VERSION:").strip()
PN = self.GetMiddleStr(str(PD_message),"PN_VERSION:",'CPLD').strip()
if self.Boot == '' and self.Kernel == "" and self.APP == "" and self.Config == "":
if "failed" not in self.Send_Command("vershow",'#',15):
if len(self.MAC) == 17:
self.Test_Running(u"program PD information")
self.Send_Command("pm_flash " + str(self.PD).lower() +" "+ PN + " "+ self.MAC + " "+ SN,"complete",20 )
self.Send_Command("configsave","Config save success",10)
self.Send_Command("\r")
else:
self.Test_Fail(u'请先升级')
else:
while self.working :
if self.Boot != '':
self.Test_Running(u"upgrade Boot")
if "timeout" in self.Send_Command("tftp -gr "+ self.Boot + " "+ Server_IP,"#",10):
self.Test_Fail(u"文件上传失败")
if 'failed ' in self.Send_Command("bootupdate "+ self.Boot,"#",30):
self.Test_Fail(u'Boot文件不匹配')
self.Send_Command("\r")
if self.Kernel != "":
self.Test_Running(u"upgrade Kernel")
self.Send_Command("tftp -gr " + self.Kernel + " "+ Server_IP,"#",30 )
self.Send_Command("kernelupdate " + self.Kernel,"system for testing",150)
self.Send_Command("\r")
if self.APP != "":
self.Test_Running(u"upgrade APP")
self.Send_Command("rm /mnt/mmcfs/fsself.APP*")
self.Send_Command("ls -l /mnt/mmcfs","#",5)
self.Send_Command("tftp -gr " + self.APP + " "+ Server_IP,"#",30)
self.Send_Command("fsappsave %s &"%self.APP,"Done",600)
self.Send_Command("\r")
if self.Config != "":
self.Test_Running(u"upgrade Configuration")
self.Send_Command("rm /mnt/mmcfs/fscon*")
self.Send_Command("ls -l /mnt/mmcfs","#",5)
self.Send_Command("tftp -gr " + self.Config + " " +Server_IP,"#",10 )
if self.PD == 'CWAP' or self.PD == 'TWCU':
self.Send_Command("fsconsave 0 " + self.Config,"save succes",30)
else:
self.Send_Command("fsconsave 10 " + self.Config,"save succes",30)
self.Send_Command("\r")
self.Send_Command("reboot\r","reboot")
self.Connect.Close()
self.Test_Running(u"rebooting")
time.sleep(100)
if self.PD == 'RWS22':
Host_IP = "10.66.10.1"
self.Connection(str(Host_IP))
if len(self.MAC) == 17:
self.Test_Running(u"program PD information")
self.Send_Command("pm_flash " + str(self.PD).lower() +" "+ PN + " "+ self.MAC + " "+ SN,"complete",20 )
self.Send_Command("configsave","save success",10)
self.Send_Command("\r")
if self.Boot != '':
self.Test_Running(u"upgrade sBoot2")
self.Send_Command("tftp -gr "+ self.Boot + " "+ Server_IP,"#",10)
self.Send_Command("bootupdate "+ self.Boot,"#",30)
self.Send_Command("\r")
if self.Kernel != "":
self.Test_Running(u"upgrade Kernel 2")
self.Send_Command("kernelconfirm")
self.Send_Command("tftp -gr " + self.Kernel + " "+ Server_IP ,"#",30)
self.Send_Command("\r")
self.Send_Command("kernelupdate " + self.Kernel,"system for testing",150)
self.Send_Command("\r")
if self.APP != "":
self.Test_Running(u"upgrade APP 2")
self.Send_Command("tftp -gr " + self.APP + " "+ Server_IP,"#",30 )
self.Send_Command("fsappsave %s &"%self.APP,"Done",600)
self.Send_Command("\r")
if self.Config != "":
self.Test_Running(u"upgrade Configuration 2")
self.Send_Command("tftp -gr " + self.Config + " " +Server_IP,"#",10)
if self.PD == 'CWAP' or self.PD == 'TWCU':
self.Send_Command("fsconsave 0 " + self.Config,"save succes",30)
else:
self.Send_Command("fsconsave 10 " + self.Config,"save succes",30)
self.Send_Command("\r")
self.Send_Command("reboot\r","reboot")
self.Connect.Close()
self.Test_Running(u"rebooting")
time.sleep(100)
self.Connection(str(Host_IP))
if self.Kernel != "":
self.Send_Command("kernelconfirm")
self.Test_Running(u"checking version")
if "failed" in self.Send_Command("vershow",'#',15):
self.Test_Fail(u'版本错误,升级失败')
else:
self.Test_Finished(u"升级成功")
#升级config
def Ship_Out(self,PD,Host,Config,Server_IP):
self.PD = PD
self.Connection(Host) #连接主机
time.sleep(5)
if Config != "":
self.Test_Running(u"upgrade configuration")
self.Send_Command("rm /mnt/mmcfs/fscon*")
self.Send_Command("ls -l /mnt/mmcfs","#",5)
self.Send_Command("tftp -gr " + Config + " " +Server_IP,"#",5 )
self.Ship_Out_Address_setting(U"请输入需要设置的二、三段地址")
self.Send_Command("fsconsave " + self.Ship_Out_Address + " " + Config,"save succes",30)
self.Send_Command("\r")
self.Send_Command("reboot\r","reboot")
self.Connect.Close()
self.Test_Running(u"rebooting")
time.sleep(120)
Ship_IP = "10."+self.Ship_Out_Address+".1"
self.Connection(str(Ship_IP))
self.Test_Running(u"upgrade configuration 2")
self.Send_Command("tftp -gr " + Config + " " +Server_IP,"#",5)
self.Send_Command("fsconsave " + self.Ship_Out_Address + " " + Config,"save succes",30)
self.Send_Command("\r")
self.Send_Command("reboot\r","reboot")
self.Connect.Close()
self.Test_Running(u"rebooting")
time.sleep(100)
self.Connection(str(Ship_IP))
self.Test_Running(u"checking version")
if "failed" in self.Send_Command("vershow",'#',15):
self.Test_Fail(u'版本错误,升级失败')
else:
self.Test_Finished(u"出厂配置完成")
#修改IP地址
def Modify_IP(self,PD,Host):
self.PD = PD
self.Connection(Host)
time.sleep(5)
self.Test_Running(u"Modify IP address:")
self.Send_Command("\r")
IP_Modify = self.Input_IP(U"请输入你想改成的设备IP地址:")
PCB_MAC = self.Send_Command("cat sbin/PRODUCT_MESSAGE | grep MacAddr | awk '{print $1}'")
FT600_MAC = str(PCB_MAC[-13:-8])
self.Send_Command("sed -i 's/" + Host + "/" + IP_Modify + "/g' /etc/config/Ethernet")
self.Send_Command("sed -i 's/255.255.255.0/255.0.0.0/g' /etc/config/Ethernet")
self.Send_Command("cat /etc/config/Ethernet")
self.Send_Command("configsave", "config save success", 30)
self.Send_Command("reboot","reboot")
if PD == 'RWLU-1U':
self.Connect.Close()
FT600_IP = str(Host[:-3] + str(int(Host[-3:]) + 100))
FT600_Modify_IP = IP_Modify[:-3] + str(int(IP_Modify[-3:]) + 100)
try:
self.Connection(str(FT600_IP))
except Exception, e:
self.Test_Fail(e)
self.FT600_Login()
self.Send_Command("sed -i 's/11:12/" + str(FT600_MAC).upper() + "/g' /sbin/PRODUCT_MESSAGE ")
self.Send_Command("rm /etc/config/wireless")
self.Send_Command("sed -i '/br-lan/'d /etc/rc.d/rcS")
self.Send_Command("sed -i '/net.sh start/a\ifconfig br-lan " + FT600_Modify_IP + "' /etc/rc.d/rcS ")
self.Send_Command("sed -n '/br-lan/p' /etc/rc.d/rcS")
self.Send_Command("reboot","reboot")
time.sleep(2)
self.Test_Finished(u"IP修改成功")
#磁盘格式化
def Format_Disk(self,PD, Host):
self.PD = PD
self.Connection(Host)
time.sleep(5)
self.Test_Running(u"Format DISK")
if '5' not in self.Send_Command('fdisk -l | grep -c "/dev/sda"'):
self.Send_Command("fdisk /dev/sda","Command (m for help):")
self.Send_Command("n",":")
self.Send_Command("p","Partition number (1-4):")
self.Send_Command("1","):")
self.Send_Command("","):")
self.Send_Command("+900M","Command (m for help):")
self.Send_Command("n",":")
self.Send_Command("p","Partition number (1-4):")
self.Send_Command("2","):")
self.Send_Command("","):")
self.Send_Command("+100M","Command (m for help):")
self.Send_Command("n",":")
self.Send_Command("p","Partition number (1-4):")
self.Send_Command("3","):")
self.Send_Command("","):")
self.Send_Command("+2048M","Command (m for help):")
self.Send_Command("n",":")
self.Send_Command("p","Partition number (1-4):")
self.Send_Command("","):")
self.Send_Command("","Command (m for help):")
self.Send_Command("t","Partition number (1-4):")
self.Send_Command("3","Hex code (type L to list codes):")
self.Send_Command("82","Command (m for help):")
self.Send_Command("p","Command (m for help):")
self.Send_Command("w"," #")
self.Send_Command("fdisk -l"," #")
self.Send_Command("mkfs.ext3 /dev/sda1"," #")
self.Send_Command("mkfs.ext3 /dev/sda2"," #")
self.Send_Command("mkfs.ext3 /dev/sda3"," #")
self.Send_Command("mkfs.ext3 /dev/sda4"," #")
self.Send_Command("mount /dev/sda4 /mnt/mmc0")
self.Send_Command("mount /dev/sda1 /mnt/mmc1")
self.Send_Command("df -h")
self.Test_Finished(u"硬盘格式化成功")