Android 9 כולל תמיכה בקבלת השירות השם של מכונת HAL נתונה, על סמך המכשיר שבו חבילת הבדיקה של הספק בדיקות VTS פועלות. הרצת בדיקות VTS HAL בעלות מוּדעוּת לשם השירות שמאפשר למפתחים לבצע בדיקות אוטומטיות של תוספי ספקים, HALs מרובים מספר מכונות HAL בהפעלות של בדיקות VTS בצד היעד ובצד המארח.
מידע על שמות של שירותים
כל מופע של שירות HAL שפועל רושם את עצמו בשם של שירות.
בגרסאות קודמות של Android, מפתחים שמריצים בדיקות VTS HAL
נדרש כדי להגדיר את שם השירות הנכון עבור לקוח הבדיקה
getService()
או להשאיר את השם ריק וחזרה לברירת המחדל
שם השירות. החסרונות לגישה הזו כוללים:
- מסתמכים על הידע של מפתח הבדיקה כדי להגדיר את השירות הנכון שם.
- כברירת מחדל, מוגבל לבדיקה במכונה אחת של שירות.
- תחזוקה ידנית של שמות שירותים (כלומר כי השמות כתובים בתוך הקוד, צריך לעדכן אותם ידנית אם שם השירות משתנה.
ב-Android 9, מפתחים יכולים לקבל באופן אוטומטי שם השירות למכונת HAL מסוימת על סמך המכשיר בבדיקה. היתרונות לגישה הזו כוללים תמיכה בבדיקות:
- תוספי HAL של ספקים. לדוגמה, כשלספק יש של מצלמה.ספק HAL שפועלת במכשירים של ספקים שם השירות המותאם אישית, VTS יכול לזהות את המופע של הספק ולהריץ את הבדיקה. כנגדו.
- מספר מופעי HAL. לדוגמה, כאשר
פורמט HAL
graphics.composer
כולל שתי מכונות (אחת עם שם השירות 'ברירת מחדל' והאחד בשם השירות 'vr'), VTS יכול לזהות גם מופעים וגם להריץ את הבדיקה בכל אחד מהם. - בדיקות מרובות HAL. משמש לבדיקות מרובות של רכיבי HAL עם מספר מכונות. לדוגמה, כאשר מריצים בדיקת VTS שמוודאת איך HAL ומנהל המפתחות ושומרי הסף פועלים יחד, VTS יכול לבדוק את כל השילובים של מופעי השירות הרלוונטיים.
בדיקות בצד היעד
כדי להפעיל את המוּדעוּת לשם השירות לצורך בדיקה בצד היעד, Android
9 כולל סביבת בדיקה שניתן להתאים אישית
(VtsHalHidlTargetTestEnvBase
)
שמספק ממשקים:
- רישום טירגוט עם HAL/S בבדיקה.
- רשימה של כל תהליכי HAL הרשומים.
- קבלת שמות השירותים עבור HAL(s) רשומים שסופקו על ידי VTS framework.
בנוסף, ה-framework של VTS מספקת תמיכה בסביבת זמן ריצה עבור:
- עיבוד מקדים של הקובץ הבינארי לבדיקה כדי לקבל את כל רכיבי HAL הרשומים לבדיקה.
- זיהוי כל מופעי השירות הפעילים והשגת שם השירות עבור
כל מופע (מאוחזר לפי
vendor/manifest.xml
). - חישוב כל השילובים של מכונות (לתמיכה ב-HAL מרובים) בדיקה).
- יצירת בדיקה חדשה לכל מכונה של שירות (שילוב).
דוגמה:
הגדרה של בדיקות בצד היעד עם מוּדעוּת לשם שירות
כדי להגדיר את סביבת הבדיקה לבדיקה באמצעות מודעוּת לשם של שירות בצד היעד:
- הגדרת
testEnvironment
על סמךVtsHalHidlTargetTestEnvBase
ורשום דפי HAL לבדיקה:#include <VtsHalHidlTargetTestEnvBase.h> class testEnvironment : public::testing::VtsHalHidlTargetTestEnvBase { virtual void registerTestServices() override { registerTestService<IFoo>(); } };
- כדי לעבור את הבדיקה, צריך להשתמש בפונקציה
getServiceName()
שסופקה על ידי סביבת הבדיקה שם השירות:::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default")); // "default" is the default service name you want to use.
- רושמים את סביבת הבדיקה ב-
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).
- הסקריפט haltest מציין את HAL של הטירגוט בשירות הרלוונטי בבדיקה.
-
hal_hidl_host_test
(מחלקה משנית שלparam_test
) מקבלת את מבחן HAL/הבחינות הרשום מ- סקריפט בדיקה, מזהה את שמות השירותים המתאימים עבור ה-HAL לבדיקה, ואז יוצר שילובים של שמות שירות (לבדיקה מרובת HAL) כבדיקה . היא גם מספקת את השיטהgetHalServiceName()
הפונקציה מחזירה את שם השירות התואם בהתאם לפרמטר שהועבר אל את תרחיש הבדיקה הנוכחי. - param_test תומכת בלוגיקה לקבלת רשימה של פרמטרים ולהריץ את כל מקרי בדיקה כנגד כל פרמטר. כלומר, בכל מקרה בדיקה הוא יוצר N מקרה בדיקה עם פרמטרים (N = גודל הפרמטרים), לכל אחד מהם הפרמטר.
הגדרה של בדיקות בצד המארח עם מוּדעוּת לשם שירות
כדי להגדיר את סביבת הבדיקה לבדיקה באמצעות מודעוּת לשם שירות בצד המארח:
- יש לציין את שירות היעד HAL בסקריפט הבדיקה:
TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
- קוראים לפונקציה
getHalServiceName()
ומעבירים את השם כדי להפעיל 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 לבדיקה
בגרסאות קודמות של Android, מערכת VTS זיהתה את הבדיקה של HAL באמצעות
אפשרות אחת (<precondition-lshal>
) הוגדרה בטווח
AndroidTest.xml
. היה קשה לשמור על הגישה הזו (
הסתמכו על מפתחים להגדיר את הבדיקה כמו שצריך ולעדכן את
בהתאם לכך) ולא מדויקות (כי היא הכילה רק את החבילה
ואת פרטי הגרסה ולא את פרטי הממשק).
ב-Android 9, מערכת VTS מזהה את בדיקת ה-HAL באמצעות המוּדעוּת לשם של שירות מסוים. בדיקות HAL רשומות שימושיות גם עבור:
- בדיקות של תנאים מוקדמים. לפני שמריצים בדיקת HAL, התכונה VTS יכולה צריך לוודא ש-HAL לבדיקה זמין במכשיר היעד ולדלג על הבדיקות אם לא, (עיינו במאמר VTS) בדיקת יכולת הבדיקה).
- מדידת כיסוי. ב-VTS יש תמיכה בקוד בין תהליכים מדידת הכיסוי באמצעות הידע על שירותי ה-HAL המשמשים לבדיקה למדידה (כלומר, לשטוף את הכיסוי של תהליך ה-Hal).