diff -r 000000000000 -r 83f4b4db085c srcanamdw_os/leavescan/test/LET/let.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/srcanamdw_os/leavescan/test/LET/let.py Tue Feb 02 01:39:43 2010 +0200 @@ -0,0 +1,345 @@ +#!/usr/bin/python +import string +import sys +import os +from os import listdir +from os.path import isdir +import time +from optparse import OptionParser + +#config +LEAVESCAN = 'D:\leavescan.exe ' + +os_type = 'unix' +if sys.platform.lower().startswith('win'): + os_type = 'windows' + +class TestResult: + def __init__(self): + self.allOutput="" + self.lines={} + + def setAllOutput(self,allOuptput): + self.allOuptput = allOuptput + + def parseLines(self): + tmp_lines=self.allOuptput.splitlines() + for tmp_line in tmp_lines: + line_no = getLeaveScanMsgLine(tmp_line) + self.lines[line_no]=tmp_line + + def checkResult(self,warnItems): + result = '' + ok=0 + for warnItem in warnItems: + warnLine = warnItem.line + if not warnItem.semi: + if self.lines.has_key(warnLine): + outputLine = self.lines[warnLine] + for keyword in warnItem.checkExist: + if outputLine.find(keyword)<0: + result= result+ 'CHECK:"'+keyword+'" is expected in the output:"'+outputLine+'"\n' + ok=1 + for keyword in warnItem.checkNoExist: + if outputLine.find(keyword)>=0: + result= result+ 'CHECK:"'+keyword+'" is expected not in the output:"'+outputLine+'"\n' + ok=1 + else: + for keyword in warnItem.checkExist: + result= result+ 'CHECK:"'+keyword+'" is expected in the output of line'+str(warnLine)+'\n' + ok = 1 + else: + if self.lines.has_key(warnLine): + outputLine = self.lines[warnLine] + for keyword in warnItem.checkExist: + if outputLine.find(keyword)>=0: + result= result+ 'SEMI:"'+keyword+'" is expected in the output:"'+outputLine+'"\n' + ok=1 + for keyword in warnItem.checkNoExist: + if outputLine.find(keyword)<0: + result= result+ 'SEMI:"'+keyword+'" is expected not in the output:"'+outputLine+'"\n' + ok=1 + else: + for keyword in warnItem.checkNoExist: + result= result+ 'SEMI:"'+keyword+'" is expected in the output of line'+str(warnLine)+'\n' + ok = 1 + + + if ok==0: + return 'OK' + else: + return result; + +class CheckPoint: + def __init__(self): + self.line = -1 + self.checkExist=[] + self.checkNoExist=[] + self.semi = False + def setCheckPoint(self,warnString,semi = False): + warnString=warnString.strip() + if len(warnString)<=0: + return + keywordList = warnString.split(',') + for keyword in keywordList: + keyword = keyword.strip() + if len(keyword)>0: + if keyword[0]=='+': + self.checkExist.append(keyword[1:]) + elif keyword[0]=='-': + self.checkNoExist.append(keyword[1:]) + else: + self.checkExist.append(keyword) + self.semi = semi + + def printSelf(self): + printType = 0; + print 'line:'+ str(self.line) + if len(self.checkExist)>0: + print ' checkExist' + printType +=1; + for checkWord in self.checkExist: + print ' '+checkWord + if len(self.checkNoExist)>0: + print ' checkNoExist' + printType +=1; + for checkWord in self.checkNoExist: + print ' '+checkWord + if printType == 0: + print ' nothing to check' + + + +class TestcaseConfig: + def __init__(self): + self.desc ='' + self.option ='' + self.expect ='' + self.warnItems =[] + self.author = '' + self.type = '' + self.date ='' + def printSelf(self): + print 'desc:'+self.desc + print 'option:'+self.option + print 'author:'+self.author + print 'type:'+self.type + print 'date:'+self.date + print 'expect:'+self.expect + print 'check:' + for warnItem in self.warnItems: + print ' line:'+str(warnItem.line) + printType = 0; + if len(warnItem.checkExist)>0: + print ' checkExist' + printType +=1; + for checkWord in warnItem.checkExist: + print ' '+checkWord + if len(warnItem.checkNoExist)>0: + print ' checkNoExist' + printType +=1; + for checkWord in warnItem.checkNoExist: + print ' '+checkWord + if printType == 0: + + print ' nothing to check' + + + +def getTestcaseConfig(fileName): + file = open(fileName,"r") + fileLine = 0 + testcaseConfig = TestcaseConfig() + for line in file.readlines(): + if not line.endswith('\\'): + fileLine += 1 + line = line.strip() + scommnet = line.find('//') + if scommnet == 0: + if (line.find('desc:'))>0: + desc = line[line.find('desc:')+5:].strip() + testcaseConfig.desc=desc + elif line.find('option:')>0: + option = line[line.find('option:')+7:].strip() + testcaseConfig.option=option + elif line.find('expect file:')>0: + expect = line[line.find('expect file:')+12:].strip() + #get the content of the file + data = open(expect,"r") + for dataline in data.readlines(): + testcaseConfig.expect += dataline + elif line.find('expect:')>0: + expect = line[line.find('expect:')+7:].strip() + testcaseConfig.expect=expect + elif line.find('author:')>0: + expect = line[line.find('author:')+7:].strip() + testcaseConfig.author=expect + elif line.find('type:')>0: + expect = line[line.find('type:')+5:].strip() + testcaseConfig.type=expect + elif line.find('date:')>0: + expect = line[line.find('date:')+5:].strip() + testcaseConfig.date=expect + + if scommnet >=0: + line =line[scommnet+2:] + if line.find('check:')>=0: + line = line[line.find('check:')+6:].strip() + warnItem = CheckPoint() + warnItem.setCheckPoint(line) + warnItem.line = fileLine + testcaseConfig.warnItems.append(warnItem) + elif line.find('semi:')>=0: + line = line[line.find('semi:')+5:].strip() + warnItem = CheckPoint() + warnItem.setCheckPoint(line,True) + warnItem.line = fileLine + testcaseConfig.warnItems.append(warnItem) + + + return testcaseConfig + +def execute(filename , option): + commandLine = LEAVESCAN + option + ' ' +filename + output='' + for outputLine in os.popen(commandLine).readlines(): + output += outputLine + return output + +def analysis(result,testcaseConfig): + """ + no use in the version + for expect keyword + """ + if not testcaseConfig.expect=='': + if testcaseConfig.expect == result: + return 1; + else: + print testcaseConfig.expect + if DEBUG: + print '------' + print result + print '========' + return 0; + + +def excuteCmd(cmdLine): + i, o = os.popen4(cmdLine) + i.close() + out = o.read() + o.close() + return out + + +def getLeaveScanMsgLine(line): + p1=line.find('(') + if(p1<0): + return -2 + p2=line.find(')') + if(p2<2): + return -2 + return int(line[p1+1:p2]) + +def getFormatTime(): + curTime = time.localtime() + return str(curTime[0])+"_"+str(curTime[1])+"_"+str(curTime[2])+"_"+str(curTime[3])+"_"+str(curTime[4])+"_"+str(curTime[5]) + +def getCurTime(): + curTime = time.localtime() + return "'"+str(curTime[0])+"-"+str(curTime[1])+"-"+str(curTime[2])+" "+str(curTime[3])+":"+str(curTime[4])+":"+str(curTime[5])+".000000'" + +def getTestcaseName(fileName): + fileNameList = os.path.splitext(fileName) + return fileNameList[len(fileNameList)-2] + +def runTest(testFile,logFile,reportFile): + testcaseConfig = getTestcaseConfig(testFile) + cmdString = LEAVESCAN+testcaseConfig.option+' '+testFile + logFile.write(cmdString+'\n') + startTime = getCurTime() + result = excuteCmd(cmdString) + endtime = getCurTime() + logFile.write(result+'\n') + + lr = TestResult() + lr.setAllOutput(result) + lr.parseLines() + + result=lr.checkResult(testcaseConfig.warnItems) + testcaseResult = 'PASS' # for csv file + if not result=='OK': + logFile.write('ERROR:'+testFile+'\n') + logFile.write('DETAIL:'+'\n') + logFile.write(result) + testcaseResult = 'FAILTURE' + print testcaseResult+':'+testFile + + else: + logFile.write('PASS\n') + + reportFile.write(getTestcaseName(testFile)+','+startTime+','+endtime+','+testcaseResult+'\n') + if result=='OK': + return 1 + else: + return 0 + + +if __name__ == '__main__': + #pass argu + testFileList=[] + optParser = OptionParser('let -f file_list -o output_dir') + optParser.add_option("-f","--file",action = "store",type = "string",dest = "fileListName") + optParser.add_option("-o","--outputdir",action = "store",type = "string",dest = "outputName") + optParser.add_option("","--std-in",action = "store_true",dest = "listFromStdin",default =False) + optParser.add_option("-e","--execute",action = "store",type="string", dest = "exePath", default="") + options, args = optParser.parse_args(sys.argv[1:]) + #check exe exsitence + if not options.exePath == "": + if os.path.exists(options.exePath): + LEAVESCAN = options.exePath+" " + else: + print "WARN-"+options.exePath+" dosen't exist" + print "WARN-will use default config:"+LEAVESCAN + if not os.path.exists(LEAVESCAN.strip()): + print "WARN-please set Leavescan's address" + else: + fileListName = options.fileListName + outputDirName = options.outputName + if not os.path.exists(outputDirName): + os.makedirs(outputDirName) + #get each testcase in the list + pwd=os.getcwd()+'\\' + if options.listFromStdin : + listFile = sys.stdin + else: + listFile = open(fileListName,'r') + + for curFile in listFile.readlines(): + curFile=curFile.strip() + if(curFile.find('#')==0): + 1+1 + elif os.path.exists(curFile): + testFileList.append(curFile) + else: + print 'WARN-file '+curFile+ 'doesn\'t exist.ignore' + #other config + DEBUG = 0; + totalRun=0; + totalPass=0; + logFileName = outputDirName+'\\'+getFormatTime()+'.log' + reportFileName = outputDirName+'\\'+getFormatTime()+'.csv' + logFile = open(logFileName,'w') + reportFile = open(reportFileName,'w') + reportFile.write('TestCaseId,StartTime,EndTime,Result\n') + + for testFileName in testFileList: + #test it + totalRun+=1; + totalPass+=runTest(testFileName,logFile,reportFile) + #summary + print 'RSLT-Total:'+str(totalRun)+';Pass:'+str(totalPass) + #environment + logFile.close() + reportFile.close() + +