--- /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()
+
+