summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/rtc_tools/testing/utils.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /third_party/libwebrtc/rtc_tools/testing/utils.py
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/libwebrtc/rtc_tools/testing/utils.py')
-rwxr-xr-xthird_party/libwebrtc/rtc_tools/testing/utils.py129
1 files changed, 129 insertions, 0 deletions
diff --git a/third_party/libwebrtc/rtc_tools/testing/utils.py b/third_party/libwebrtc/rtc_tools/testing/utils.py
new file mode 100755
index 0000000000..8a5de50cf8
--- /dev/null
+++ b/third_party/libwebrtc/rtc_tools/testing/utils.py
@@ -0,0 +1,129 @@
+#!/usr/bin/env python
+# Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
+#
+# Use of this source code is governed by a BSD-style license
+# that can be found in the LICENSE file in the root of the source
+# tree. An additional intellectual property rights grant can be found
+# in the file PATENTS. All contributing project authors may
+# be found in the AUTHORS file in the root of the source tree.
+"""Utilities for all our deps-management stuff."""
+
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
+import os
+import shutil
+import subprocess
+import sys
+import tarfile
+import time
+import zipfile
+
+
+def RunSubprocessWithRetry(cmd):
+ """Invokes the subprocess and backs off exponentially on fail."""
+ for i in range(5):
+ try:
+ subprocess.check_call(cmd)
+ return
+ except subprocess.CalledProcessError as exception:
+ backoff = pow(2, i)
+ print('Got %s, retrying in %d seconds...' % (exception, backoff))
+ time.sleep(backoff)
+
+ print('Giving up.')
+ raise exception
+
+
+def DownloadFilesFromGoogleStorage(path, auto_platform=True):
+ print('Downloading files in %s...' % path)
+
+ extension = 'bat' if 'win32' in sys.platform else 'py'
+ cmd = [
+ 'download_from_google_storage.%s' % extension,
+ '--bucket=chromium-webrtc-resources', '--directory', path
+ ]
+ if auto_platform:
+ cmd += ['--auto_platform', '--recursive']
+ subprocess.check_call(cmd)
+
+
+# Code partially copied from
+# https://cs.chromium.org#chromium/build/scripts/common/chromium_utils.py
+def RemoveDirectory(*path):
+ """Recursively removes a directory, even if it's marked read-only.
+
+ Remove the directory located at *path, if it exists.
+
+ shutil.rmtree() doesn't work on Windows if any of the files or directories
+ are read-only, which svn repositories and some .svn files are. We need to
+ be able to force the files to be writable (i.e., deletable) as we traverse
+ the tree.
+
+ Even with all this, Windows still sometimes fails to delete a file, citing
+ a permission error (maybe something to do with antivirus scans or disk
+ indexing). The best suggestion any of the user forums had was to wait a
+ bit and try again, so we do that too. It's hand-waving, but sometimes it
+ works. :/
+ """
+ file_path = os.path.join(*path)
+ print('Deleting `{}`.'.format(file_path))
+ if not os.path.exists(file_path):
+ print('`{}` does not exist.'.format(file_path))
+ return
+
+ if sys.platform == 'win32':
+ # Give up and use cmd.exe's rd command.
+ file_path = os.path.normcase(file_path)
+ for _ in range(3):
+ print('RemoveDirectory running %s' %
+ (' '.join(['cmd.exe', '/c', 'rd', '/q', '/s', file_path])))
+ if not subprocess.call(
+ ['cmd.exe', '/c', 'rd', '/q', '/s', file_path]):
+ break
+ print(' Failed')
+ time.sleep(3)
+ return
+ else:
+ shutil.rmtree(file_path, ignore_errors=True)
+
+
+def UnpackArchiveTo(archive_path, output_dir):
+ extension = os.path.splitext(archive_path)[1]
+ if extension == '.zip':
+ _UnzipArchiveTo(archive_path, output_dir)
+ else:
+ _UntarArchiveTo(archive_path, output_dir)
+
+
+def _UnzipArchiveTo(archive_path, output_dir):
+ print('Unzipping {} in {}.'.format(archive_path, output_dir))
+ zip_file = zipfile.ZipFile(archive_path)
+ try:
+ zip_file.extractall(output_dir)
+ finally:
+ zip_file.close()
+
+
+def _UntarArchiveTo(archive_path, output_dir):
+ print('Untarring {} in {}.'.format(archive_path, output_dir))
+ tar_file = tarfile.open(archive_path, 'r:gz')
+ try:
+ tar_file.extractall(output_dir)
+ finally:
+ tar_file.close()
+
+
+def GetPlatform():
+ if sys.platform.startswith('win'):
+ return 'win'
+ if sys.platform.startswith('linux'):
+ return 'linux'
+ if sys.platform.startswith('darwin'):
+ return 'mac'
+ raise Exception("Can't run on platform %s." % sys.platform)
+
+
+def GetExecutableExtension():
+ return '.exe' if GetPlatform() == 'win' else ''