בדיקת HAL עם שם שירות

אנדרואיד 9 כולל תמיכה בהשגת שם השירות של מופע HAL נתון בהתבסס על המכשיר שבו פועלות בדיקות ה-Vendor Test Suite (VTS). הפעלת בדיקות VTS HAL שמודעות לשם שירות מאפשרת למפתחים לבצע אוטומציה של הרחבות ספקים לבדיקות, מספר HALs ומופעי HAL מרובים בהרצת בדיקת VTS בצד היעד ובצד המארח.

לגבי שמות שירותים

כל מופע של שירות HAL הפועל רושם את עצמו עם שם שירות.

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

  • הסתמכות על הידע של מפתח הבדיקה כדי להגדיר את שם השירות הנכון.
  • מוגבל לבדיקה מול מופע שירות יחיד כברירת מחדל.
  • תחזוקה ידנית של שמות שירות (כלומר מכיוון ששמות מקודדים קשה, יש לעדכן אותם ידנית אם שם השירות משתנה.

באנדרואיד 9, מפתחים יכולים לקבל אוטומטית את שם השירות עבור מופע HAL נתון בהתבסס על המכשיר הנבדק. היתרונות לגישה זו כוללים תמיכה בבדיקות:

  • ספק הרחבות HAL . לדוגמה, כאשר לספק יש מימוש של camera.provider HAL שפועל על התקני ספק עם שם שירות מותאם אישית, VTS יכול לזהות את מופע הספק ולהריץ את הבדיקה נגדו.
  • מופעי HAL מרובים . לדוגמה, כאשר ל- graphics.composer HAL יש שני מופעים (אחד עם שם שירות "ברירת מחדל" ואחד עם שם שירות "vr"), VTS יכול לזהות את שני המופעים ולהריץ את הבדיקה כנגד כל אחד מהם.
  • בדיקת Multi-HAL . משמש בעת בדיקת HAL מרובים עם מופעים מרובים. לדוגמה, בעת הפעלת בדיקת VTS המאמתת כיצד מנהל המפתח ושומר השער HAL עובדים יחד, VTS יכול לבדוק את כל השילובים של מופעי שירות עבור אותם HALs.

בדיקות צד מטרה

כדי לאפשר מודעות לשם שירות עבור בדיקות בצד היעד, אנדרואיד 9 כולל סביבת בדיקה הניתנת להתאמה אישית ( VtsHalHidlTargetTestEnvBase ) המספקת ממשקים ל:

  • רשום HAL(ים) למיקוד בבדיקה.
  • רשום את כל ה-HAL/ים הרשומים.
  • קבל שמות שירותים עבור HAL רשומים המסופקים על ידי VTS framework.

בנוסף, מסגרת VTS מספקת תמיכה בזמן ריצה עבור:

  • עיבוד מקדים של הבדיקה הבינארית כדי לקבל את כל ה-HAL של הבדיקה הרשומים.
  • זיהוי כל מופעי השירות הפועלים וקבלת שם השירות עבור כל מופע (אוחזר על סמך vendor/manifest.xml ).
  • חישוב כל שילובי המופעים (כדי לתמוך בבדיקות HAL מרובות).
  • הפקת בדיקה חדשה לכל מופע שירות (שילוב).

דוגמא:

Runtime support for target-side testing

איור 1. תמיכת זמן ריצה של מסגרת VTS לבדיקות בצד היעד

הגדר בדיקות צד יעד מודעים לשם שירות

כדי להגדיר את סביבת הבדיקה שלך לבדיקת שמות שירות בצד היעד:

  1. הגדר testEnvironment המבוסס על VtsHalHidlTargetTestEnvBase ורשום HALs של בדיקות:
    #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 המיקוד בבדיקה.
  • ה- 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 .

רישום HALs למבחן

בגרסאות קודמות של אנדרואיד, VTS זיהה את ה-HAL לבדיקה באמצעות האפשרות <precondition-lshal> שהוגדרה ב- AndroidTest.xml . גישה זו הייתה קשה לתחזוקה (כיוון שהיא הסתמכה על מפתחים שיגדירו את הבדיקה כראוי ויעדכנו את התצורה בהתאם) ולא מדויקת (כיוון שהיא הכילה רק את פרטי החבילה והגרסה ולא את פרטי הממשק).

באנדרואיד 9, VTS מזהה את ה-HAL הבודק באמצעות מודעות לשם השירות. HALs הבדיקה הרשומים שימושיים גם עבור:

  • בדיקות תנאי מוקדם . לפני הפעלת בדיקת HAL, VTS יכול לאשר שה-HAL לבדיקה זמין במכשיר היעד ולדלג על הבדיקות אם לא (עיין בבדיקת בדיקת VTS ).
  • מדידת כיסוי . VTS תומכת במדידת כיסוי קוד חוצה תהליכים באמצעות הידע על שירותי ה-HAL הבודקים שהיא רוצה למדוד (כלומר לשטוף את הכיסוי עבור תהליך שירות ה-hal).