Android 9 มีการรองรับการขอรับบริการ ชื่อของอินสแตนซ์ HAL ที่ระบุตามอุปกรณ์ที่ชุดทดสอบของผู้ให้บริการ กำลังทดสอบ (VTS) เรียกใช้การทดสอบ VTS HAL ที่ตระหนักถึงชื่อบริการ ช่วยให้นักพัฒนาซอฟต์แวร์สามารถทดสอบส่วนขยายผู้ให้บริการ, HAL หลายรายการ และ อินสแตนซ์ HAL หลายรายการในการเรียกใช้การทดสอบ VTS ทั้งฝั่งเป้าหมายและฝั่งโฮสต์
เกี่ยวกับชื่อบริการ
อินสแตนซ์ของบริการ HAL ที่ใช้งานอยู่แต่ละรายการจะลงทะเบียนตัวเองโดยใช้ชื่อบริการ
ใน Android เวอร์ชันก่อนหน้า นักพัฒนาแอปที่เรียกใช้การทดสอบ VTS HAL คือ
จำเป็นต่อการตั้งชื่อบริการที่ถูกต้องสำหรับไคลเอ็นต์ทดสอบใน
getService()
หรือเว้นชื่อให้ว่างไว้และใช้แทนค่าเริ่มต้น
ชื่อบริการ ข้อเสียของวิธีการนี้ได้แก่
- อาศัยความรู้ของนักพัฒนาแอปในการตั้งค่าบริการที่ถูกต้อง ชื่อ
- จำกัดไว้ให้ทดสอบกับอินสแตนซ์บริการเดียวโดยค่าเริ่มต้น
- การดูแลรักษาชื่อบริการด้วยตนเอง (เช่น เนื่องจากชื่อมีการฮาร์ดโค้ด แต่จะต้องมีการอัปเดตด้วยตนเองหากชื่อบริการมีการเปลี่ยนแปลง
ใน Android 9 นักพัฒนาซอฟต์แวร์จะได้รับ ชื่อบริการสำหรับอินสแตนซ์ HAL ที่ระบุตามอุปกรณ์ที่กำลังทดสอบ ข้อดีของวิธีนี้รวมถึงการรองรับการทดสอบ ได้แก่
- ส่วนขยาย HAL ของผู้ให้บริการ ตัวอย่างเช่น เมื่อผู้ให้บริการมี การใช้ Camera.provider HAL ที่ทำงานบนอุปกรณ์ของผู้ให้บริการ ชื่อบริการที่กำหนดเอง VTS สามารถระบุอินสแตนซ์ของผู้ให้บริการและทำการทดสอบ แข่งกับสิ่งนั้น
- อินสแตนซ์ HAL หลายรายการ ตัวอย่างเช่น เมื่อ
HAL ของ
graphics.composer
มี 2 อินสแตนซ์ (รายการหนึ่งมีชื่อบริการ) "ค่าเริ่มต้น" และอีกรายการหนึ่งชื่อบริการ "vr") VTS สามารถระบุทั้งอินสแตนซ์และ ทำการทดสอบกับแต่ละรูปแบบ - การทดสอบหลาย HAL ใช้เมื่อทดสอบ HAL หลายรายการกับ หลายอินสแตนซ์ เช่น เมื่อเรียกใช้การทดสอบ VTS ที่ยืนยันวิธี Keymaster และ HAL ผู้รักษาประตูทำงานร่วมกัน ทำให้ VTS สามารถทดสอบชุดค่าผสมทั้งหมดได้ อินสแตนซ์บริการสำหรับ HAL เหล่านั้น
การทดสอบฝั่งเป้าหมาย
ในการเปิดใช้การรับรู้ชื่อบริการสำหรับการทดสอบฝั่งเป้าหมาย Android
9 มีสภาพแวดล้อมการทดสอบที่ปรับแต่งได้
(VtsHalHidlTargetTestEnvBase
)
ซึ่งมีอินเทอร์เฟซสำหรับ
- ลงทะเบียน HAL การกำหนดเป้าหมายในการทดสอบ
- แสดงรายการ HAL ที่ลงทะเบียนทั้งหมด
- รับชื่อบริการสำหรับ HAL ที่จดทะเบียนซึ่งจัดหาโดยเฟรมเวิร์ก VTS
นอกจากนี้ เฟรมเวิร์ก 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)
- สคริปต์ hal test จะระบุ 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()
และส่งต่อชื่อไปที่ 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
ลงทะเบียน HAL การทดสอบ
ใน Android เวอร์ชันก่อนหน้า VTS ระบุการทดสอบ HAL โดยใช้
กำหนดค่าตัวเลือก <precondition-lshal>
รายการใน
AndroidTest.xml
วิธีนี้ดูแลได้ยาก (เนื่องจาก
ต้องอาศัยนักพัฒนาซอฟต์แวร์ในการกำหนดค่าการทดสอบอย่างถูกต้องและอัปเดต
การกำหนดค่าให้สอดคล้องกัน) และไม่ถูกต้อง (เนื่องจากมีเฉพาะแพ็กเกจ
และข้อมูลเวอร์ชัน ไม่ใช่ข้อมูลอินเทอร์เฟซ)
ใน Android 9 VTS จะระบุ HAL ของการทดสอบโดยใช้ การรับรู้ชื่อบริการ HAL การทดสอบที่ลงทะเบียนยังมีประโยชน์สำหรับสิ่งต่อไปนี้
- การตรวจสอบเงื่อนไขที่กำหนดไว้ล่วงหน้า ก่อนที่จะทำการทดสอบ HAL นั้น VTS สามารถ ตรวจสอบว่า HAL การทดสอบพร้อมใช้งานในอุปกรณ์เป้าหมายและข้ามการทดสอบ หากไม่ใช่ (โปรดดู VTS การตรวจสอบความสามารถในการทดสอบ)
- การวัดการครอบคลุม VTS รองรับโค้ดข้ามกระบวนการ การวัดความครอบคลุมผ่านความรู้เกี่ยวกับบริการ HAL การทดสอบที่ธุรกิจต้องการ เพื่อวัด (เช่น เพื่อล้างความครอบคลุมสำหรับกระบวนการให้บริการ Half)