#!/usr/bin/env vpython3 # Copyright 2024 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """File for testing test_env_setup.py.""" import os import subprocess import time import unittest from compatible_utils import running_unattended # TODO(crbug.com/352409265): Try to run the following tests on trybot. # Test names should be self-explained, no point of adding function docstring. # pylint: disable=missing-function-docstring class TestEnvSetupTests(unittest.TestCase): """Test class.""" @staticmethod def _merge_env(env: dict, env2: dict) -> dict: if env and env2: return {**env, **env2} # Always copy to avoid changing os.environ. if env: return {**env} if env2: return {**env2} return {} def _start_test_env(self, env: dict = None) -> subprocess.Popen: proc = subprocess.Popen([ os.path.join(os.path.dirname(__file__), 'test_env_setup.py'), '--logs-dir', '/tmp/test_env_setup' ], env=TestEnvSetupTests._merge_env( os.environ, env)) while not os.path.isfile('/tmp/test_env_setup/test_env_setup.' + str(proc.pid) + '.pid'): proc.poll() self.assertIsNone(proc.returncode) time.sleep(1) return proc def _run_without_packages(self, env: dict = None): proc = self._start_test_env(env) proc.terminate() proc.wait() def test_run_without_packages(self): if running_unattended(): # The test needs sdk and images to run and it's not designed to work # on platforms other than linux. return self._run_without_packages() def test_run_without_packages_unattended(self): if running_unattended(): return # Do not impact the environment of the current process. self._run_without_packages({'CHROME_HEADLESS': '1'}) def _run_with_base_tests(self, env: dict = None): env = TestEnvSetupTests._merge_env( {'FFX_ISOLATE_DIR': '/tmp/test_env_setup/daemon'}, env) proc = self._start_test_env(env) try: subprocess.run([ os.path.join(os.path.dirname(__file__), '../../out/fuchsia/bin/run_base_unittests'), '--logs-dir', '/tmp/test_env_setup', '--device' ], env=TestEnvSetupTests._merge_env(os.environ, env), check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) finally: proc.terminate() proc.wait() def test_run_with_base_tests(self): if running_unattended(): return self._run_with_base_tests() def test_run_with_base_tests_unattended(self): if running_unattended(): return self._run_with_base_tests({'CHROME_HEADLESS': '1'}) if __name__ == '__main__': unittest.main()