Koneksi perangkat baru memicu serangkaian peristiwa asinkron yang belum jelas, tetapi perlu dipahami.
Terhubung secara fisik
Tradefed menggunakan library ddmlib (library 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: Saat perangkat baru terlihat olehadbdeviceDisconnected: Saat perangkat tidak lagi melaporkan keadbdeviceChanged: Saat status perangkat utama terjadi (seperti perangkat offline atau perangkat online)
Peristiwa ini cukup di tingkat adb untuk memutuskan apakah perangkat terhubung, online, atau offline. Namun, untuk test harness, kita memerlukan status yang lebih kuat daripada ini untuk memastikan perangkat benar-benar siap untuk mulai menjalankan pengujian; perangkat tidak boleh terpengaruh oleh potensi ketidakstabilan status yang dapat terjadi pada perangkat yang baru terhubung.
Berikut adalah urutan peristiwa di Tradefed:
- Perangkat dikenali sebagai
deviceConnecteddan terbuka untuk acara rutin dariadb Peristiwa Tradefed internal dibuat yang akan:
- Periksa apakah perangkat sudah dikenal; Tradefed menyimpan referensi internal ke beberapa perangkat (terutama yang saat ini dialokasikan dan menjalankan pengujian) untuk mencegah TF kehilangan jejaknya secara acak.
- Periksa apakah perangkat
ONLINEatauOFFLINE.
Jika perangkat adalah:
OFFLINE: Perangkat akan dialihkan ke statusCONNECTED_OFFLINETradefed, yang belum mengizinkan perangkat menjalankan pengujian. Jika perangkat kembali online, perangkat akan melalui siklusONLINE. Jika kita menerima peristiwadeviceDisconnect, perangkat akan dihapus dari daftar.ONLINE(seperti yang terlihat oleh adb): Perangkat akan dimasukkan ke statusCONNECTED_ONLINEdan ketersediaannya akan diperiksa untuk alokasi pengujian:checking_availability.
Jika pemeriksaan
availabilityberhasil, perangkat akan ditandai sebagai tersedia untuk alokasi pengujian; perangkat akan dapat menjalankan pengujian. Jika tidak, perangkat akan ditandai sebagaiunavailableuntuk alokasi dan tidak dapat menerima pengujian apa pun.
Semua status ini tercermin di konsol Tradefed saat mencantumkan perangkat melalui: tf> list devices
Penting untuk diperhatikan bahwa saat perangkat dialokasikan untuk pengujian,
sebagian besar hal di atas tidak akan terjadi dan Tradefed akan menentukan status perangkat
secara internal. Jadi, perangkat dapat menghilang dari adb devices saat masih tercantum oleh Tradefed. Hal ini dapat terjadi saat pengujian me-reboot
perangkat, misalnya.
Perangkat virtual terhubung dengan adb connect
Saat perangkat virtual jarak jauh dibuat, Tradefed akan terhubung ke perangkat tersebut menggunakan adb
connect. Hal ini biasanya akan memicu perangkat yang ditampilkan di adb devices sebagai
<some ip>:<port number> dan akan mengikuti urutan yang sama seperti perangkat yang terhubung
secara fisik.
Pelacakan perangkat saat peristiwa deviceConnected terjadi
Saat deviceConnected terjadi, ddmlib membuat referensi
IDevice
baru untuk melacak perangkat yang baru terhubung.
Tradefed menggunakan referensi tersebut dan membungkusnya dalam implementasi antarmuka perangkat
ITestDevice
sendiri untuk memberikan layanan yang lebih canggih. Namun, IDevice yang mendasarinya selalu berasal dari ddmlib.
Artinya, jika perangkat baru terhubung, ITestDevice baru akan dibuat dan dikaitkan dengan IDevice. Jika hal ini terjadi selama pemanggilan dan ITestDevice sedang digunakan, IDevice yang mendasarinya tetap diganti sehingga pengujian dapat dilanjutkan dengan referensi yang tepat. Hal ini dilakukan dengan lancar setiap kali perangkat terputus/terhubung kembali (misalnya, selama proses mulai ulang).