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

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

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

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

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

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

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

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

בדיקות בצד היעד

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

  • רישום מיקוד HAL (ים) במבחן.
  • רשום את כל HAL (ים) הרשומים.
  • קבל את שמות השירותים עבור HAL (ים) רשומים המסופקים על ידי מסגרת VTS.

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

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

דוגמא:

Runtime support for target-side testing

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

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

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

  1. הגדר testEnvironment מבוסס על VtsHalHidlTargetTestEnvBase ולרשום שכבות HAL מבחן:
    #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() ולהעביר את השם האל init:
    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 . גישה זו הייתה קשה לתחזוקה (מכיוון שהיא הסתמכה על מפתחים להגדיר את הבדיקה כראוי ולעדכן את התצורה בהתאם) ולא מדויקת (מכיוון שהיא הכילה רק את פרטי החבילה והגרסה ולא את פרטי הממשק).

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

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