Sambungan perangkat baru memicu serangkaian peristiwa asinkron yang tidak jelas namun layak untuk dipahami.
Terhubung secara fisik
Tradefed menggunakan pustaka ddmlib
(perpustakaan adb
Java) untuk menyediakan interaksi dasar dengan adb
dan perangkat. Bagian dari solusi ini adalah antarmuka IDeviceChangeListener yang memungkinkan penerimaan peristiwa perangkat baru, seperti:
-
deviceConnected
: Ketika perangkat baru dilihat olehadb
-
deviceDisconnected
: Saat perangkat tidak lagi melaporkan keadb
-
deviceChanged
: Ketika keadaan perangkat utama terjadi (seperti perangkat offline atau perangkat online)
Peristiwa ini cukup di tingkat adb
untuk memutuskan apakah perangkat terhubung, online, atau offline atau tidak. Namun untuk test harness, kami membutuhkan status yang lebih kuat dari ini untuk memastikan perangkat benar-benar siap untuk mulai menjalankan pengujian; itu tidak boleh terpengaruh oleh potensi kerapuhan keadaan yang dapat datang dengan perangkat yang baru terhubung.
Berikut adalah rangkaian acara di Tradefed:
- Perangkat dikenali sebagai
deviceConnected
dan terbuka untuk acara reguler dariadb
Acara internal Tradefed dibuat yang akan:
- Periksa apakah perangkat sudah dikenal; Tradefed menyimpan referensi internal ke beberapa perangkat (terutama yang saat ini dialokasikan dan menjalankan tes) untuk menghindari TF kehilangan jejaknya secara acak.
- Periksa apakah perangkat
ONLINE
atauOFFLINE
.
Jika perangkat adalah:
OFFLINE
: Perangkat akan dialihkan ke statusCONNECTED_OFFLINE
Tradefed, yang belum memungkinkan perangkat menjalankan pengujian. Jika nanti perangkat online, maka akan melalui siklusONLINE
. Jika kami menerima acaradeviceDisconnect
, perangkat hanya akan dihapus dari daftar.ONLINE
(seperti yang terlihat oleh adb): Perangkat akan berada dalam statusCONNECTED_ONLINE
dan ketersediaannya akan diperiksa untuk alokasi pengujian:checking_availability
.
Jika pemeriksaan
availability
berhasil, perangkat akan ditandai sebagai tersedia untuk alokasi pengujian; itu akan dapat menjalankan tes. Jika tidak, perangkat akan ditandai sebagaiunavailable
untuk alokasi dan tidak dapat menerima tes apa pun.
Semua status ini tercermin di konsol Tradefed saat mendaftarkan perangkat melalui: tf> list devices
Penting untuk dicatat bahwa ketika perangkat saat ini dialokasikan untuk pengujian, sebagian besar hal di atas tidak akan terjadi dan Tradefed akan menentukan status perangkat secara internal. Jadi ada kemungkinan sebuah perangkat menghilang dari adb devices
saat masih terdaftar oleh Tradefed. Itu bisa terjadi ketika tes me-reboot perangkat misalnya.
Perangkat virtual terhubung melalui "adb connect"
Saat perangkat virtual jarak jauh dibuat, Tradefed menghubungkannya menggunakan adb connect
. Ini biasanya akan memicu perangkat ditampilkan di adb devices
sebagai <some ip>:<port number>
dan akan mengikuti urutan yang sama seperti perangkat yang terhubung secara fisik.
Pelacakan perangkat saat terjadi peristiwa deviceConnected
Ketika deviceConnected
terjadi, ddmlib
membuat IDevice referensi baru untuk melacak perangkat yang baru terhubung.
Tradefed menggunakan referensi itu dan membungkusnya dalam implementasinya sendiri dari antarmuka perangkat ITestDevice untuk menyediakan layanan yang lebih maju. Tetapi IDevice yang mendasarinya selalu yang berasal dari ddmlib
.
Ini berarti jika perangkat baru terhubung, ITestDevice baru dibuat dan dikaitkan dengan IDevice. Ketika ini terjadi selama pemanggilan dan ITestDevice sedang digunakan, IDevice yang mendasarinya masih diganti sehingga pengujian dapat dilanjutkan pada referensi yang tepat. Ini dilakukan dengan lancar setiap kali perangkat terputus/dihubungkan kembali (misalnya, selama reboot).