Android 9 включает поддержку получения имени службы заданного экземпляра HAL на основе устройства, на котором выполняются тесты Vendor Test Suite (VTS). Запуск тестов VTS HAL, которые знают имя службы, позволяет разработчикам автоматизировать тестирование расширений поставщика, нескольких HAL и нескольких экземпляров HAL как на целевой, так и на хостовой стороне тестовых запусков VTS.
О названиях услуг
Каждый экземпляр работающей службы HAL регистрирует себя под именем службы.
В предыдущих версиях Android разработчикам, запускающим тесты VTS HAL, требовалось задать правильное имя службы для тестового клиента в getService()
или оставить имя пустым и вернуться к имени службы по умолчанию. Недостатки этого подхода включают:
- Опора на знания разработчика теста для установки правильного имени службы.
- По умолчанию тестирование ограничено одним экземпляром службы.
- Ручное обслуживание имен служб (т. е. поскольку имена жестко запрограммированы, их необходимо обновлять вручную в случае изменения имени службы).
В Android 9 разработчики могут автоматически получить имя службы для данного экземпляра HAL на основе тестируемого устройства. Преимущества этого подхода включают поддержку тестирования:
- Расширения HAL поставщика . Например, если у поставщика есть реализация camera.provider HAL, которая работает на устройствах поставщика с настроенным именем службы, VTS может идентифицировать экземпляр поставщика и запустить на нем тест.
- Несколько экземпляров HAL . Например, когда
graphics.composer
HAL имеет два экземпляра (один с именем службы "default" и один с именем службы "vr"), VTS может идентифицировать оба экземпляра и запустить тест для каждого из них. - Тестирование нескольких HAL . Используется при тестировании нескольких HAL с несколькими экземплярами. Например, при запуске теста VTS, который проверяет, как работают вместе HAL мастера ключей и привратника, 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).