diff options
Diffstat (limited to 'python/mach/mach/test/test_site.py')
-rw-r--r-- | python/mach/mach/test/test_site.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/python/mach/mach/test/test_site.py b/python/mach/mach/test/test_site.py new file mode 100644 index 0000000000..d7c3d8c489 --- /dev/null +++ b/python/mach/mach/test/test_site.py @@ -0,0 +1,56 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +import os +from unittest import mock + +import pytest +from buildconfig import topsrcdir +from mozunit import main + +from mach.site import ( + PIP_NETWORK_INSTALL_RESTRICTED_VIRTUALENVS, + SitePackagesSource, + resolve_requirements, +) + + +@pytest.mark.parametrize( + "env_native_package_source,env_use_system_python,env_moz_automation,expected", + [ + ("system", False, False, SitePackagesSource.SYSTEM), + ("pip", False, False, SitePackagesSource.VENV), + ("none", False, False, SitePackagesSource.NONE), + (None, False, False, SitePackagesSource.VENV), + (None, False, True, SitePackagesSource.NONE), + (None, True, False, SitePackagesSource.NONE), + (None, True, True, SitePackagesSource.NONE), + ], +) +def test_resolve_package_source( + env_native_package_source, env_use_system_python, env_moz_automation, expected +): + with mock.patch.dict( + os.environ, + { + "MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE": env_native_package_source or "", + "MACH_USE_SYSTEM_PYTHON": "1" if env_use_system_python else "", + "MOZ_AUTOMATION": "1" if env_moz_automation else "", + }, + ): + assert SitePackagesSource.for_mach() == expected + + +def test_all_restricted_sites_dont_have_pypi_requirements(): + for site_name in PIP_NETWORK_INSTALL_RESTRICTED_VIRTUALENVS: + requirements = resolve_requirements(topsrcdir, site_name) + assert not requirements.pypi_requirements, ( + 'Sites that must be able to operate without "pip install" must not have any ' + f'mandatory "pypi requirements". However, the "{site_name}" site depends on: ' + f"{requirements.pypi_requirements}" + ) + + +if __name__ == "__main__": + main() |