Bộ kiểm thử nhà cung cấp (VTS) Android 9 hỗ trợ một phương thức thời gian chạy để sử dụng cấu hình thiết bị nhằm xác định những bài kiểm thử VTS cần bỏ qua cho mục tiêu thiết bị đó.
Tính linh hoạt của bài kiểm thử VTS
Kể từ Android 8.0, các bài kiểm thử VTS là bắt buộc đối với tất cả thiết bị ra mắt bằng Android 8.0 trở lên. Tuy nhiên, không phải tất cả bài kiểm thử VTS đều áp dụng cho mọi mục tiêu thiết bị. Ví dụ:
- Nếu một thiết bị cụ thể không hỗ trợ HAL kiểm thử (ví dụ: IR), thì VTS không cần chạy các bài kiểm thử cho bài kiểm thử HAL đó đối với mục tiêu thiết bị đó.
- Nếu một số thiết bị dùng chung cùng một SoC và hình ảnh nhà cung cấp nhưng có các chức năng phần cứng khác nhau, thì VTS phải xác định xem có nên chạy hay bỏ qua một bài kiểm thử cho một mục tiêu thiết bị cụ thể hay không.
Các loại bài kiểm thử VTS
VTS bao gồm các loại bài kiểm thử sau:
- Các bài kiểm thử Tuân thủ đảm bảo khả năng tương thích giữa các phân vùng khung và nhà cung cấp. Bạn phải chạy (và vượt qua) các bài kiểm thử này trên các thiết bị ra mắt bằng Android 8.0 trở lên.
- Các bài kiểm thửKhông tuân thủ giúp nhà cung cấp cải thiện chất lượng sản phẩm (hiệu suất/fuzzing, v.v.). Nhà cung cấp có thể chọn chạy các bài kiểm thử này.
Việc một bài kiểm thử có phải là bài kiểm thử tuân thủ hay không phụ thuộc vào gói mà bài kiểm thử đó thuộc về. Các bài kiểm thử chạy theo gói VTS được coi là bài kiểm thử tuân thủ.
Xác định các HAL được hỗ trợ
VTS có thể sử dụng các tệp sau để xác định xem mục tiêu thiết bị có hỗ trợ một HAL cụ thể hay không:
/system/compatibility_matrix.xml. Yêu cầu các thực thể HAL mà khung cần. Ví dụ:<hal format="hidl" optional="true"> <name>android.hardware.vibrator</name> <version>1.0-1</version> <interface> <name>IVibrator</name> <instance>default</instance> </interface> </hal>- Thuộc tính
optionalcho biết liệu khung có thực sự cần HAL hay không. - Tệp này có thể chứa nhiều mục cho cùng một HAL (có cùng tên) nhưng có phiên bản và giao diện khác nhau.
- Tệp này có thể chứa nhiều cấu hình
versioncho cùng một mục, cho biết khung có thể hoạt động với nhiều phiên bản. version1.0-1có nghĩa là khung có thể hoạt động với phiên bản thấp nhất phiên bản 1.0 và không yêu cầu phiên bản cao hơn 1.1.
- Thuộc tính
manifest.xmlcủa thiết bị. Yêu cầu các thực thể HAL do nhà cung cấp cung cấp. Ví dụ:<hal format="hidl"> <name>android.hardware.vibrator</name> <transport>hwbinder</transport> <version>1.2</version> <interface> <name>IVibrator</name> <instance>default</instance> </interface> </hal>- Tệp này có thể chứa nhiều mục cho cùng một HAL (có cùng tên) nhưng có phiên bản và giao diện khác nhau.
- Nếu tệp này chỉ chứa một cấu hình
versioncho một mục, thìversion1.2có nghĩa là nhà cung cấp hỗ trợ tất cả các phiên bản từ 1.0 đến 1.2.
- lshal. Một công cụ trên thiết bị cho biết thông tin thời gian chạy về
các dịch vụ HAL đã đăng ký với
hwservicemanager. Ví dụ:android.hardware.vibrator@1.0::IVibrator/default
lshalcũng cho thấy tất cả các HAL có triển khai chuyển tiếp (tức là có tệp-impl.sotương ứng trên thiết bị). Ví dụ:android.hardware.nfc@1.0::I*/* (/vendor/lib/hw/) android.hardware.nfc@1.0::I*/* (/vendor/lib64/hw/)
Bài kiểm thử tuân thủ
Đối với các bài kiểm thử tuân thủ, VTS dựa vào tệp kê khai của nhà cung cấp để xác định (và kiểm thử) tất cả các thực thể HAL do thiết bị cung cấp. Quy trình quyết định:
Bài kiểm thử không tuân thủ
Đối với các bài kiểm thử không tuân thủ, VTS dựa vào tệp kê khai của nhà cung cấp và
lshal đầu ra để xác định (và kiểm thử) các HAL thử nghiệm không
được yêu cầu trong tệp manifest.xml. Quy trình quyết định:
Tìm tệp kê khai của nhà cung cấp
VTS kiểm tra tệp manifest.xml của nhà cung cấp ở những vị trí sau theo thứ tự sau:
/vendor/etc/vintf/manifest.xml+ tệp kê khai ODM (Nếu cùng một HAL được xác định ở cả hai vị trí, thì tệp kê khai ODM sẽ ghi đè tệp kê khai trong/vendor/etc/vintf/manifest.xml)/vendor/etc/vintf/manifest.xml- Tệp
manifest.xmlODM, được tải từ các tệp sau theo thứ tự sau:/odm/etc/vintf/manifest_$(ro.boot.product.hardware.sku).xml/odm/etc/vintf/manifest.xml/odm/etc/manifest_$(ro.boot.product.hardware.sku).xml/odm/etc/manifest.xml/vendor/manifest.xml
Công cụ kiểm tra khả năng kiểm thử VTS
The
vts_testibility_checker là một tệp nhị phân được đóng gói bằng VTS và được
khung kiểm thử VTS sử dụng trong thời gian chạy để xác định xem một bài kiểm thử HAL nhất định có
thể kiểm thử hay không. Công cụ này dựa trên
libvintf
để tải và phân tích cú pháp tệp kê khai của nhà cung cấp, đồng thời triển khai quy trình quyết định
được mô tả trong phần trước.
Cách sử dụng vts_testability_check:
- Đối với bài kiểm thử tuân thủ:
vts_testability_check -c -b <bitness> <hal@version>
- Đối với bài kiểm thử không tuân thủ:
vts_testability_check -b <bitness> <hal@version>
Đầu ra của vts_testability_check sử dụng định dạng json
sau:
{testable: <True/False> Instances: <list of instance names of HAL service>}Xác định các HAL được truy cập
Để xác định những HAL mà các bài kiểm thử VTS truy cập, hãy đảm bảo rằng mỗi bài kiểm thử HAL
sử dụng
VtsHalHidlTargetTestEnvBase
mẫu để đăng ký(các) HAL được truy cập trong bài kiểm thử. Sau đó, khung kiểm thử VTS
có thể trích xuất các HAL đã đăng ký khi tiền xử lý bài kiểm thử.
Đối với các bài kiểm thử tuân thủ, bạn cũng có thể kiểm tra
/system/etc/vintf/manifest.xml. Nếu một HAL được xác định ở đây, thì VTS
sẽ kiểm thử HAL đó. (Đối với các dịch vụ HAL do hệ thống cung cấp (ví dụ:
graphics.composer/vr), các HAL được khai báo trong
/system/manifest.xml.)