Загрузка протоколов с глобальной конфигурацией

Чтобы понять этот раздел, сначала изучите @Option в Tradefed.

Обычно в Tradefed можно настроить так, чтобы тестовые классы получали дополнительную информацию из XML-конфигурации или командной строки. Эта функция позволяет при необходимости получить дополнительную информацию.

Пример параметра файла

Пример файла @option:

@Option(name = 'config-file')
private File mConfigFile;

Указанные выше параметры можно задать с помощью конфигурации XML:

<option name="config-file" value="/tmp/file" />

или с помощью команды:

--config-file /tmp/file

Описание

Эта функция позволяет преобразовывать удаленные объекты типа File, указанные в параметрах @Options, в локальные файлы, чтобы пользователи могли работать с ними без проблем.

Чтобы это работало, файл должен быть указан с помощью пути к удаленному стилю. Пример:

--config-file gs://bucket/tmp/file

Этот путь указывает на файл в сегменте Google Cloud Storage (GCS), где он хранится. Обнаружив удаленный путь, Tradefed попытается скачать файл на локальное устройство и назначить его параметру @Option. В результате переменная mConfigFile будет указывать на локальную версию файла, которую можно использовать в тесте.

Если удаленный файл не удастся скачать по какой-либо причине, Tradefed выдаст исключение ConfigurationException, которое не позволит запустить тест. Отсутствие этих файлов считается критической ошибкой, поскольку некоторые артефакты тестирования также будут отсутствовать.

Как использовать параметры запроса

Добавить параметры запроса в URL можно с помощью ?. Пример:gs://bucket/path?unzip=true. Пара "ключ-значение" unzip=true будет доступна в реализации интерфейса IRemoteFileResolver.

Доступны два встроенных варианта поведения:

  • unzip: если задано значение true и скачанный файл является ZIP-архивом, он будет автоматически распакован во временное местоположение. Пример: ?unzip=true
  • Необязательный параметр. Значение по умолчанию – false. Если задано значение true и разрешение не удается, исключение не создается, а файл просто не заменяется. Пример: ?optional=true

Вы также можете передавать глобальные аргументы запроса с помощью --dynamic-download-args key=value, чтобы передавать пару "ключ-значение" всем динамическим скачиваниям, которые выполняются при вызове.

Поддерживаемые протоколы

Официально поддерживаемые протоколы и соответствующие им форматы:

  • Google Cloud Storage, протокол: gs, формат: gs://<bucket name>/path
  • Локальные файлы, протокол: file, формат: file:/local/path
  • Ссылки HTTP, протокол: http, формат: http://url
  • Ссылки HTTPS, протокол: https, формат: https://url

Ограничения

Динамическое разрешение @Option в настоящее время поддерживает только ограниченное количество протоколов и мест для скачивания. Разрешение @Option в настоящее время включено только для основной конфигурации XML Tradefed.

Если вы используете пакет, текущие модули (AndroidTest.xml) по умолчанию не будут разрешать файлы. Это сделано для того, чтобы модули не создавали неизвестные зависимости. Этого можно избежать, используя --enable-module-dynamic-download на уровне набора тестов, но в основных наборах тестов, таких как Compatibility Test Suite (CTS) и Vendor Test Suite (VTS), эта возможность не будет включена.

Как реализовать новый протокол

Поддерживаемые протоколы реализованы в Tradefed с помощью интерфейса IRemoteFileResolver, который определяет короткий тег протокола, сопоставляемый в пути к файлу с помощью getSupportedProtocol. Например, gs используется для протокола Google Cloud Storage. Мы рекомендуем реализовать интерфейс #resolveRemoteFiles(RemoteFileResolverArgs), который будет поддерживаться в долгосрочной перспективе.

Чтобы официально включить поддержку, реализованные протоколы можно добавить в файл META-INF services.