Tải các giao thức với cấu hình toàn cầu

Để hiểu phần này, trước tiên hãy nghiên cứu Tradefed @Option .

Các tùy chọn điển hình trong Tradefed cho phép các lớp kiểm tra nhận thông tin bổ sung từ cấu hình XML hoặc dòng lệnh. Tính năng này cho phép bạn thực hiện thêm một bước nữa và giải quyết một số thông tin bổ sung này nếu cần.

Ví dụ về tùy chọn tệp

Tệp ví dụ @option:

@Option(name = 'config-file')
private File mConfigFile;

Ở trên có thể được đặt thông qua cấu hình XML:

<option name="config-file" value="/tmp/file" />

hoặc thông qua lệnh:

--config-file /tmp/file

Sự miêu tả

Tính năng này cho phép bạn giải quyết các @Options được nhập vào tệp ở xa thành một tệp cục bộ để có sẵn một cách liền mạch theo quan điểm của người dùng.

Để tính năng này hoạt động, tệp cần được chỉ định bằng đường dẫn kiểu từ xa . Ví dụ:

--config-file gs://bucket/tmp/file

Đường dẫn này trỏ đến một tệp trong bộ chứa Google Cloud Storage (GCS) nơi tệp được lưu trữ. Được giao dịch khi nhìn thấy đường dẫn từ xa đó, sẽ cố gắng tải xuống tệp cục bộ và gán nó cho @Option. Điều này dẫn đến biến mConfigFile bây giờ trỏ đến phiên bản cục bộ của tệp mà thử nghiệm có thể sử dụng.

Nếu không thể tải xuống tệp từ xa vì bất kỳ lý do gì, Tradefed sẽ đưa ra ConfigurationException để ngăn việc chạy thử nghiệm. Chúng tôi coi việc thiếu các tệp đó là lỗi nghiêm trọng vì một số thành phần thử nghiệm cũng sẽ bị thiếu.

Sử dụng tham số truy vấn

Có thể thêm tham số truy vấn vào URL bằng cách sử dụng ? . Ví dụ: gs://bucket/path?unzip=true . Khóa/giá trị unzip=true sẽ có sẵn trong quá trình triển khai giao diện IRemoteFileResolver .

Hai hành vi tích hợp có sẵn:

  • giải nén: Nếu được đặt thành true và tệp đã tải xuống là zip, nó sẽ tự động được giải nén đến một vị trí tạm thời. Ví dụ: ?unzip=true
  • tùy chọn: Mặc định là false . Nếu được đặt thành true và độ phân giải không thành công, nó sẽ không đưa ra ngoại lệ và đơn giản là sẽ không thay thế tệp. Ví dụ: ?optional=true

Bạn cũng có thể chuyển các đối số truy vấn chung thông qua --dynamic-download-args key=value sẽ chuyển khóa/giá trị cho tất cả các lượt tải xuống động đã thử trong lệnh gọi.

Các giao thức được hỗ trợ

Các giao thức được hỗ trợ chính thức và định dạng tương ứng của chúng là:

  • Google Cloud Storage, giao thức: gs , định dạng: gs://<bucket name>/path
  • Tệp cục bộ, giao thức: file , định dạng: file:/local/path
  • liên kết http, giao thức: http , định dạng: http://url
  • liên kết https, giao thức: https , định dạng: https://url

Hạn chế

Độ phân giải động của @Option hiện chỉ hỗ trợ một số giao thức và vị trí giới hạn để tải xuống. Độ phân giải của @Option hiện chỉ được bật cho cấu hình XML Tradefed chính.

Nếu chạy dưới dạng một bộ, các mô-đun hiện tại ( AndroidTest.xml ) sẽ không giải quyết các tệp theo mặc định. Điều này nhằm ngăn chặn các mô-đun tạo ra một số phụ thuộc không xác định . Điều này có thể được khắc phục bằng cách sử dụng --enable-module-dynamic-download ở cấp bộ, nhưng các bộ chính như Bộ kiểm tra tương thích (CTS)Bộ kiểm tra nhà cung cấp (VTS) sẽ không kích hoạt nó.

Thực hiện một giao thức mới

Các giao thức được hỗ trợ có triển khai trong Tradefed của giao diện IRemoteFileResolver , xác định thẻ ngắn của giao thức sẽ được khớp trong đường dẫn tệp thông qua getSupportedProtocol . Ví dụ: gs được sử dụng cho giao thức Google Cloud Storage. Giao diện được đề xuất triển khai là #resolveRemoteFiles(RemoteFileResolverArgs) sẽ là giao diện được duy trì lâu dài.

Các giao thức đã triển khai có thể được thêm vào tệp dịch vụ META-INF khai thác để chính thức bật hỗ trợ.