You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
4.2 KiB
Python
124 lines
4.2 KiB
Python
#!/usr/bin/env vpython3
|
|
# Copyright 2022 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.
|
|
|
|
import logging
|
|
import os
|
|
import shutil
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
from unittest import mock
|
|
|
|
DEPOT_TOOLS_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
sys.path.insert(0, DEPOT_TOOLS_ROOT)
|
|
|
|
from testing_support import coverage_utils
|
|
import utils
|
|
|
|
|
|
class GitCacheTest(unittest.TestCase):
|
|
def setUp(self):
|
|
pass
|
|
|
|
@mock.patch('subprocess.check_output', lambda x, **kwargs: b'foo')
|
|
def testVersionWithGit(self):
|
|
version = utils.depot_tools_version()
|
|
self.assertEqual(version, 'git-foo')
|
|
|
|
@mock.patch('subprocess.check_output')
|
|
@mock.patch('os.path.getmtime', lambda x: 42)
|
|
def testVersionWithNoGit(self, mock_subprocess):
|
|
mock_subprocess.side_effect = Exception
|
|
version = utils.depot_tools_version()
|
|
self.assertEqual(version, 'recipes.cfg-42')
|
|
|
|
@mock.patch('subprocess.check_output')
|
|
@mock.patch('os.path.getmtime')
|
|
def testVersionWithNoGit(self, mock_subprocess, mock_getmtime):
|
|
mock_subprocess.side_effect = Exception
|
|
mock_getmtime.side_effect = Exception
|
|
version = utils.depot_tools_version()
|
|
self.assertEqual(version, 'unknown')
|
|
|
|
|
|
class ConfigDirTest(unittest.TestCase):
|
|
|
|
@mock.patch('sys.platform', 'win')
|
|
def testWin(self):
|
|
self.assertEqual(DEPOT_TOOLS_ROOT, utils.depot_tools_config_dir())
|
|
|
|
@mock.patch('sys.platform', 'darwin')
|
|
def testMac(self):
|
|
self.assertEqual(DEPOT_TOOLS_ROOT, utils.depot_tools_config_dir())
|
|
|
|
@mock.patch('sys.platform', 'foo')
|
|
def testOther(self):
|
|
self.assertEqual(DEPOT_TOOLS_ROOT, utils.depot_tools_config_dir())
|
|
|
|
@mock.patch('sys.platform', 'linux')
|
|
@mock.patch.dict('os.environ', {})
|
|
def testLinuxDefault(self):
|
|
self.assertEqual(
|
|
os.path.join(os.path.expanduser('~/.config'), 'depot_tools'),
|
|
utils.depot_tools_config_dir())
|
|
|
|
@mock.patch('sys.platform', 'linux')
|
|
@mock.patch.dict('os.environ', {'XDG_CONFIG_HOME': '/my/home'})
|
|
def testLinuxCustom(self):
|
|
self.assertEqual(os.path.join('/my/home', 'depot_tools'),
|
|
utils.depot_tools_config_dir())
|
|
|
|
|
|
class ConfigPathTest(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.temp_dir = tempfile.mkdtemp(prefix='utils_test')
|
|
self.config_dir = os.path.join(self.temp_dir, 'test_files')
|
|
|
|
self.isfile = mock.Mock()
|
|
self.move = mock.Mock()
|
|
|
|
mock.patch('os.path.isfile', self.isfile).start()
|
|
mock.patch('shutil.move', self.move).start()
|
|
mock.patch('utils.depot_tools_config_dir',
|
|
lambda: self.config_dir).start()
|
|
|
|
self.addCleanup(mock.patch.stopall)
|
|
self.addCleanup(shutil.rmtree, self.temp_dir)
|
|
|
|
def testCreatesConfigDir(self):
|
|
# Ensure "legacy path" doesn't exist so that nothing gets moved.
|
|
def EnsureLegacyPathNotExists(path):
|
|
return path != os.path.join(DEPOT_TOOLS_ROOT, 'metrics.cfg')
|
|
|
|
self.isfile.side_effect = EnsureLegacyPathNotExists
|
|
|
|
self.assertEqual(os.path.join(self.config_dir, 'metrics.cfg'),
|
|
utils.depot_tools_config_path('metrics.cfg'))
|
|
self.assertTrue(os.path.exists(self.config_dir))
|
|
self.move.assert_not_called()
|
|
|
|
def testMovesLegacy(self):
|
|
# Ensure "legacy path" exists so that it gets moved.
|
|
def EnsureLegacyPathExists(path):
|
|
return path == os.path.join(DEPOT_TOOLS_ROOT, 'metrics.cfg')
|
|
|
|
self.isfile.side_effect = EnsureLegacyPathExists
|
|
|
|
self.assertEqual(os.path.join(self.config_dir, 'metrics.cfg'),
|
|
utils.depot_tools_config_path('metrics.cfg'))
|
|
self.move.assert_called_once_with(
|
|
os.path.join(DEPOT_TOOLS_ROOT, 'metrics.cfg'),
|
|
os.path.join(self.config_dir, 'metrics.cfg'))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
logging.basicConfig(
|
|
level=logging.DEBUG if '-v' in sys.argv else logging.ERROR)
|
|
sys.exit(
|
|
coverage_utils.covered_main(
|
|
(os.path.join(DEPOT_TOOLS_ROOT, 'git_cache.py')),
|
|
required_percentage=0))
|