Тестирование HAL с учетом имени службы

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 мастера ключей и привратника работают вместе, VTS может протестировать все комбинации экземпляров службы для этих HAL.

Целевые тесты

Чтобы обеспечить осведомленность об имени службы для тестирования на стороне цели, Android 9 включает настраиваемую тестовую среду ( VtsHalHidlTargetTestEnvBase ), которая предоставляет интерфейсы для:

  • Зарегистрируйте таргетинг на HAL в тесте.
  • Перечислите все зарегистрированные HAL.
  • Получите имя службы для зарегистрированных HAL, предоставленных платформой VTS.

Кроме того, платформа VTS обеспечивает поддержку во время выполнения для:

  • Предварительная обработка тестового двоичного файла для получения всех зарегистрированных тестовых HAL.
  • Идентификация всех запущенных экземпляров службы и получение имени службы для каждого экземпляра (получено на основе vendor/manifest.xml ).
  • Расчет всех комбинаций экземпляров (для поддержки нескольких тестов HAL).
  • Создание нового теста для каждого экземпляра службы (комбинации).

Пример:

Runtime support for target-side testing

Рис. 1. Поддержка среды выполнения платформы VTS для тестирования на целевой стороне

Настройка тестов на целевой стороне с учетом имени службы

Чтобы настроить тестовую среду для тестирования с учетом имени службы на целевой стороне:

  1. Определите testEnvironment на основе VtsHalHidlTargetTestEnvBase и зарегистрируйте тестовые HAL:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. Используйте getServiceName() , предоставленный тестовой средой, чтобы передать имя службы:
    ::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default"));
    // "default" is the default service name you want to use.
  3. Зарегистрируйте тестовую среду в 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).

Runtime support for host-side testing

Рисунок 2. Поддержка среды выполнения VTS для тестирования на стороне хоста
  • Сценарий hal test указывает целевые службы HAL в тесте.
  • hal_hidl_host_test (подкласс param_test ) берет зарегистрированные тестовые HAL из тестового скрипта, идентифицирует соответствующие имена служб для тестовых HAL, а затем генерирует комбинации имен служб (для тестирования с несколькими HAL) в качестве тестовых параметров. Он также предоставляет метод getHalServiceName() , который возвращает соответствующее имя службы в соответствии с параметром, переданным в текущий тестовый пример.
  • Шаблон param_test поддерживает логику для принятия списка параметров и выполнения всех заданных тестовых случаев для каждого параметра. Т.е. для каждого теста генерируется N новых параметризованных тестов (N = размер параметров), каждый с заданным параметром.

Настройка тестов на стороне хоста с учетом имени службы

Чтобы настроить тестовую среду для тестирования с учетом имени службы на стороне хоста:

  1. Укажите целевую службу HAL в тестовом сценарии:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
    
  2. Вызовите 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).