def run(self): #Run the built binary if it exists. ONLY WORKS IF BUILD WAS CALLED! if sys.platform == "darwin": runner = FirefoxRunner.create(binary=os.path.join(self.shellCacheDir,"mozbuild-trunk","obj-ff-dbg","dist","NightlyDebug.app","Contents","MacOS")+"/firefox-bin") runner.start() runner.wait() elif sys.platform == "linux2": runner = FirefoxRunner.create(binary=os.path.join(self.shellCacheDir,"mozbuild-trunk","obj-ff-dbg","dist","bin") + "/firefox") runner.start() runner.wait() elif sys.platform == "win32" or sys.platform == "cygwin": runner = FirefoxRunner.create(binary=os.path.join(self.shellCacheDir,"mozbuild-trunk","obj-ff-dbg","dist","bin") + "/firefox.exe") runner.start() runner.wait() else: print "Your platform is not currently supported." quit()
def run(self): #Run the built binary if it exists. ONLY WORKS IF BUILD WAS CALLED! if sys.platform == "darwin": runner = FirefoxRunner.create(binary=os.path.join( self.shellCacheDir, "mozbuild-trunk", "obj-ff-dbg", "dist", "NightlyDebug.app", "Contents", "MacOS") + "/firefox-bin") runner.start() runner.wait() elif sys.platform == "linux2": runner = FirefoxRunner.create( binary=os.path.join(self.shellCacheDir, "mozbuild-trunk", "obj-ff-dbg", "dist", "bin") + "/firefox") runner.start() runner.wait() elif sys.platform == "win32" or sys.platform == "cygwin": runner = FirefoxRunner.create( binary=os.path.join(self.shellCacheDir, "mozbuild-trunk", "obj-ff-dbg", "dist", "bin") + "/firefox.exe") runner.start() runner.wait() else: print "Your platform is not currently supported." quit()
def bisectRecurse(self, testcondition=None, args_for_condition=[]): #Recursively build, run, and prompt verdict = "" current_revision = captureStdout(self.hgPrefix + ["id", "-i"]) if self.remote: print "on current revision " + current_revision print "This would ask for a remote changeset, but it's not implemented yet." #TODO: #Remote bisection! #Step 1. Check if revision is in the archive #Step 2. If revision is not in the archive, set remote=False and continue (it will build and bisect that revision) #if not check_archived: # set remote false and continue #else: #Step 3. If the revision is in the archive, download it and its corresponding tests #STEP3 #1. Extract tests into some directory #2. Extract Nightly.app into "tests" #MozInstaller(src=, dest="", dest_app="Nightly.app") #3. run the following: #test_command = ['python', 'mochitest/runtests.py', '--appname=./Nightly.app/Contents/MacOS/firefox-bin', '--utility-path=bin', '--extra-profile-file=bin/plugins', '--certificate-path=certs', '--autorun', '--close-when-done', '--console-level=INFO', '--test-path=test_name'] #output = captureStdout(test_command, ignoreStderr=True) #set verdict based on output #python mochitest/runtests.py --appname=./Nightly.app/Contents/MacOS/firefox-bin --utility-path=bin --extra-profile-file=bin/plugins --certificate-path=certs --autorun --close-when-done --console-level=INFO --test-path=test_name #example test name: Harness_sanity/test_sanityException.html #Step 4. Run and run test to get verdict #Step 5. Set verdict elif self.tryPusher: try: caller = BuildCaller(host=self.tryhost, port=int(self.tryport), data=current_revision) print "Getting revision " + current_revision + "..." except: print "Failed to connect to trypusher. Make sure your settings are correct and that the trypusher server was started." exit() response = caller.getChangeset() print "Waiting on Mozilla Pulse for revision " + response + "..." url = caller.getURLResponse(response) print "the base is " + url_base(url) #Download it here #1. Download from url, extract to same place as tests #2. Run test or start browser. binary_path = os.path.join(self.binaryDir, url_base(url)) downloaded_binary = download_url(url, dest=str(binary_path)) MozInstaller(src=str(binary_path), dest=str(self.testDir), dest_app="Nightly.app") #now nightly is installed in if sys.platform == "darwin": binary_path = os.path.join(self.testDir, "Nightly.app") runner = FirefoxRunner.create( binary=os.path.join(binary_path, "Contents", "MacOS") + "/firefox-bin") elif sys.platform == "linux2": binary_path = os.path.join(self.testDir, "firefox") runner = FirefoxRunner.create(binary=binary_path) elif sys.platform == "win32" or sys.platform == "cygwin": binary_path = os.path.join(self.testDir, "firefox.exe") runner = FirefoxRunner.create(binary=binary_path) else: print "Your platform is not currently supported." quit() dest = runner.start() if not dest: print "Failed to start the downloaded binary" verdict == "skip" runner.wait() if verdict == "skip": pass elif testcondition != None: #Support condition scripts where arg0 is the directory with the binary and tests args_to_pass = [self.testDir] + args_for_condition if hasattr(testcondition, "init"): testcondition.init(args_to_pass) #TODO: refactor to use directories with revision numbers #8.2.11 - revision number can now be found in current_revision variable tmpdir = tempfile.mkdtemp() verdict = testcondition.interesting(args_to_pass, tmpdir) #Allow user to return true/false or bad/good if verdict != "bad" and verdict != "good": verdict = "bad" if verdict else "good" else: try: self.build() except Exception: print "This build failed!" verdict = "skip" if verdict == "skip": pass elif testcondition == None: #Not using a test, interactive bisect begin! self.run() else: #Using Jesse's idea: import any testing script and run it as the truth condition args_to_pass = [self.objdir] + args_for_condition if hasattr(testcondition, "init"): testcondition.init(args_to_pass) #TODO: refactor to use directories with revision numbers #8.2.11 - revision number can now be found in current_revision variable tmpdir = tempfile.mkdtemp() verdict = testcondition.interesting(args_to_pass, tmpdir) #Allow user to return true/false or bad/good if verdict != "bad" and verdict != "good": verdict = "bad" if verdict else "good" while verdict not in ["good", "bad", "skip"]: verdict = raw_input( "Was this commit good or bad? (type 'good', 'bad', or 'skip'): " ) if verdict == 'g': verdict = "good" if verdict == 'b': verdict = "bad" if verdict == 's': verdict = "skip" # do hg bisect --good, --bad, or --skip verdictCommand = self.hgPrefix + ["bisect", "--" + verdict] print " ".join(verdictCommand) retval = captureStdout(verdictCommand) string_to_parse = str(retval) print string_to_parse self.check_done(string_to_parse) if retval.startswith("Testing changeset"): print "\n" self.bisectRecurse(testcondition=testcondition, args_for_condition=args_for_condition)
def bisectRecurse(self, testcondition=None, args_for_condition=[]): #Recursively build, run, and prompt verdict = "" current_revision = captureStdout(self.hgPrefix+["id","-i"]) if self.remote: print "on current revision "+current_revision print "This would ask for a remote changeset, but it's not implemented yet." #TODO: #Remote bisection! #Step 1. Check if revision is in the archive #Step 2. If revision is not in the archive, set remote=False and continue (it will build and bisect that revision) #if not check_archived: # set remote false and continue #else: #Step 3. If the revision is in the archive, download it and its corresponding tests #STEP3 #1. Extract tests into some directory #2. Extract Nightly.app into "tests" #MozInstaller(src=, dest="", dest_app="Nightly.app") #3. run the following: #test_command = ['python', 'mochitest/runtests.py', '--appname=./Nightly.app/Contents/MacOS/firefox-bin', '--utility-path=bin', '--extra-profile-file=bin/plugins', '--certificate-path=certs', '--autorun', '--close-when-done', '--console-level=INFO', '--test-path=test_name'] #output = captureStdout(test_command, ignoreStderr=True) #set verdict based on output #python mochitest/runtests.py --appname=./Nightly.app/Contents/MacOS/firefox-bin --utility-path=bin --extra-profile-file=bin/plugins --certificate-path=certs --autorun --close-when-done --console-level=INFO --test-path=test_name #example test name: Harness_sanity/test_sanityException.html #Step 4. Run and run test to get verdict #Step 5. Set verdict elif self.tryPusher: try: caller = BuildCaller(host=self.tryhost, port=int(self.tryport), data=current_revision) print "Getting revision "+current_revision+"..." except: print "Failed to connect to trypusher. Make sure your settings are correct and that the trypusher server was started." exit() response = caller.getChangeset() print "Waiting on Mozilla Pulse for revision " + response + "..." url = caller.getURLResponse(response) print "the base is " +url_base(url) #Download it here #1. Download from url, extract to same place as tests #2. Run test or start browser. binary_path = os.path.join(self.binaryDir,url_base(url)) downloaded_binary = download_url(url, dest=str(binary_path)) MozInstaller(src=str(binary_path), dest=str(self.testDir), dest_app="Nightly.app") #now nightly is installed in if sys.platform == "darwin": binary_path = os.path.join(self.testDir,"Nightly.app") runner = FirefoxRunner.create(binary=os.path.join(binary_path,"Contents","MacOS")+"/firefox-bin") elif sys.platform == "linux2": binary_path = os.path.join(self.testDir,"firefox") runner = FirefoxRunner.create(binary=binary_path) elif sys.platform == "win32" or sys.platform == "cygwin": binary_path = os.path.join(self.testDir,"firefox.exe") runner = FirefoxRunner.create(binary=binary_path) else: print "Your platform is not currently supported." quit() dest = runner.start() if not dest: print "Failed to start the downloaded binary" verdict == "skip" runner.wait() if verdict == "skip": pass elif testcondition!=None: #Support condition scripts where arg0 is the directory with the binary and tests args_to_pass = [self.testDir] + args_for_condition if hasattr(testcondition, "init"): testcondition.init(args_to_pass) #TODO: refactor to use directories with revision numbers #8.2.11 - revision number can now be found in current_revision variable tmpdir = tempfile.mkdtemp() verdict = testcondition.interesting(args_to_pass,tmpdir) #Allow user to return true/false or bad/good if verdict != "bad" and verdict != "good": verdict = "bad" if verdict else "good" else: try: self.build() except Exception: print "This build failed!" verdict = "skip" if verdict == "skip": pass elif testcondition==None: #Not using a test, interactive bisect begin! self.run() else: #Using Jesse's idea: import any testing script and run it as the truth condition args_to_pass = [self.objdir] + args_for_condition if hasattr(testcondition, "init"): testcondition.init(args_to_pass) #TODO: refactor to use directories with revision numbers #8.2.11 - revision number can now be found in current_revision variable tmpdir = tempfile.mkdtemp() verdict = testcondition.interesting(args_to_pass,tmpdir) #Allow user to return true/false or bad/good if verdict != "bad" and verdict != "good": verdict = "bad" if verdict else "good" while verdict not in ["good", "bad", "skip"]: verdict = raw_input("Was this commit good or bad? (type 'good', 'bad', or 'skip'): ") if verdict == 'g': verdict = "good" if verdict == 'b': verdict = "bad" if verdict == 's': verdict = "skip" # do hg bisect --good, --bad, or --skip verdictCommand = self.hgPrefix+["bisect","--"+verdict] print " ".join(verdictCommand) retval = captureStdout(verdictCommand) string_to_parse = str(retval) print string_to_parse self.check_done(string_to_parse) if retval.startswith("Testing changeset"): print "\n" self.bisectRecurse(testcondition=testcondition, args_for_condition=args_for_condition)