blob: 2174bc0c6e6596e141ddfceaa26566ac030a4d33 [file] [log] [blame]
# Copyright 2014 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 optparse
import os
import platform
import shutil
import subprocess
import sys
import tempfile
import unittest
import zipfile
from telemetry.util import cloud_storage
from telemetry.util import find_dependencies
class FindDependenciesTest(unittest.TestCase):
@unittest.skipUnless(
cloud_storage.SupportsProdaccess(
os.path.realpath(cloud_storage.FindGsutil())),
'Could not find a depot_tools installation with gsutil.')
def testGsutil(self):
parser = optparse.OptionParser()
find_dependencies.FindDependenciesCommand.AddCommandLineArgs(parser)
options, _ = parser.parse_args([])
try:
temp_dir = tempfile.mkdtemp()
zip_path = os.path.join(temp_dir, 'gsutil.zip')
options.zip = zip_path
find_dependencies.ZipDependencies([], set(), options)
if platform.system() == 'Windows':
with zipfile.ZipFile(zip_path, 'r') as zip_file:
zip_file.extractall(temp_dir)
else:
# Use unzip instead of Python zipfile to preserve file permissions.
with open(os.devnull, 'w') as dev_null:
subprocess.call(['unzip', zip_path], cwd=temp_dir, stdout=dev_null)
third_party_path = os.path.join(temp_dir, 'telemetry', 'src', 'tools',
'telemetry', 'third_party')
# __init__.py is in Chromium src, but we didn't include any repo files.
open(os.path.join(third_party_path, '__init__.py'), 'a').close()
gsutil_path = os.path.join(third_party_path, 'gsutil', 'gsutil')
self.assertTrue(os.access(gsutil_path, os.X_OK))
with open(os.devnull, 'w') as dev_null:
# gsutil with no args should print usage and exit with exit code 0.
gsutil_command = [sys.executable, gsutil_path]
self.assertEqual(subprocess.call(gsutil_command, stdout=dev_null), 0)
# gsutil config should wait for the user and not exit with exit code 1.
#gsutil_command = [sys.executable, gsutil_path, 'config',
# '-o', os.path.join(temp_dir, 'config_file')]
#gsutil_process = subprocess.Popen(gsutil_command, stdout=dev_null)
#try:
# util.WaitFor(gsutil_process.poll, timeout=0.5)
# self.assertEqual(gsutil_process.returncode, 0,
# msg='gsutil config failed.')
#except util.TimeoutException:
# gsutil_process.terminate()
# gsutil_process.wait()
finally:
shutil.rmtree(temp_dir)