Koneksi perangkat baru memicu serangkaian peristiwa asinkron yang tidak jelas, tetapi perlu dipahami.
Terhubung secara fisik
Tradefed menggunakan library ddmlib
(library adb
Java) untuk memberikan interaksi
dasar dengan adb
dan perangkat. Bagian dari solusi ini adalah
antarmuka IDeviceChangeListener
yang memungkinkan penerimaan peristiwa perangkat baru, seperti:
deviceConnected
: Saat perangkat baru dilihat olehadb
deviceDisconnected
: Saat perangkat tidak lagi melaporkan keadb
deviceChanged
: 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 harness pengujian, kita memerlukan status
yang lebih kuat dari ini untuk memastikan perangkat benar-benar siap untuk mulai menjalankan pengujian; perangkat
tidak boleh terpengaruh oleh potensi ketidakstabilan status yang dapat terjadi dengan perangkat
yang baru terhubung.
Berikut adalah urutan peristiwa di Tradefed:
- Perangkat dikenali sebagai
deviceConnected
dan terbuka untuk acara rutin dariadb
Peristiwa Tradefed internal dibuat yang akan:
- Periksa apakah perangkat sudah diketahui; Tradefed menyimpan referensi internal ke beberapa perangkat (terutama perangkat yang saat ini dialokasikan dan menjalankan pengujian) untuk menghindari TF kehilangan jejak secara acak.
- Periksa apakah perangkat adalah
ONLINE
atauOFFLINE
.
Jika perangkat:
OFFLINE
: Perangkat akan dialihkan ke statusCONNECTED_OFFLINE
Tradefed, yang belum mengizinkan perangkat menjalankan pengujian. Jika nanti perangkat online, perangkat akan melalui siklusONLINE
. Jika kita menerima peristiwadeviceDisconnect
, perangkat akan dihapus dari daftar.ONLINE
(seperti yang terlihat oleh adb): Perangkat akan ditempatkan dalam statusCONNECTED_ONLINE
dan ketersediaannya akan diperiksa untuk alokasi pengujian:checking_availability
.
Jika pemeriksaan
availability
berhasil, perangkat akan ditandai sebagai tersedia untuk alokasi pengujian; perangkat akan dapat menjalankan pengujian. Jika tidak, perangkat akan ditandai sebagaiunavailable
untuk 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 saat ini 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 itu dapat terjadi, misalnya, saat pengujian memulai ulang
perangkat.
Perangkat virtual yang terhubung dengan adb connect
Saat perangkat virtual jarak jauh dibuat, Tradefed akan terhubung ke perangkat tersebut menggunakan adb
connect
. Tindakan 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 deviceTerhubung terjadi
Saat deviceConnected
terjadi, ddmlib
akan membuat referensi baru
IDevice
untuk melacak perangkat yang baru terhubung.
Tradefed menggunakan referensi tersebut dan menggabungkannya dalam implementasi antarmuka
perangkat
ITestDevice
sendiri untuk memberikan layanan yang lebih canggih. Namun, IDevice yang mendasarinya selalu
berasal dari ddmlib
.
Hal ini berarti, 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 masih diganti sehingga pengujian dapat dilanjutkan pada referensi yang tepat. Hal ini dilakukan dengan lancar setiap kali perangkat terputus/terhubung kembali (misalnya, selama mulai ulang).