def startTestRunner(runner_class, options, tests): install_folder = None try: # Prepare the workspace path so that all temporary data can be stored inside it. if options.workspace_path: path = os.path.expanduser(options.workspace_path) options.workspace = os.path.abspath(path) if not os.path.exists(options.workspace): os.makedirs(options.workspace) else: options.workspace = tempfile.mkdtemp(".{}".format(os.path.basename(sys.argv[0]))) options.logger.info('Using workspace for temporary data: "{}"'.format(options.workspace)) # If the specified binary is an installer it needs to be installed if options.installer: installer = os.path.realpath(options.installer) dest_folder = os.path.join(options.workspace, "binary") options.logger.info('Installing application "%s" to "%s"' % (installer, dest_folder)) install_folder = mozinstall.install(installer, dest_folder) options.binary = mozinstall.get_binary(install_folder, "firefox") runner = runner_class(**vars(options)) runner.run_tests(tests) finally: # Ensure to uninstall the binary if it has been installed before if install_folder and os.path.exists(install_folder): options.logger.info('Uninstalling application at "%s"' % install_folder) mozinstall.uninstall(install_folder) return runner
def install(self, dest=None, channel="nightly"): """Install Firefox.""" branch = { "nightly": "mozilla-central", "beta": "mozilla-beta", "stable": "mozilla-stable" } scraper = { "nightly": "daily", "beta": "release", "stable": "release" } version = { "stable": "latest", "beta": "latest-beta", "nightly": "latest" } if channel not in branch: raise ValueError("Unrecognised release channel: %s" % channel) from mozdownload import FactoryScraper import mozinstall platform = { "Linux": "linux", "Windows": "win", "Darwin": "mac" }.get(uname[0]) if platform is None: raise ValueError("Unable to construct a valid Firefox package name for current platform") if dest is None: # os.getcwd() doesn't include the venv path dest = os.path.join(os.getcwd(), "_venv") dest = os.path.join(dest, "browsers", channel) filename = FactoryScraper(scraper[channel], branch=branch[channel], version=version[channel], destination=dest).download() try: mozinstall.install(filename, dest) except mozinstall.mozinstall.InstallError: if platform == "mac" and os.path.exists(os.path.join(dest, "Firefox Nightly.app")): # mozinstall will fail if nightly is already installed in the venv because # mac installation uses shutil.copy_tree mozinstall.uninstall(os.path.join(dest, "Firefox Nightly.app")) mozinstall.install(filename, dest) else: raise os.remove(filename) return self.find_binary_path(dest)
def test_uninstall(self): """ Test mozinstall's uninstall capabilites """ # Uninstall after installing if mozinfo.isLinux: installdir = mozinstall.install(self.bz2, self.tempdir) mozinstall.uninstall(installdir) self.assertFalse(os.path.exists(installdir)) elif mozinfo.isWin: # Exe installer for Windows installdir_exe = mozinstall.install(self.exe, os.path.join(self.tempdir, 'exe')) mozinstall.uninstall(installdir_exe) self.assertFalse(os.path.exists(installdir_exe)) # Zip installer for Windows installdir_zip = mozinstall.install(self.zipfile, os.path.join(self.tempdir, 'zip')) mozinstall.uninstall(installdir_zip) self.assertFalse(os.path.exists(installdir_zip)) elif mozinfo.isMac: installdir = mozinstall.install(self.dmg, self.tempdir) mozinstall.uninstall(installdir) self.assertFalse(os.path.exists(installdir))
def cleanup(self): exception = None try: # Remove the account subprocess.check_call(['fxa-client', '-e', self.username, '-p', self.password, 'destroy']) except Exception as e: print "Failed to remove the Firefox account %s, " \ "please remove it manually" % self.username exception = e try: import mozinstall mozinstall.uninstall(self.build_path) except Exception as e: print "Failed to remove the Firefox build, " \ "please remove it manually" exception = e if exception: sys.exit(exception)
def install(self, dest=None): """Install Firefox.""" from mozdownload import FactoryScraper import mozinstall platform = { "Linux": "linux", "Windows": "win", "Darwin": "mac" }.get(uname[0]) if platform is None: raise ValueError("Unable to construct a valid Firefox package name for current platform") if dest is None: # os.getcwd() doesn't include the venv path dest = os.path.join(os.getcwd(), "_venv") dest = os.path.join(dest, "browsers") filename = FactoryScraper("daily", branch="mozilla-central", destination=dest).download() try: mozinstall.install(filename, dest) except mozinstall.mozinstall.InstallError as e: if platform == "mac" and os.path.exists(os.path.join(dest, "Firefox Nightly.app")): # mozinstall will fail if nightly is already installed in the venv because # mac installation uses shutil.copy_tree mozinstall.uninstall(os.path.join(dest, "Firefox Nightly.app")) mozinstall.install(filename, dest) else: raise os.remove(filename) return self.find_binary_path(dest)
def startTestRunner(runner_class, options, tests): install_folder = None try: # If the specified binary is an installer it needs to be installed if options.installer: installer = os.path.realpath(options.installer) dest_folder = tempfile.mkdtemp() options.logger.info('Installing application "%s" to "%s"' % (installer, dest_folder)) install_folder = mozinstall.install(installer, dest_folder) options.binary = mozinstall.get_binary(install_folder, 'firefox') runner = runner_class(**vars(options)) runner.run_tests(tests) finally: # Ensure to uninstall the binary if it has been installed before if install_folder and os.path.exists(install_folder): options.logger.info('Uninstalling application at "%s"' % install_folder) mozinstall.uninstall(install_folder) return runner
path = os.path.join(self.workspace, 'screenshots') if not os.path.isdir(path): os.makedirs(path) self.persisted["screenshotPath"] = path self.run_tests() except Exception, e: self.exception_type, self.exception, self.tb = sys.exc_info() finally: # Remove the build when it has been installed before if application.is_installer(self.binary, self.options.application): print "*** Uninstalling build: %s" % self._folder mozinstall.uninstall(self._folder) self.remove_downloaded_addons() # Remove the temporarily cloned repository print "*** Removing test repository '%s'" % self.repository.path self.repository.remove() # If an exception has been thrown, print it here and exit with status 3. # Giving that we save reports with failing tests, this one has priority if self.exception_type: traceback.print_exception(self.exception_type, self.exception, self.tb) raise errors.TestrunAbortedException(self) # If a test has been failed ensure that we exit with status 2 if self.last_failed_tests:
def install(self, dest=None, channel="nightly"): """Install Firefox.""" import mozinstall product = { "nightly": "firefox-nightly-latest-ssl", "beta": "firefox-beta-latest-ssl", "stable": "firefox-latest-ssl" } os_builds = { ("linux", "x86"): "linux", ("linux", "x86_64"): "linux64", ("win", "x86"): "win", ("win", "x86_64"): "win64", ("macos", "x86_64"): "osx", } os_key = (self.platform, uname[4]) if channel not in product: raise ValueError("Unrecognised release channel: %s" % channel) if os_key not in os_builds: raise ValueError("Unsupported platform: %s %s" % os_key) if dest is None: # os.getcwd() doesn't include the venv path dest = os.path.join(os.getcwd(), "_venv") dest = os.path.join(dest, "browsers", channel) if not os.path.exists(dest): os.makedirs(dest) url = "https://download.mozilla.org/?product=%s&os=%s&lang=en-US" % (product[channel], os_builds[os_key]) self.logger.info("Downloading Firefox from %s" % url) resp = requests.get(url) filename = None content_disposition = resp.headers.get('content-disposition') if content_disposition: filenames = re.findall("filename=(.+)", content_disposition) if filenames: filename = filenames[0] if not filename: filename = urlparse.urlsplit(resp.url).path.rsplit("/", 1)[1] if not filename: filename = "firefox.tar.bz2" installer_path = os.path.join(dest, filename) with open(installer_path, "w") as f: f.write(resp.content) try: mozinstall.install(installer_path, dest) except mozinstall.mozinstall.InstallError: if self.platform == "macos" and os.path.exists(os.path.join(dest, self.application_name.get(channel, "Firefox Nightly.app"))): # mozinstall will fail if nightly is already installed in the venv because # mac installation uses shutil.copy_tree mozinstall.uninstall(os.path.join(dest, self.application_name.get(channel, "Firefox Nightly.app"))) mozinstall.install(filename, dest) else: raise os.remove(installer_path) return self.find_binary_path(dest)
def install(self, dest=None, channel="nightly"): """Install Firefox.""" import mozinstall product = { "nightly": "firefox-nightly-latest-ssl", "beta": "firefox-beta-latest-ssl", "stable": "firefox-beta-latest-ssl" } os_builds = { ("linux", "x86"): "linux", ("linux", "x86_64"): "linux64", ("win", "x86"): "win", ("win", "x86_64"): "win64", ("macos", "x86_64"): "osx", } os_key = (self.platform, uname[4]) if channel not in product: raise ValueError("Unrecognised release channel: %s" % channel) if os_key not in os_builds: raise ValueError("Unsupported platform: %s %s" % os_key) if dest is None: # os.getcwd() doesn't include the venv path dest = os.path.join(os.getcwd(), "_venv") dest = os.path.join(dest, "browsers", channel) if not os.path.exists(dest): os.makedirs(dest) url = "https://download.mozilla.org/?product=%s&os=%s&lang=en-US" % (product[channel], os_builds[os_key]) self.logger.info("Downloading Firefox from %s" % url) resp = requests.get(url) filename = None content_disposition = resp.headers.get('content-disposition') if content_disposition: filenames = re.findall("filename=(.+)", content_disposition) if filenames: filename = filenames[0] if not filename: filename = urlparse.urlsplit(resp.url).path.rsplit("/", 1)[1] if not filename: filename = "firefox.tar.bz2" installer_path = os.path.join(dest, filename) with open(installer_path, "w") as f: f.write(resp.content) try: mozinstall.install(installer_path, dest) except mozinstall.mozinstall.InstallError: if self.platform == "macos" and os.path.exists(os.path.join(dest, self.application_name.get(channel, "Firefox Nightly.app"))): # mozinstall will fail if nightly is already installed in the venv because # mac installation uses shutil.copy_tree mozinstall.uninstall(os.path.join(dest, self.application_name.get(channel, "Firefox Nightly.app"))) mozinstall.install(filename, dest) else: raise os.remove(installer_path) return self.find_binary_path(dest)
def install(self, dest=None, channel="nightly"): """Install Firefox.""" branch = { "nightly": "mozilla-central", "beta": "mozilla-beta", "stable": "mozilla-stable" } scraper = {"nightly": "daily", "beta": "release", "stable": "release"} version = { "stable": "latest", "beta": "latest-beta", "nightly": "latest" } if channel not in branch: raise ValueError("Unrecognised release channel: %s" % channel) from mozdownload import FactoryScraper import mozinstall if self.platform is None: raise ValueError( "Unable to construct a valid Firefox package name for current platform" ) if dest is None: # os.getcwd() doesn't include the venv path dest = os.path.join(os.getcwd(), "_venv") dest = os.path.join(dest, "browsers", channel) scraper = FactoryScraper(scraper[channel], branch=branch[channel], version=version[channel], destination=dest) self.logger.info("Downloading Firefox from %s" % scraper.url) filename = scraper.download() try: mozinstall.install(filename, dest) except mozinstall.mozinstall.InstallError: if self.platform == "macos" and os.path.exists( os.path.join( dest, self.application_name.get(channel, "Firefox Nightly.app"))): # mozinstall will fail if nightly is already installed in the venv because # mac installation uses shutil.copy_tree mozinstall.uninstall( os.path.join( dest, self.application_name.get(channel, "Firefox Nightly.app"))) mozinstall.install(filename, dest) else: raise os.remove(filename) return self.find_binary_path(dest)