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"
Ejemplo n.º 2
0
def test_firefox_download_dummy():
    """Downloading firefox instance for tests"""
    global test_app, test_archive
    # Get ourselves a Firefox app for the local platform.
    fdl = fd.FirefoxDownloader(tmp_dir)
    test_archive = fdl.download("nightly", use_cache=True)
    test_app = fe.extract(test_archive, tmp_dir)
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 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 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 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 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 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 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 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 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"))
Ejemplo n.º 16
0
    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