การตรวจสอบความสามารถในการทดสอบ HAL

ชุดเครื่องมือทดสอบของผู้ให้บริการ (VTS) ของ Android 9 รองรับเมธอดรันไทม์สำหรับการใช้การกำหนดค่าอุปกรณ์เพื่อระบุการทดสอบ 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 เครื่องมือในอุปกรณ์ที่แสดงข้อมูลรันไทม์เกี่ยวกับบริการ HAL ที่ลงทะเบียนกับ hwservicemanager ตัวอย่าง
    android.hardware.vibrator@1.0::IVibrator/default

    lshal ยังแสดง HAL ทั้งหมดที่มีการใช้งานการพาสทรู (เช่น มีไฟล์ -impl.so ที่เกี่ยวข้องในอุปกรณ์) ตัวอย่าง
    android.hardware.nfc@1.0::I*/* (/vendor/lib/hw/)
    android.hardware.nfc@1.0::I*/* (/vendor/lib64/hw/)

การทดสอบการปฏิบัติตามข้อกำหนด

สำหรับการทดสอบการปฏิบัติตามข้อกำหนด VTS จะใช้ไฟล์ Manifest ของผู้ให้บริการเพื่อกำหนด (และทดสอบ) อินสแตนซ์ HAL ทั้งหมดที่อุปกรณ์มีให้ ขั้นตอนการตัดสินใจ

การตรวจสอบความสามารถในการทดสอบการปฏิบัติตามข้อกำหนด

รูปที่ 1 การตรวจสอบความสามารถในการทดสอบสำหรับการทดสอบการปฏิบัติตามข้อกำหนด VTS

การทดสอบการไม่ปฏิบัติตามข้อกำหนด

สําหรับการทดสอบการไม่ปฏิบัติตามข้อกําหนด VTS จะอาศัยไฟล์ Manifest ของผู้ให้บริการและเอาต์พุต lshal เพื่อระบุ (และทดสอบ) HAL เวอร์ชันทดลองที่ไม่ได้อ้างสิทธิ์ในไฟล์ manifest.xml ขั้นตอนการตัดสินใจ

การตรวจสอบความสามารถในการทดสอบการไม่ปฏิบัติตามข้อกำหนด

รูปที่ 2 การตรวจสอบความสามารถในการทดสอบสำหรับการทดสอบการไม่ปฏิบัติตามข้อกำหนดของ VTS

ค้นหาไฟล์ Manifest ของผู้ให้บริการ

VTS จะตรวจสอบไฟล์ manifest.xml ของผู้ให้บริการในตำแหน่งต่อไปนี้ตามลำดับ

  1. /vendor/etc/vintf/manifest.xml + ไฟล์ Manifest ODM (หากกำหนด HAL เดียวกันไว้ในทั้ง 2 ที่ ไฟล์ Manifest ODM จะลบล้างไฟล์ใน /vendor/etc/vintf/manifest.xml)
  2. /vendor/etc/vintf/manifest.xml
  3. ไฟล์ manifest.xml ของ ODM ที่โหลดจากไฟล์ต่อไปนี้ตามลำดับ
    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 และใช้โดยเฟรมเวิร์กการทดสอบ VTS ขณะรันไทม์เพื่อระบุว่าการทดสอบ HAL หนึ่งๆ ทดสอบได้หรือไม่ โดยอิงตาม libvintf เพื่อโหลดและแยกวิเคราะห์ไฟล์ Manifest ของผู้ให้บริการ รวมถึงใช้ขั้นตอนการตัดสินใจที่อธิบายไว้ในส่วนก่อนหน้า

วิธีใช้ "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 ใดโดยการทดสอบ VTS ให้ตรวจสอบว่าการทดสอบ HAL แต่ละครั้งใช้เทมเพลต VtsHalHidlTargetTestEnvBase เพื่อลงทะเบียน HAL ที่เข้าถึงในการทดสอบ จากนั้นเฟรมเวิร์กการทดสอบ VTS จะดึงข้อมูล HAL ที่ลงทะเบียนไว้เมื่อประมวลผลข้อมูลก่อนการทดสอบ

คุณยังตรวจสอบ /system/etc/vintf/manifest.xml สำหรับการทดสอบการปฏิบัติตามข้อกำหนดได้ด้วย หากมีการกําหนด HAL ไว้ที่นี่ VTS ควรทดสอบ HAL (สำหรับบริการ HAL ที่ระบบมีให้ (เช่น graphics.composer/vr) ระบบจะประกาศ HAL ใน /system/manifest.xml)