Một kết nối thiết bị mới sẽ kích hoạt một loạt các sự kiện không đồng bộ không rõ ràng nhưng đáng hiểu.
Kết nối vật lý
Tradefed sử dụng thư viện ddmlib
(thư viện adb
Java) để cung cấp hoạt động tương tác cơ bản với adb
và các thiết bị. Một phần của giải pháp này là giao diện IDeviceChangeListener cho phép tiếp nhận các sự kiện thiết bị mới, chẳng hạn như:
deviceConnected
: Khiadb
phát hiện thấy một thiết bị mớideviceDisconnected
: Khi thiết bị không báo cáo vớiadb
nữadeviceChanged
: Khi xảy ra trạng thái thiết bị chính (chẳng hạn như thiết bị ngoại tuyến hoặc thiết bị trực tuyến)
Các sự kiện này là đủ ở cấp adb
để quyết định xem thiết bị có kết nối, trực tuyến hay ngoại tuyến hay không. Tuy nhiên, đối với bộ kiểm thử, chúng ta cần một trạng thái mạnh hơn để đảm bảo thiết bị thực sự sẵn sàng bắt đầu chạy kiểm thử; trạng thái này không được bị ảnh hưởng bởi trạng thái không ổn định tiềm ẩn có thể xảy ra với một thiết bị mới kết nối.
Đây là trình tự của các sự kiện trong Tradefeed:
- Thiết bị được nhận dạng là
deviceConnected
và sẵn sàng nhận các sự kiện định kỳ từadb
Hệ thống sẽ tạo một sự kiện Tradefed nội bộ để:
- Kiểm tra xem thiết bị đã được biết hay chưa; Tradefed lưu giữ tệp tham chiếu nội bộ cho một số thiết bị (đặc biệt là thiết bị hiện đang được phân bổ và chạy kiểm thử) để tránh việc TF bị mất dấu các thiết bị đó một cách ngẫu nhiên.
- Kiểm tra xem thiết bị có phải là
ONLINE
hayOFFLINE
.
Nếu thiết bị là:
OFFLINE
: Thiết bị sẽ được chuyển sang trạng tháiCONNECTED_OFFLINE
của Tradefed, trạng thái này chưa cho phép thiết bị chạy kiểm thử. Nếu sau đó thiết bị có kết nối mạng, thiết bị sẽ trải qua chu kỳONLINE
. Nếu chúng ta nhận được một sự kiệndeviceDisconnect
, thiết bị sẽ bị xoá khỏi danh sách.ONLINE
(theo adb): Thiết bị sẽ được đặt ở trạng tháiCONNECTED_ONLINE
và sẽ được kiểm tra khả năng phân bổ để kiểm thử:checking_availability
.
Nếu kiểm tra
availability
thành công, thiết bị sẽ được đánh dấu là có sẵn để phân bổ kiểm thử; thiết bị sẽ có thể chạy kiểm thử. Nếu không, thiết bị sẽ được đánh dấu làunavailable
để phân bổ và không thể nhận được bất kỳ kiểm thử nào.
Tất cả các trạng thái này đều được phản ánh trong bảng điều khiển Tradefed khi liệt kê các thiết bị thông qua: tf> list devices
Điều quan trọng bạn cần lưu ý là khi thiết bị đang được phân bổ cho một chương trình kiểm thử, hầu hết những điều nêu trên sẽ không xảy ra và Tradefeed sẽ xác định trạng thái của thiết bị trong nội bộ. Vì vậy, một thiết bị có thể biến mất khỏi adb devices
trong khi vẫn được Tradefed liệt kê. Điều đó có thể xảy ra khi một kiểm thử đang khởi động lại thiết bị.
Thiết bị ảo đã kết nối với adb connect
Khi một thiết bị ảo từ xa được tạo, Tradefed sẽ kết nối với thiết bị đó bằng adb
connect
. Thao tác này thường sẽ kích hoạt thiết bị hiển thị trong adb devices
dưới dạng <some ip>:<port number>
và sẽ tuân theo trình tự tương tự như các thiết bị được kết nối thực tế.
Theo dõi thiết bị khi xảy ra sự kiện deviceConnected
Khi deviceConnected
xảy ra, ddmlib
sẽ tạo một tệp tham chiếu mới
IDevice
để theo dõi thiết bị mới kết nối.
Tradefeed sử dụng tham chiếu đó và gói nó trong cách triển khai giao diện thiết bị ITestDevice riêng để cung cấp dịch vụ nâng cao hơn. Tuy nhiên, IDevice cơ bản luôn là IDevice đến từ ddmlib
.
Điều này có nghĩa là nếu một thiết bị mới được kết nối, một ITestDevice mới sẽ được tạo và liên kết với IDevice. Khi điều này xảy ra trong một lệnh gọi và ITestDevice đang được sử dụng, IDevice cơ bản vẫn được thay thế để quá trình kiểm thử có thể tiếp tục dựa trên tệp tham chiếu thích hợp. Việc này được thực hiện liền mạch mỗi khi thiết bị bị ngắt kết nối/kết nối lại (ví dụ: trong quá trình khởi động lại).