בדיקת יכולת הבדיקה של HAL

חבילת הבדיקות של ספקים (VTS) ב-Android 9 תומכת בשיטת זמן ריצה לשימוש בהגדרת המכשיר כדי לזהות אילו בדיקות VTS צריך לדלג עליהן עבור יעד המכשיר הזה.

גמישות בבדיקות VTS

החל מ-Android 8.0, בדיקות VTS נדרשות לכל המכשירים שהושקו עם Android 8.0 ומעלה. עם זאת, לא כל הבדיקות של VTS רלוונטיות לכל יעדי המכשירים. לדוגמה:

  • אם מכשיר ספציפי לא תומך ב-HAL לבדיקה (למשל IR), ‏ VTS לא צריך להריץ בדיקות עבור בדיקת ה-HAL הזו מול יעד המכשיר הזה.
  • אם כמה מכשירים חולקים את אותו SoC ותמונת ספק, אבל יש להם פונקציות חומרה שונות, VTS צריך לקבוע אם להריץ בדיקה או לדלג עליה עבור יעד מכשיר ספציפי.

סוגי בדיקות VTS

‫VTS כולל את סוגי הבדיקות הבאים:

  • בדיקות תאימות מבטיחות תאימות בין מחיצות של מסגרות וספקים. הבדיקות האלה נדרשות להפעלה (ולמעבר) במכשירים עם Android 8.0 ומעלה.
  • בדיקות אי-תאימות עוזרות לספקים לשפר את איכות המוצר (ביצועים, בדיקות fuzzing וכו'). הבדיקות האלה הן אופציונליות לספקים.

האם הבדיקה היא בדיקת תאימות או לא, תלוי לתוכנית איזו היא שייכת. בדיקות שמופעלות עם תוכנית 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 עם יישומי passthrough (כלומר, קובץ -impl.so התואם במכשיר). דוגמה:
    android.hardware.nfc@1.0::I*/* (/vendor/lib/hw/)
    android.hardware.nfc@1.0::I*/* (/vendor/lib64/hw/)

בדיקות תאימות

בבדיקות תאימות, מערכת VTS מסתמכת על מניפסט הספק כדי לקבוע (ולבדוק) את כל מופעי ה-HAL שהמכשיר מספק. זרימת ההחלטה:

בדיקת יכולת הבדיקה לצורך תאימות

איור 1. Testability check for VTS compliance tests

בדיקות אי-תאימות

בבדיקות של אי-תאימות, מערכת VTS מסתמכת על מניפסט הספק ועל lshal פלט כדי לקבוע (ולבדוק) את ממשקי ה-HAL הניסיוניים שלא צוינו בקובץ manifest.xml. זרימת ההחלטה:

בדיקת יכולת הבדיקה לצורך אי-תאימות

איור 2. בדיקת יכולת בדיקה של בדיקות VTS שאינן תואמות tests

איתור מניפסט הספק

הכלי VTS מחפש את קובץ הספק manifest.xml במקומות הבאים, בסדר הבא:

  1. /vendor/etc/vintf/manifest.xml + מניפסט ODM (אם אותו HAL מוגדר בשני המקומות, מניפסט ODM מבטל את ההגדרה ב-/vendor/etc/vintf/manifest.xml)
  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, ומשמש את מסגרת הבדיקה של VTS בזמן הריצה כדי לקבוע אם אפשר לבדוק בדיקת HAL נתונה או לא. הוא מבוסס על 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 שאליהם יש גישה

כדי לקבוע לאילו HAL יש גישה לבדיקות VTS, צריך לוודא שכל בדיקת HAL משתמשת בתבנית VtsHalHidlTargetTestEnvBase כדי לרשום את ה-HAL שאליו יש גישה בבדיקה. לאחר מכן, מסגרת הבדיקה של VTS יכולה לחלץ את ה-HAL הרשומים במהלך העיבוד המקדים של הבדיקה.

בבדיקות תאימות, אפשר גם לבדוק את /system/etc/vintf/manifest.xml. אם מוגדר כאן HAL, ‏ VTS צריך לבדוק אותו. (בשירותי HAL שמסופקים על ידי המערכת (למשל, graphics.composer/vr), קובצי ה-HAL מוצהרים ב-/system/manifest.xml).