diff options
author | jbudorick <jbudorick@chromium.org> | 2015-12-08 01:07:04 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-12-08 09:08:06 +0000 |
commit | 771d799f0bc3e716974b218c0a133de976ccd4ad (patch) | |
tree | 13a0741783ac017166d6c4f122a59f5d9bd3e4ce | |
parent | 2ba5beda4e65f55e93502a2cb321787f774c1d8c (diff) | |
download | chromium_src-771d799f0bc3e716974b218c0a133de976ccd4ad.zip chromium_src-771d799f0bc3e716974b218c0a133de976ccd4ad.tar.gz chromium_src-771d799f0bc3e716974b218c0a133de976ccd4ad.tar.bz2 |
[Android] Fix environment variable handling in devil_env.
BUG=
Review URL: https://codereview.chromium.org/1509493003
Cr-Commit-Position: refs/heads/master@{#363768}
-rw-r--r-- | build/android/PRESUBMIT.py | 1 | ||||
-rwxr-xr-x | build/android/adb_command_line.py | 3 | ||||
-rw-r--r-- | build/android/devil/devil_env.py | 41 | ||||
-rwxr-xr-x | build/android/devil/devil_env_test.py | 62 |
4 files changed, 90 insertions, 17 deletions
diff --git a/build/android/PRESUBMIT.py b/build/android/PRESUBMIT.py index 38b2f01..ad8ca1f 100644 --- a/build/android/PRESUBMIT.py +++ b/build/android/PRESUBMIT.py @@ -70,6 +70,7 @@ def CommonChecks(input_api, output_api): input_api, output_api, unit_tests=[ + J('devil', 'devil_env_test.py'), J('devil', 'android', 'battery_utils_test.py'), J('devil', 'android', 'device_utils_test.py'), J('devil', 'android', 'fastboot_utils_test.py'), diff --git a/build/android/adb_command_line.py b/build/android/adb_command_line.py index fa3a82b..ee2c4f9 100755 --- a/build/android/adb_command_line.py +++ b/build/android/adb_command_line.py @@ -8,6 +8,7 @@ import argparse import sys +import devil_chromium from devil.android import device_utils from devil.android import device_errors from devil.utils import cmd_helper @@ -28,6 +29,8 @@ Otherwise: Writes command-line file. help='Remote path to flags file.') args, remote_args = parser.parse_known_args() + devil_chromium.Initialize() + as_root = not args.device_path.startswith('/data/local/tmp/') if args.device: diff --git a/build/android/devil/devil_env.py b/build/android/devil/devil_env.py index f477b47..8249e53 100644 --- a/build/android/devil/devil_env.py +++ b/build/android/devil/devil_env.py @@ -47,18 +47,21 @@ _LEGACY_ENVIRONMENT_VARIABLES = { def _GetEnvironmentVariableConfig(): - env_var_config = {} - for k, v in _LEGACY_ENVIRONMENT_VARIABLES.iteritems(): - path = os.environ.get(k) - if path: - env_var_config[v['dependency_name']] = { + path_config = ( + (os.environ.get(k), v) + for k, v in _LEGACY_ENVIRONMENT_VARIABLES.iteritems()) + return { + 'config_type': 'BaseConfig', + 'dependencies': { + c['dependency_name']: { 'file_info': { - v['platform']: { - 'local_paths': [path] - } - } - } - return env_var_config + c['platform']: { + 'local_paths': [p], + }, + }, + } for p, c in path_config if p + }, + } class _Environment(object): @@ -100,12 +103,16 @@ class _Environment(object): # TODO(jbudorick): Remove this recursion if/when dependency_manager # supports loading configurations directly from a dict. if configs: - with tempfile.NamedTemporaryFile() as next_config_file: - next_config_file.write(json.dumps(configs[0])) - next_config_file.flush() - self._InitializeRecursive( - configs=configs[1:], - config_files=[next_config_file.name] + (config_files or [])) + with tempfile.NamedTemporaryFile(delete=False) as next_config_file: + try: + next_config_file.write(json.dumps(configs[0])) + next_config_file.close() + self._InitializeRecursive( + configs=configs[1:], + config_files=[next_config_file.name] + (config_files or [])) + finally: + if os.path.exists(next_config_file.name): + os.remove(next_config_file.name) else: config_files = config_files or [] if 'DEVIL_ENV_CONFIG' in os.environ: diff --git a/build/android/devil/devil_env_test.py b/build/android/devil/devil_env_test.py new file mode 100755 index 0000000..5bfef66 --- /dev/null +++ b/build/android/devil/devil_env_test.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +# Copyright 2015 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# pylint: disable=protected-access + +import logging +import sys +import unittest + +from devil import devil_env + +_sys_path_before = list(sys.path) +with devil_env.SysPath(devil_env.config.LocalPath('pymock')): + _sys_path_with_pymock = list(sys.path) + import mock # pylint: disable=import-error +_sys_path_after = list(sys.path) + +class DevilEnvTest(unittest.TestCase): + + def testSysPath(self): + self.assertEquals(_sys_path_before, _sys_path_after) + self.assertEquals( + _sys_path_before + [devil_env.config.LocalPath('pymock')], + _sys_path_with_pymock) + + def testGetEnvironmentVariableConfig_configType(self): + with mock.patch('os.environ.get', + mock.Mock(side_effect=lambda _env_var: None)): + env_config = devil_env._GetEnvironmentVariableConfig() + self.assertEquals('BaseConfig', env_config.get('config_type')) + + def testGetEnvironmentVariableConfig_noEnv(self): + with mock.patch('os.environ.get', + mock.Mock(side_effect=lambda _env_var: None)): + env_config = devil_env._GetEnvironmentVariableConfig() + self.assertEquals({}, env_config.get('dependencies')) + + def testGetEnvironmentVariableConfig_adbPath(self): + def mock_environment(env_var): + return '/my/fake/adb/path' if env_var == 'ADB_PATH' else None + + with mock.patch('os.environ.get', + mock.Mock(side_effect=mock_environment)): + env_config = devil_env._GetEnvironmentVariableConfig() + self.assertEquals( + { + 'adb': { + 'file_info': { + 'android_linux2': { + 'local_paths': ['/my/fake/adb/path'], + }, + }, + }, + }, + env_config.get('dependencies')) + + +if __name__ == '__main__': + logging.getLogger().setLevel(logging.DEBUG) + unittest.main(verbosity=2) |