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 . Например, когда HAL
graphics.composerимеет два экземпляра (один с именем службы "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).