Kiểm tra HAL nhận biết tên dịch vụ

Android 9 bao gồm hỗ trợ 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 thử nghiệm của Bộ kiểm tra nhà cung cấp (VTS) đang chạy. Việc chạy thử nghiệm VTS HAL có nhận biết tên dịch vụ cho phép nhà phát triển tự động hóa các tiện ích mở rộng của nhà cung cấp thử nghiệm, nhiều HAL và nhiều phiên bản HAL trên cả lần chạy thử nghiệm VTS phía mục tiêu và phía máy chủ.

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 một tên dịch vụ.

Trong các phiên bản Android trước, các nhà phát triển chạy thử nghiệm VTS HAL được yêu cầu đặt tên dịch vụ chính xác cho ứng dụng khách thử nghiệm trong getService() hoặc để trống tên và chuyển sang 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 thử nghiệm để đặt tên dịch vụ chính xác.
  • Theo mặc định, bị giới hạn ở việc thử nghiệm đối với một phiên bản dịch vụ duy nhất.
  • Bảo trì thủ công tên dịch vụ (tức là vì tên được mã hóa cứng nên phải cập nhật 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 thử nghiệm. Ưu điểm của phương pháp này bao gồm hỗ trợ thử nghiệm:

  • Phần mở rộng HAL của nhà cung cấp . Ví dụ: khi nhà cung cấp triển khai HAL camera.provider chạy trên thiết bị của nhà cung cấp có tên dịch vụ tùy chỉnh, VTS có thể xác định phiên bản của nhà cung cấp và chạy thử nghiệm đối với phiên bản đó.
  • Nhiều trường hợp HAL . Ví dụ: khi graphics.composer HAL có hai phiên bản (một phiên bản có tên dịch vụ "mặc định" 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 đó.
  • Thử nghiệm đa HAL . Được sử dụng khi kiểm tra nhiều HAL với nhiều phiên bản. Ví dụ: khi chạy kiểm tra VTS để xác minh cách HAL keymaster và Gatekeeper hoạt động cùng nhau, VTS có thể kiểm tra tất cả các kết hợp phiên bản dịch vụ cho các HAL đó.

Kiểm tra phía mục tiêu

Để cho phép nhận biết tên dịch vụ cho thử nghiệm phía mục tiêu, Android 9 bao gồm môi trường thử nghiệm có thể tùy chỉnh ( VtsHalHidlTargetTestEnvBase ) cung cấp giao diện cho:

  • Đăng ký (các) HAL nhắm mục tiêu trong thử nghiệm.
  • Liệt kê tất cả cá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 cung cấp hỗ trợ thời gian chạy cho:

  • Xử lý trước tệp nhị phân thử nghiệm để nhận tất cả (các) HAL thử nghiệm đã đăng ký.
  • Xác định tất cả các phiên bản dịch vụ đang chạy và nhận 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 kết hợp phiên bản (để hỗ trợ nhiều thử nghiệm HAL).
  • Tạo thử nghiệm mới cho từng phiên bản dịch vụ (kết hợp).

Ví dụ:

Runtime support for target-side testing

Hình 1. Hỗ trợ thời gian chạy khung VTS để thử nghiệm phía mục tiêu

Thiết lập các thử nghiệm phía mục tiêu nhận biết tên dịch vụ

Để thiết lập môi trường thử nghiệm của bạn cho thử nghiệm nhận biết tên dịch vụ phía mục tiêu:

  1. Xác định testEnvironment dựa trên VtsHalHidlTargetTestEnvBase và đăng ký HAL thử nghiệm:
    #include <VtsHalHidlTargetTestEnvBase.h>
    class testEnvironment  : public::testing::VtsHalHidlTargetTestEnvBase {
          virtual void registerTestServices() override {
        registerTestService<IFoo>();
          }
    };
  2. Sử dụng getServiceName() do môi trường thử nghiệm cung cấp để chuyển tên dịch vụ:
    ::testing::VtsHalHidlTargetTestBase::getService<IFoo>(testEnv->getServiceName<IFoo>("default"));
    // "default" is the default service name you want to use.
  3. Đăng ký môi trường thử nghiệm trong 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();
    }

Để biết thêm ví dụ, hãy tham khảo VtsHalCameraProviderV2_4TargetTest.cpp .

Kiểm tra phía máy chủ VTS

Các thử nghiệm phía máy chủ VTS chạy các tập lệnh thử nghiệm ở phía máy chủ thay vì các tệp nhị phân thử nghiệm trên thiết bị đích. Để bật tính năng nhận biết tên dịch vụ cho các thử nghiệm này, bạn có thể sử dụng mẫu phía máy chủ để chạy cùng một tập lệnh thử nghiệm nhiều lần với các tham số khác nhau (tương tự như thử nghiệm được tham số hóa gtest).

Runtime support for host-side testing

Hình 2. Hỗ trợ thời gian chạy khung VTS cho thử nghiệm phía máy chủ
  • Tập lệnh kiểm tra hal chỉ định (các) dịch vụ HAL nhắm mục tiêu trong thử nghiệm.
  • hal_hidl_host_test (lớp con của param_test ) lấy (các) HAL thử nghiệm đã đăng ký từ tập lệnh thử nghiệm, xác định (các) tên dịch vụ tương ứng cho HAL thử nghiệm, sau đó tạo các tổ hợp tên dịch vụ (dành cho thử nghiệm nhiều HAL) làm tham số thử nghiệm. Nó cũng cung cấp một phương thức getHalServiceName() trả về tên dịch vụ tương ứng theo tham số được truyền cho trường hợp thử nghiệm hiện tại.
  • Mẫu param_test hỗ trợ logic để chấp nhận danh sách các tham số và chạy tất cả các trường hợp kiểm thử nhất định đối với từng tham số. Tức là với mỗi trường hợp thử nghiệm, nó tạo ra N trường hợp thử nghiệm được tham số hóa mới (N = kích thước của tham số), mỗi trường hợp có một tham số nhất định.

Thiết lập các thử nghiệm phía máy chủ nhận biết tên dịch vụ

Để thiết lập môi trường thử nghiệm của bạn để thử nghiệm nhận biết tên dịch vụ phía máy chủ:

  1. Chỉ định dịch vụ HAL mục tiêu trong tập lệnh thử nghiệm:
    TEST_HAL_SERVICES = { "android.hardware.foo@1.0::IFoo" }
    
  2. Gọi getHalServiceName() và chuyển tên cho 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))
    

Để biết thêm ví dụ, hãy tham khảo VtsHalMediaOmxStoreV1_0HostTest.py .

Đăng ký thử nghiệm HALs

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 tùy chọn <precondition-lshal> được định cấu hình trong AndroidTest.xml . Cách tiếp cận này khó duy trì (vì nó phụ thuộc vào các nhà phát triển để định cấu hình thử nghiệm đúng cách và cập nhật cấu hình phù hợp) và không chính xác (vì nó chỉ chứa thông tin về gói và phiên bản chứ không phải thông tin giao diện).

Trong Android 9, VTS xác định HAL thử nghiệm bằng cách sử dụng nhận thức về tên dịch vụ. HAL thử nghiệm đã đăng ký cũng hữu ích cho:

  • Kiểm tra điều kiện tiên quyết . Trước khi chạy thử nghiệm HAL, VTS có thể xác nhận HAL thử nghiệm có sẵn trên thiết bị mục tiêu và bỏ qua các thử nghiệm nếu không có (tham khảo phần kiểm tra khả năng thử nghiệm của VTS ).
  • Đo lường độ che phủ . VTS hỗ trợ đo lường phạm vi bao phủ mã đa quy trình thông qua kiến ​​thức về các dịch vụ HAL thử nghiệm mà nó muốn đo lường (tức là xóa phạm vi bao phủ cho quy trình dịch vụ hal).