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

Для понимания этого раздела сначала изучите опцион Tradefed @Option .

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

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

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

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

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

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

или через команду:

--config-file /tmp/file

Описание

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

Для корректной работы необходимо указать путь к файлу в удаленном формате . Например:

--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
  • optional: По умолчанию 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 в составе модема .