Тестирование 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. Например, когда graphics.composer HAL имеет два экземпляра (один с именем службы « по умолчанию» и один с именем службы «уг»), VTS может идентифицировать экземпляры и запустить тест против каждого из них.
  • Multi-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 и зарегистрировать тест - ГАЛС:
    #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 (ы) в тесте.
  • 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() и передать имя инициализации хал:
    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-сервиса).