HAL 테스트 가능성 확인

Android 9 VTS(공급업체 테스트 도구 모음)는 기기 구성을 사용하여 기기 타겟에서 건너뛰어야 하는 VTS 테스트를 식별하는 런타임 메서드를 지원합니다.

VTS 테스트 유연성

Android 8.0부터는 Android 8.0 이상으로 실행되는 모든 기기에 VTS 테스트가 필수입니다. 그러나 모든 VTS 테스트가 모든 기기 타겟에 적용되는 것은 아닙니다. 예:

  • 특정 기기가 테스트 HAL(예: IR)을 지원하지 않는 경우 VTS는 기기 타겟에서 HAL 테스트를 위한 테스트를 실행할 필요가 없습니다.
  • 몇몇 기기가 동일한 SoC와 공급업체 이미지를 공유하지만 하드웨어 기능이 다른 경우 VTS는 특정 기기 타겟에서 테스트를 실행해야 하는지 아니면 건너뛰어야 하는지 결정해야 합니다.

VTS 테스트 유형

VTS에는 다음과 같은 테스트 유형이 있습니다.

  • 규정 준수 테스트는 프레임워크와 공급업체 파티션 간의 호환성을 보장합니다. 이 테스트는 Android 8.0 이상으로 실행되는 기기에서 실행(및 통과)되어야 합니다.
  • 비규정 준수 테스트는 공급업체가 제품 품질(성능/퍼징 등)을 개선하는 데 도움이 됩니다. 공급업체의 경우 이 테스트는 선택사항입니다.

테스트가 규정 준수 테스트인지는 테스트가 속한 계획에 따라 다릅니다. VTS 계획으로 실행되는 테스트는 규정 준수 테스트로 간주됩니다.

지원되는 HAL 결정

VTS는 다음 파일을 사용하여 기기 타겟이 특정 HAL을 지원하는지 확인할 수 있습니다.

  • /system/compatibility_matrix.xml. 프레임워크에 필요한 HAL 인스턴스를 요청합니다. 예:
        <hal format="hidl" optional="true">
            <name>android.hardware.vibrator</name>
            <version>1.0-1</version>
            <interface>
               <name>IVibrator</name>
               <instance>default</instance>
            </interface>
        </hal>
        
    • optional 속성은 프레임워크에서 HAL을 엄격하게 요구하는지를 나타냅니다.
    • 파일에는 이름은 같지만 버전과 인터페이스가 서로 다른 동일한 HAL에 관한 여러 개의 항목이 있을 수 있습니다.
    • 파일에 동일한 항목의 version 구성이 여러 개 있을 수 있습니다. 즉, 프레임워크가 여러 버전과 작동할 수 있음을 나타냅니다.
    • version1.0-1은 프레임워크가 가장 낮은 버전 1.0과 작동할 수 있으며 1.1보다 높은 버전을 필요로 하지 않음을 의미합니다.
  • 기기 manifest.xml. 공급업체에서 제공한 HAL 인스턴스를 요청합니다. 예:
        <hal format="hidl">
            <name>android.hardware.vibrator</name>
            <transport>hwbinder</transport>
            <version>1.2</version>
            <interface>
                <name>IVibrator</name>
               <instance>default</instance>
            </interface>
        </hal>
        
    • 파일에는 이름은 같지만 버전과 인터페이스가 서로 다른 동일한 HAL에 관한 여러 개의 항목이 있을 수 있습니다.
    • 파일에 항목의 단일 version 구성만 포함된 경우 version1.2는 공급업체가 1.0~1.2의 모든 버전을 지원한다는 의미입니다.
  • lshal. 기기상의 도구로, hwservicemanager로 등록된 HAL 서비스의 런타임 정보를 표시합니다. 예:
        android.hardware.vibrator@1.0::IVibrator/default
        

    lshal은 또한 패스스루 구현과 함께 모든 HAL을 표시합니다. 즉, 해당하는 -impl.so 파일이 기기에 있는 HAL입니다. 예:
        android.hardware.nfc@1.0::I*/* (/vendor/lib/hw/)
        android.hardware.nfc@1.0::I*/* (/vendor/lib64/hw/)
        

규정 준수 테스트

규정 준수 테스트의 경우 VTS는 기기에서 제공된 모든 HAL 인스턴스를 확인하고 테스트하는 데 공급업체 매니페스트를 사용합니다. 결정 흐름:

규정 준수와 관련한 테스트 가능성 확인

그림 1. VTS 규정 준수 테스트의 테스트 가능성 확인

비규정 준수 테스트

비규정 준수 테스트의 경우 VTS는 manifest.xml 파일에서 요청되지 않은 실험용 HAL을 확인하고 테스트하는 데 공급업체 매니페스트와 lshal 출력을 사용합니다. 결정 흐름:

비규정 준수와 관련한 테스트 가능성 확인

그림 2. VTS 비규정 준수 테스트의 테스트 가능성 확인

공급업체 매니페스트 찾기

VTS는 다음 위치에 있는 공급업체 manifest.xml 파일을 아래 순서대로 확인합니다.

  1. /vendor/etc/vintf/manifest.xml + ODM 매니페스트(동일한 HAL이 두 위치에 모두 정의되어 있는 경우 ODM 매니페스트가 에 있는 매니페스트보다 우선함)
  2. /vendor/etc/vintf/manifest.xml
  3. ODM manifest.xml. 다음 파일에서 아래 순서대로 로드됩니다.
    1. /odm/etc/vintf/manifest_$(ro.boot.product.hardware.sku).xml
    2. /odm/etc/vintf/manifest.xml
    3. /odm/etc/manifest_$(ro.boot.product.hardware.sku).xml
    4. /odm/etc/manifest.xml
    5. /vendor/manifest.xml

VTS 테스트 가능성 검사기

vts_testibility_checker는 VTS로 패키징된 바이너리로, 지정된 HAL 테스트가 테스트 가능 상태인지 확인하기 위해 런타임 시 VTS 테스트 프레임워크에 의해 사용됩니다. 이 검사기는 libvintf에 기반하여 공급업체 매니페스트 파일을 로드하고 파싱하며, 이전 섹션에서 설명한 결정 흐름을 구현합니다.

vts_testability_check를 사용하려면 다음과 같이 합니다.

  • 규정 준수 테스트의 경우:
        vts_testability_check -c -b <bitness>  <hal@version>
        
  • 비규정 준수 테스트의 경우:
        vts_testability_check -b <bitness>  <hal@version>
        

vts_testability_check의 출력에는 다음과 같은 json 형식이 사용됩니다.

    {testable: <True/False> Instances: <list of instance names of HAL service>}
    

액세스된 HAL 확인

VTS 테스트를 통해 액세스된 HAL을 확인하려면 각 HAL 테스트에서 VtsHalHidlTargetTestEnvBase 템플릿을 사용하여 테스트에서 액세스된 HAL을 등록해야 합니다. 그러면 VTS 테스트 프레임워크가 테스트를 사전 처리할 때 등록된 HAL을 추출할 수 있습니다.

규정 준수 테스트의 경우 /system/etc/vintf/manifest.xml을 확인해도 됩니다. 여기에 HAL이 정의되어 있으면 VTS는 HAL을 테스트해야 합니다. 시스템에서 제공된 HAL 서비스(예: graphics.composer/vr)의 경우 HAL은 /system/manifest.xml에 선언됩니다.