def test_win_extractor(tmpdir): """Extractor can extract a Windows Nightly archive""" test_archive = pkgr.resource_filename(__name__, "files/firefox-nightly_win-dummy.exe") assert os.path.isfile(test_archive) app = fe.extract(test_archive, tmpdir) assert type(app) is fa.FirefoxApp, "return value is correct" assert os.path.isdir(app.app_dir), "app dir is extracted" assert os.path.isfile(app.app_ini), "app ini is extracted" assert os.path.isdir(app.browser), "browser dir is extracted" assert os.path.isfile(app.exe), "exe file is extracted" assert app.exe.startswith(str(tmpdir)), "archive is extracted to specified directory" assert app.platform == "win32", "platform is detected correctly" assert app.release == "Nightly", "release branch is detected correctly" assert app.version == "55.0a1", "version is detected correctly"
def test_osx_extractor(tmpdir): """Extractor can extract a OS X Nightly archive""" sz_out = subprocess.check_output("7z") assert sz_out is not None sz_version = float(sz_out.splitlines()[1].split()[2]) if sz_version < 16: pytest.skip("7-zip version 16+ required to extract DMG images") test_archive = pkgr.resource_filename(__name__, "files/firefox-nightly_osx-dummy.dmg") assert os.path.isfile(test_archive) app = fe.extract(test_archive, tmpdir) assert type(app) is fa.FirefoxApp, "return value is correct" assert os.path.isdir(app.app_dir), "app dir is extracted" assert os.path.isfile(app.app_ini), "app ini is extracted" assert os.path.isdir(app.browser), "browser dir is extracted" assert os.path.isfile(app.exe), "exe file is extracted" assert app.exe.startswith(str(tmpdir)), "archive is extracted to specified directory" assert app.platform == "osx", "platform is detected correctly" assert app.release == "Nightly", "release branch is detected correctly" assert app.version == "53.0a1", "version is detected correctly"
def get_test_candidate(self, build): """ Download and extract a build candidate. build may either refer to a Firefox release identifier, package, or build directory. :param build: str with firefox build :return: two FirefoxApp objects for test and base candidate """ global logger platform = fd.FirefoxDownloader.detect_platform() if platform is None: logger.error("Unsupported platform: `%s`" % sys.platform) sys.exit(5) # `build` may refer to a build reference as defined in FirefoxDownloader, # a local Firefox package as produced by `mach build`, or a local build tree. if build in fd.FirefoxDownloader.build_urls: # Download test candidate by Firefox release ID logger.info("Downloading Firefox `%s` build for platform `%s`" % (build, platform)) fdl = fd.FirefoxDownloader(self.args.workdir, cache_timeout=1 * 60 * 60) build_archive_file = fdl.download(build, platform) if build_archive_file is None: sys.exit(-1) # Extract candidate archive candidate_app = fe.extract(build_archive_file, self.args.workdir, cache_timeout=1 * 60 * 60) candidate_app.package_origin = fdl.get_download_url(build, platform) elif os.path.isfile(build): # Extract firefox build from archive logger.info("Using file `%s` as Firefox package" % build) candidate_app = fe.extract(build, self.args.workdir, cache_timeout=1 * 60 * 60) candidate_app.package_origin = build logger.debug("Build candidate executable is `%s`" % candidate_app.exe) elif os.path.isfile(os.path.join(build, "mach")): logger.info("Using Firefox build tree at `%s`" % build) dist_globs = sorted(glob.glob(os.path.join(build, "obj-*", "dist"))) if len(dist_globs) == 0: logger.critical("`%s` looks like a Firefox build directory, but can't find a build in it" % build) sys.exit(5) logger.debug("Potential globs for dist directory: %s" % dist_globs) dist_dir = dist_globs[-1] logger.info("Using `%s` as build distribution directory" % dist_dir) if "apple-darwin" in dist_dir.split("/")[-2]: # There is a special case for OS X dist directories: # FirefoxApp expects OS X .dmg packages to contain the .app folder inside # another directory. However, that directory isn't there in build trees, # thus we need to point to the parent for constructing the app. logger.info("Looks like this is an OS X build tree") candidate_app = fa.FirefoxApp(os.path.abspath(os.path.dirname(dist_dir))) candidate_app.package_origin = os.path.abspath(build) else: candidate_app = fa.FirefoxApp(os.path.abspath(dist_dir)) candidate_app.package_origin = os.path.abspath(build) else: logger.critical("`%s` specifies neither a Firefox release, package file, or build directory" % build) logger.critical("Valid Firefox release identifiers are: %s" % ", ".join(fd.FirefoxDownloader.list()[0])) sys.exit(5) logger.debug("Build candidate executable is `%s`" % candidate_app.exe) if candidate_app.platform != platform: logger.warning("Platform mismatch detected") logger.critical("Running a Firefox binary for `%s` on a `%s` platform will probably fail" % (candidate_app.platform, platform)) return candidate_app
def esr_linux_app(tmpdir_factory, esr_linux_archive): """A Firefox ESR app for Linux fixture""" return fe.extract(esr_linux_archive, tmpdir_factory.mktemp("esr_linux_app"))
def beta_linux_app(tmpdir_factory, beta_linux_archive): """A Firefox Beta app for Linux fixture""" return fe.extract(beta_linux_archive, tmpdir_factory.mktemp("beta_linux_app"))
def release_linux_app(tmpdir_factory, release_linux_archive): """A Firefox Release app for Linux fixture""" return fe.extract(release_linux_archive, tmpdir_factory.mktemp("release_linux_app"))
def esr_osx_app(tmpdir_factory, esr_osx_archive): """A Firefox ESR app for Mac OS X fixture""" __check_7z_version() return fe.extract(esr_osx_archive, tmpdir_factory.mktemp("esr_osx_app"))
def nightly_linux_app(tmpdir_factory, nightly_linux_archive): """A Firefox Nightly app for Linux fixture""" return fe.extract(nightly_linux_archive, tmpdir_factory.mktemp("nightly_linux_app"))
def beta_osx_app(tmpdir_factory, beta_osx_archive): """A Firefox Beta app for Mac OS X fixture""" __check_7z_version() return fe.extract(beta_osx_archive, tmpdir_factory.mktemp("beta_osx_app"))
def release_osx_app(tmpdir_factory, release_osx_archive): """A Firefox Release app for Mac OS X fixture""" __check_7z_version() return fe.extract(release_osx_archive, tmpdir_factory.mktemp("release_osx_app"))
def nightly_osx_app(tmpdir_factory, nightly_osx_archive): """A Firefox Nightly app for Mac OS X fixture""" __check_7z_version() return fe.extract(nightly_osx_archive, tmpdir_factory.mktemp("nightly_osx_app"))
def esr_win_app(tmpdir_factory, esr_win_archive): """A Firefox ESR app for Windows fixture""" return fe.extract(esr_win_archive, tmpdir_factory.mktemp("esr_win_app"))
def release_win_app(tmpdir_factory, release_win_archive): """A Firefox Release app for Windows fixture""" return fe.extract(release_win_archive, tmpdir_factory.mktemp("release_win_app"))
def beta_win_app(tmpdir_factory, beta_win_archive): """A Firefox Beta app for Windows fixture""" return fe.extract(beta_win_archive, tmpdir_factory.mktemp("beta_win_app"))
def nightly_win_app(tmpdir_factory, nightly_win_archive): """A Firefox Nightly app for Windows fixture""" return fe.extract(nightly_win_archive, tmpdir_factory.mktemp("nightly_win_app"))