def runTest(): util.dlog("runTest begins. category=" + category + " build=" + str(build)) if testMethod == "webmark": os.system("python WebMark/webmark.py binary/" + category + "/" + build + ".json") command = ( "python qa/ts-rt24/ts-rt24-testtools/run_qatest/run_qatest.py --type=QATEST-RUN-SLAVE --test-properties={'buildername':'" + category + "-builder','buildnumber':'" + build + "','mastername':'rt24','scheduler':'','slavename':'" + category + "','testcfg':'','restcfg_uri_default':'','testcfg_uri_temp':''}" ) print command os.system(command) # time.sleep(random.uniform(5, 15)) util.dlog("runTest ends. category=" + category + " build=" + str(build))
def downloadBinary(): os.chdir("binary/" + category) # Download zip file zipFile = build + ".zip" if not os.path.exists(build + ".zip"): util.dlog("Downloading " + category + "/" + build) url = util.urlPrefix + category + "/" + build + "/chrome-win32.zip" f = urllib2.urlopen(url) data = f.read() with open(zipFile, "wb") as code: code.write(data) util.dlog("Download " + category + "/" + build + " finished.") if not os.path.exists(zipFile): util.dlog("Download failed") os.chdir(sys.path[0]) return # Extract zip file if os.path.exists(build): shutil.rmtree(build) os.system("unzip " + build + ".zip") os.rename("chrome-win32", build) # Handle webmark config file if testMethod != "webmark": os.chdir(sys.path[0]) return configFile = build + ".json" if os.path.exists(configFile): os.remove(configFile) shutil.copyfile(sys.path[0] + "/webmark.json", configFile) f = open(configFile) lines = f.readlines() f.close() placeHolder = "placeholder" for lineIndex in range(0, len(lines)): if re.search(placeHolder, lines[lineIndex]): line = lines[lineIndex] line = line.replace(placeHolder, os.getcwd() + "/" + build + "/chrome.exe") line = line.replace("\\", "/") lines[lineIndex] = line break f = open(configFile, "w") for line in lines: f.write(line) f.close() os.chdir(sys.path[0])
builds = queue.split(",") for buildIndex in range(0, len(builds)): if re.match("^\d+$", builds[buildIndex]): build = builds[buildIndex] builds[buildIndex] += "(r)" lines[lineIndex] = util.queuePrefix + ",".join(builds) + "\n" util.writeStatus(lines) return True return False if __name__ == "__main__": os.chdir(sys.path[0]) util.dlog("Start to run test") lockRunName = "lock-run" if util.hasLock(lockRunName): util.dlog("It's already running") quit() util.lock(lockRunName) hasUpdate = False while util.atomOp(getAvailable): hasUpdate = True if testMethod == "webmark": downloadBinary() runTest() util.atomOp(updateStatus)
def checkUpdate(): global lines global hasUpdate file = open('status.txt') lines = file.readlines() file.close() categoryPattern = re.compile("category=(.*)") startPattern = re.compile("start=(.*)") queuePattern = re.compile("queue=(.*)") for lineIndex in range(0, len(lines)): line = lines[lineIndex] if categoryPattern.search(line): m = categoryPattern.search(line) category = m.group(1) elif startPattern.search(line): m = startPattern.search(line) start = m.group(1) startDate = time.strptime(start, '%Y-%m-%d') elif queuePattern.search(line): m = queuePattern.search(line) queue = str.strip(m.group(1)) # Get the previous max build number if not queue: maxBuildNumber = 0 else: oldBuilds = queue.split(',') numberPattern = re.compile("(\d+)") m = numberPattern.search(oldBuilds[0]) maxBuildNumber = m.group(1) # Ensure startDate is valid if not start: startDate = time.strptime('20120101', '%d-%b-%Y') # Get the new queue needs to be updated url = util.urlPrefix + category try: u = urllib2.urlopen(url) except BadStatusLine: start = "" continue html = u.read() buildPattern = re.compile('href="(\d+).*(\d\d-.*-\d+ \d+:\d+)') builds = buildPattern.findall(html) newQueue = "" for build in reversed(builds): buildNumber = build[0] if buildNumber <= maxBuildNumber: break buildDate = time.strptime(build[1], '%d-%b-%Y %H:%M') if buildDate <= startDate: break if not newQueue: newQueue = str(buildNumber) else: newQueue = newQueue + "," + str(buildNumber) # Update the queue if not newQueue: continue hasUpdate = True if not queue: line = "queue=" + newQueue else: line = "queue=" + newQueue + "," + queue lines[lineIndex] = line + '\n' util.dlog('Has an update: category=' + category + ' ' + line)
def updateStatus(): if not hasUpdate: util.dlog('Has no update') return util.writeStatus(lines)
for build in reversed(builds): buildNumber = build[0] if buildNumber <= maxBuildNumber: break buildDate = time.strptime(build[1], '%d-%b-%Y %H:%M') if buildDate <= startDate: break if not newQueue: newQueue = str(buildNumber) else: newQueue = newQueue + "," + str(buildNumber) # Update the queue if not newQueue: continue hasUpdate = True if not queue: line = "queue=" + newQueue else: line = "queue=" + newQueue + "," + queue lines[lineIndex] = line + '\n' util.dlog('Has an update: category=' + category + ' ' + line) if __name__ == '__main__': os.chdir(sys.path[0]) util.dlog('Start to check update') checkUpdate() util.atomOp(updateStatus)