В Android 9 реализована поддержка получения имени сервиса для заданного экземпляра HAL на основе устройства, на котором выполняются тесты Vendor Test Suite (VTS). Запуск тестов VTS HAL, учитывающих имя сервиса, позволяет разработчикам автоматизировать тестирование расширений вендора, нескольких HAL и нескольких экземпляров HAL как на целевой, так и на хостовой стороне VTS.
О названиях услуг
Каждый экземпляр работающей службы HAL регистрируется под именем службы.
В предыдущих версиях Android разработчикам, запускающим тесты VTS HAL, требовалось указывать правильное имя службы для тестового клиента в getService()
или оставлять имя пустым и использовать имя службы по умолчанию. Недостатки такого подхода:
- Опора на знания разработчика теста для задания правильного имени службы.
- По умолчанию тестирование ограничено одним экземпляром службы.
- Ручное ведение имен служб (т. е. поскольку имена жестко запрограммированы, их необходимо обновлять вручную, если имя службы изменяется).
В Android 9 разработчики могут автоматически получать имя службы для заданного экземпляра HAL на основе тестируемого устройства. Преимущества такого подхода включают поддержку тестирования:
- Расширения HAL поставщика . Например, если у поставщика есть реализация HAL camera.provider, которая работает на устройствах поставщика с настроенным именем службы, VTS может идентифицировать экземпляр поставщика и запустить на нём тест.
- Несколько экземпляров HAL . Например, если у
graphics.composer
HAL есть два экземпляра (один с именем службы «default», а другой с именем службы «vr»), VTS может идентифицировать оба экземпляра и запустить тест для каждого из них. - Тестирование нескольких HAL . Используется при тестировании нескольких HAL с несколькими экземплярами. Например, при запуске теста VTS, который проверяет совместную работу HAL KeyMint (ранее Keymaster) и Gatekeeper, VTS может тестировать все комбинации экземпляров служб для этих HAL.
Тесты на стороне цели
Чтобы обеспечить распознавание имени службы для тестирования на стороне цели, Android 9 включает настраиваемую тестовую среду ( VtsHalHidlTargetTestEnvBase
), которая предоставляет интерфейсы для:
- Зарегистрируйте нацеливание HAL в тесте.
- Перечислите все зарегистрированные HAL.
- Получить имя(я) службы для зарегистрированных HAL, предоставленных инфраструктурой VTS.
Кроме того, инфраструктура VTS обеспечивает поддержку выполнения для:
- Предварительная обработка тестового двоичного файла для получения всех зарегистрированных тестовых HAL.
- Идентификация всех запущенных экземпляров служб и получение имени службы для каждого экземпляра (извлекается на основе
vendor/manifest.xml
). - Расчет всех комбинаций экземпляров (для поддержки множественного тестирования HAL).
- Генерация нового теста для каждого экземпляра сервиса (комбинации).
Пример:
Настройка тестов на стороне цели с учетом имени службы
Чтобы настроить тестовую среду для тестирования с учетом имени целевой службы:
- Определите
testEnvironment
на основеVtsHalHidlTargetTestEnvBase
и зарегистрируйте тестовые HAL:#include <VtsHalHidlTargetTestEnvBase.h> class testEnvironment : public::testing::VtsHalHidlTargetTestEnvBase { virtual void registerTestServices() override { registerTestService<IFoo>(); } };
- Используйте
getServiceName()
предоставляемый тестовой средой, для передачи имени службы:::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default")); // "default" is the default service name you want to use.
- Зарегистрируйте тестовую среду в
main()
иinitTest
:int main(int argc, char** argv) { testEnv = new testEnvironment(); ::testing::AddGlobalTestEnvironment(testEnv); ::testing::InitGoogleTest(&argc, argv); testEnv->init(argc, argv); return RUN_ALL_TESTS(); }
Дополнительные примеры см. в VtsHalCameraProviderV2_4TargetTest.cpp
.
Тесты на стороне хоста VTS
Тесты VTS на стороне хоста запускают тестовые скрипты на стороне хоста, а не тестовые исполняемые файлы на целевом устройстве. Чтобы включить распознавание имени сервиса для этих тестов, можно использовать шаблоны на стороне хоста для многократного запуска одного и того же тестового скрипта с разными параметрами (аналогично параметризованному тесту gtest).
- Тестовый скрипт hal определяет целевые службы HAL в тесте.
- Класс
hal_hidl_host_test
(подклассparam_test
) берёт зарегистрированные тестовые HAL из тестового сценария, идентифицирует соответствующие имена служб для тестового HAL, а затем генерирует комбинации имён служб (для тестирования с несколькими HAL) в качестве тестовых параметров. Он также предоставляет методgetHalServiceName()
, который возвращает соответствующее имя службы в соответствии с параметром, переданным текущему тестовому случаю. - Шаблон param_test поддерживает логику для принятия списка параметров и запуска всех заданных тестовых случаев для каждого параметра. То есть, для каждого тестового случая он генерирует N новых параметризованных тестовых случаев (N = количество параметров), каждый из которых содержит заданный параметр.
Настройка тестов на стороне хоста с учетом имени службы
Чтобы настроить тестовую среду для тестирования с учетом имени службы на стороне хоста:
- Укажите целевую службу HAL в тестовом сценарии:
TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
- Вызовите
getHalServiceName()
и передайте имя в init hal:self.dut.hal.InitHidlHal( target_type='foo', target_basepaths=self.dut.libPaths, target_version=1.0, target_package='android.hardware.foo', target_component_name='IFoo', hw_binder_service_name =self.getHalServiceName("android.hardware.foo@1.0::IFoo"), bits=int(self.abi_bitness))
Дополнительные примеры см. в VtsHalMediaOmxStoreV1_0HostTest.py
.
Регистрация тестовых HAL
В предыдущих версиях Android система VTS определяла тестовый HAL с помощью параметра <precondition-lshal>
настроенного в AndroidTest.xml
. Такой подход был сложным в поддержке (поскольку он зависел от разработчиков в правильной настройке теста и соответствующем обновлении конфигурации) и неточным (поскольку содержал только информацию о пакете и версии, но не об интерфейсе).
В Android 9 система VTS идентифицирует тестовый HAL, используя распознавание имени сервиса. Зарегистрированные тестовые HAL также полезны для:
- Проверка предварительных условий . Перед запуском теста HAL система VTS может убедиться в наличии тестового HAL на целевом устройстве и пропустить тесты, если это не так (см. раздел «Проверка тестируемости VTS »).
- Измерение покрытия . VTS поддерживает измерение покрытия кода между процессами, используя знания о тестируемых службах HAL, которые она хочет измерить (т. е. для очистки покрытия для процесса службы hal).