tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_binary.py (4924B)


      1 #!/usr/bin/env python
      2 
      3 # This Source Code Form is subject to the terms of the Mozilla Public
      4 # License, v. 2.0. If a copy of the MPL was not distributed with this file,
      5 # You can obtain one at http://mozilla.org/MPL/2.0/.
      6 
      7 import os
      8 import shutil
      9 import sys
     10 
     11 import mozunit
     12 import pytest
     13 from moztest.selftest.fixtures import binary_fixture  # noqa: F401
     14 from mozversion import errors, get_version
     15 
     16 """test getting application version information from a binary path"""
     17 
     18 
     19 @pytest.fixture()
     20 def fake_binary(tmpdir):
     21    binary = tmpdir.join("binary")
     22    binary.write("foobar")
     23    return str(binary)
     24 
     25 
     26 @pytest.fixture(name="application_ini")
     27 def fixture_application_ini(tmpdir):
     28    ini = tmpdir.join("application.ini")
     29    ini.write(
     30        """[App]
     31 ID = AppID
     32 Name = AppName
     33 CodeName = AppCodeName
     34 Version = AppVersion
     35 BuildID = AppBuildID
     36 SourceRepository = AppSourceRepo
     37 SourceStamp = AppSourceStamp
     38 Vendor = AppVendor"""
     39    )
     40    return str(ini)
     41 
     42 
     43 @pytest.fixture(name="platform_ini")
     44 def fixture_platform_ini(tmpdir):
     45    ini = tmpdir.join("platform.ini")
     46    ini.write(
     47        """[Build]
     48 BuildID = PlatformBuildID
     49 Milestone = PlatformMilestone
     50 SourceStamp = PlatformSourceStamp
     51 SourceRepository = PlatformSourceRepo"""
     52    )
     53    return str(ini)
     54 
     55 
     56 def test_real_binary(binary):  # noqa: F811
     57    if not binary:
     58        pytest.skip("No binary found")
     59    v = get_version(binary)
     60    assert isinstance(v, dict)
     61 
     62 
     63 def test_binary(fake_binary, application_ini, platform_ini):
     64    _check_version(get_version(fake_binary))
     65 
     66 
     67 @pytest.mark.skipif(
     68    not hasattr(os, "symlink"), reason="os.symlink not supported on this platform"
     69 )
     70 def test_symlinked_binary(fake_binary, application_ini, platform_ini, tmpdir):
     71    # create a symlink of the binary in another directory and check
     72    # version against this symlink
     73    symlink = str(tmpdir.join("symlink"))
     74    os.symlink(fake_binary, symlink)
     75    _check_version(get_version(symlink))
     76 
     77 
     78 def test_binary_in_current_path(fake_binary, application_ini, platform_ini, tmpdir):
     79    os.chdir(str(tmpdir))
     80    _check_version(get_version())
     81 
     82 
     83 def test_with_ini_files_on_osx(
     84    fake_binary, application_ini, platform_ini, monkeypatch, tmpdir
     85 ):
     86    monkeypatch.setattr(sys, "platform", "darwin")
     87    # get_version is working with ini files next to the binary
     88    _check_version(get_version(binary=fake_binary))
     89 
     90    # or if they are in the Resources dir
     91    # in this case the binary must be in a Contents dir, next
     92    # to the Resources dir
     93    contents_dir = tmpdir.mkdir("Contents")
     94    moved_binary = str(contents_dir.join(os.path.basename(fake_binary)))
     95    shutil.move(fake_binary, moved_binary)
     96 
     97    resources_dir = str(tmpdir.mkdir("Resources"))
     98    shutil.move(application_ini, resources_dir)
     99    shutil.move(platform_ini, resources_dir)
    100 
    101    _check_version(get_version(binary=moved_binary))
    102 
    103 
    104 def test_invalid_binary_path(tmpdir):
    105    with pytest.raises(IOError):
    106        get_version(str(tmpdir.join("invalid")))
    107 
    108 
    109 def test_without_ini_files(fake_binary):
    110    """With missing ini files an exception should be thrown"""
    111    with pytest.raises(errors.AppNotFoundError):
    112        get_version(fake_binary)
    113 
    114 
    115 def test_without_platform_ini_file(fake_binary, application_ini):
    116    """With a missing platform.ini file an exception should be thrown"""
    117    with pytest.raises(errors.AppNotFoundError):
    118        get_version(fake_binary)
    119 
    120 
    121 def test_without_application_ini_file(fake_binary, platform_ini):
    122    """With a missing application.ini file an exception should be thrown"""
    123    with pytest.raises(errors.AppNotFoundError):
    124        get_version(fake_binary)
    125 
    126 
    127 def test_with_exe(application_ini, platform_ini, tmpdir):
    128    """Test that we can resolve .exe files"""
    129    binary = tmpdir.join("binary.exe")
    130    binary.write("foobar")
    131    _check_version(get_version(os.path.splitext(str(binary))[0]))
    132 
    133 
    134 def test_not_found_with_binary_specified(fake_binary):
    135    with pytest.raises(errors.LocalAppNotFoundError):
    136        get_version(fake_binary)
    137 
    138 
    139 def _check_version(version):
    140    assert version.get("application_id") == "AppID"
    141    assert version.get("application_name") == "AppName"
    142    assert version.get("application_display_name") == "AppCodeName"
    143    assert version.get("application_version") == "AppVersion"
    144    assert version.get("application_buildid") == "AppBuildID"
    145    assert version.get("application_repository") == "AppSourceRepo"
    146    assert version.get("application_changeset") == "AppSourceStamp"
    147    assert version.get("application_vendor") == "AppVendor"
    148    assert version.get("platform_name") is None
    149    assert version.get("platform_buildid") == "PlatformBuildID"
    150    assert version.get("platform_repository") == "PlatformSourceRepo"
    151    assert version.get("platform_changeset") == "PlatformSourceStamp"
    152    assert version.get("invalid_key") is None
    153    assert version.get("platform_version") == "PlatformMilestone"
    154 
    155 
    156 if __name__ == "__main__":
    157    mozunit.main()