Android 9 hỗ trợ việc lấy tên dịch vụ của một phiên bản HAL nhất định dựa trên thiết bị mà các bài kiểm thử Vendor Test Suite (VTS) đang chạy. Việc chạy các kiểm thử HAL VTS có nhận biết tên dịch vụ cho phép nhà phát triển tự động hoá các tiện ích của nhà cung cấp kiểm thử, nhiều HAL và nhiều phiên bản HAL trên cả các lần chạy kiểm thử VTS phía máy chủ và phía mục tiêu.
Giới thiệu về tên dịch vụ
Mỗi phiên bản của dịch vụ HAL đang chạy sẽ tự đăng ký bằng tên dịch vụ.
Trong các phiên bản Android trước đây, những nhà phát triển chạy các kiểm thử VTS HAL bắt buộc phải đặt tên dịch vụ chính xác cho ứng dụng kiểm thử trong getService()
hoặc để trống tên và quay lại tên dịch vụ mặc định. Nhược điểm của phương pháp này bao gồm:
- Dựa vào kiến thức của nhà phát triển kiểm thử để đặt tên dịch vụ chính xác.
- Theo mặc định, chỉ được phép kiểm thử trên một phiên bản dịch vụ duy nhất.
- Bảo trì tên dịch vụ theo cách thủ công (tức là vì tên được mã hoá cứng, nên bạn phải cập nhật theo cách thủ công nếu tên dịch vụ thay đổi.
Trong Android 9, nhà phát triển có thể tự động lấy tên dịch vụ cho một phiên bản HAL nhất định dựa trên thiết bị đang được kiểm thử. Ưu điểm của phương pháp này bao gồm việc hỗ trợ kiểm thử:
- Tiện ích HAL của nhà cung cấp. Ví dụ: khi nhà cung cấp có một cách triển khai camera.provider HAL chạy trên các thiết bị của nhà cung cấp có tên dịch vụ tuỳ chỉnh, VTS có thể xác định phiên bản nhà cung cấp và chạy thử nghiệm dựa trên phiên bản đó.
- Nhiều thực thể HAL. Ví dụ: khi HAL
graphics.composer
có 2 phiên bản (một phiên bản có tên dịch vụ "default" và một phiên bản có tên dịch vụ "vr"), VTS có thể xác định cả hai phiên bản và chạy thử nghiệm đối với từng phiên bản. - Kiểm thử Multi-HAL. Được dùng khi kiểm thử nhiều HAL với nhiều phiên bản. Ví dụ: khi chạy kiểm thử VTS để xác minh cách các HAL KeyMint (trước đây là Keymaster) và Gatekeeper hoạt động cùng nhau, VTS có thể kiểm thử tất cả các tổ hợp phiên bản dịch vụ cho những HAL đó.
Kiểm thử phía mục tiêu
Để bật tính năng nhận biết tên dịch vụ cho hoạt động kiểm thử phía đích, Android 9 có một môi trường kiểm thử có thể tuỳ chỉnh (VtsHalHidlTargetTestEnvBase
) cung cấp các giao diện để:
- Đăng ký(các) HAL nhắm mục tiêu trong kiểm thử.
- Liệt kê tất cả HAL đã đăng ký.
- Nhận(các) tên dịch vụ cho(các) HAL đã đăng ký do khung VTS cung cấp.
Ngoài ra, khung VTS còn hỗ trợ thời gian chạy cho:
- Xử lý trước tệp nhị phân kiểm thử để nhận tất cả(các) HAL kiểm thử đã đăng ký.
- Xác định tất cả các phiên bản dịch vụ đang chạy và lấy tên dịch vụ cho từng phiên bản (được truy xuất dựa trên
vendor/manifest.xml
). - Tính toán tất cả các tổ hợp phiên bản (để hỗ trợ nhiều hoạt động kiểm thử HAL).
- Tạo một bài kiểm thử mới cho từng phiên bản dịch vụ (tổ hợp).
Ví dụ:
Thiết lập các kiểm thử phía mục tiêu có nhận biết tên dịch vụ
Cách thiết lập môi trường kiểm thử để kiểm thử có nhận biết tên dịch vụ phía đích:
- Xác định
testEnvironment
dựa trênVtsHalHidlTargetTestEnvBase
và đăng ký HAL kiểm thử:#include <VtsHalHidlTargetTestEnvBase.h> class testEnvironment : public::testing::VtsHalHidlTargetTestEnvBase { virtual void registerTestServices() override { registerTestService<IFoo>(); } };
- Sử dụng
getServiceName()
do môi trường kiểm thử cung cấp để truyền tên dịch vụ:::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default")); // "default" is the default service name you want to use.
- Đăng ký môi trường kiểm thử trong
main()
và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(); }
Để xem thêm ví dụ, hãy tham khảo VtsHalCameraProviderV2_4TargetTest.cpp
.
Các kiểm thử phía máy chủ lưu trữ VTS
Các kiểm thử phía máy chủ lưu trữ VTS chạy tập lệnh kiểm thử ở phía máy chủ lưu trữ thay vì các tệp nhị phân kiểm thử trên thiết bị mục tiêu. Để bật tính năng nhận biết tên dịch vụ cho các kiểm thử này, bạn có thể sử dụng các mẫu phía máy chủ lưu trữ để chạy cùng một tập lệnh kiểm thử nhiều lần dựa trên các tham số khác nhau (tương tự như kiểm thử được tham số hoá gtest).
- Tập lệnh hal test chỉ định(các) dịch vụ HAL nhắm đến trong quy trình kiểm thử.
hal_hidl_host_test
(lớp con củaparam_test
) lấy(các) HAL kiểm thử đã đăng ký từ tập lệnh kiểm thử, xác định(các) tên dịch vụ tương ứng cho HAL kiểm thử, sau đó tạo các tổ hợp tên dịch vụ (để kiểm thử nhiều HAL) làm tham số kiểm thử. Nó cũng cung cấp một phương thứcgetHalServiceName()
trả về tên dịch vụ tương ứng theo tham số được truyền đến trường hợp kiểm thử hiện tại.- Mẫu param_test hỗ trợ logic chấp nhận danh sách các thông số và chạy tất cả các trường hợp kiểm thử đã cho đối với từng thông số. Tức là đối với mỗi trường hợp kiểm thử, nó sẽ tạo N trường hợp kiểm thử được tham số hoá mới (N = kích thước của các tham số), mỗi trường hợp có một tham số nhất định.
Thiết lập các kiểm thử phía máy chủ lưu trữ có nhận biết tên dịch vụ
Cách thiết lập môi trường kiểm thử để kiểm thử nhận biết tên dịch vụ phía máy chủ lưu trữ:
- Chỉ định dịch vụ HAL mục tiêu trong tập lệnh kiểm thử:
TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
- Gọi
getHalServiceName()
và truyền tên để khởi động 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))
Để xem thêm ví dụ, hãy tham khảo VtsHalMediaOmxStoreV1_0HostTest.py
.
Đăng ký HAL thử nghiệm
Trong các phiên bản Android trước, VTS xác định HAL thử nghiệm bằng cách sử dụng lựa chọn <precondition-lshal>
được định cấu hình trong AndroidTest.xml
. Phương pháp này khó duy trì (vì phương pháp này dựa vào nhà phát triển để định cấu hình kiểm thử đúng cách và cập nhật cấu hình cho phù hợp) và không chính xác (vì phương pháp này chỉ chứa thông tin về gói và phiên bản chứ không phải thông tin về giao diện).
Trong Android 9, VTS xác định HAL kiểm thử bằng cách nhận biết tên dịch vụ. Các HAL kiểm thử đã đăng ký cũng hữu ích cho:
- Kiểm tra điều kiện tiên quyết. Trước khi chạy một kiểm thử HAL, VTS có thể xác nhận rằng HAL kiểm thử có trên thiết bị đích và bỏ qua các kiểm thử nếu không có (tham khảo kiểm tra khả năng kiểm thử VTS).
- Đo lường phạm vi phủ sóng. VTS hỗ trợ đo lường mức độ phù hợp của mã trên nhiều quy trình thông qua kiến thức về các dịch vụ HAL mà hệ thống muốn đo lường (tức là để xoá mức độ phù hợp cho quy trình dịch vụ HAL).