Koneksi perangkat baru memicu serangkaian peristiwa asinkron yang tidak jelas namun perlu dipahami.
Terhubung secara fisik
Tradefed menggunakan perpustakaan 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
: Saat perangkat baru dilihat olehadb
-
deviceDisconnected
: Saat perangkat tidak lagi melapor keadb
-
deviceChanged
: Ketika keadaan perangkat utama terjadi (seperti perangkat offline atau perangkat online)
Peristiwa ini cukup di tingkat adb
untuk memutuskan apakah suatu perangkat terhubung, online, atau offline atau tidak. Namun untuk test harness, kita memerlukan kondisi yang lebih kuat dari ini untuk memastikan perangkat benar-benar siap untuk mulai menjalankan pengujian; hal ini tidak boleh terpengaruh oleh potensi ketidakstabilan kondisi yang mungkin timbul pada perangkat yang baru tersambung.
Berikut rangkaian kejadian di Tradefed:
- Perangkat dikenali sebagai
deviceConnected
dan terbuka untuk acara rutin dariadb
Acara internal Tradefed dibuat yang akan:
- Periksa apakah perangkat tersebut sudah diketahui; Tradefed menyimpan referensi internal ke beberapa perangkat (terutama perangkat yang dialokasikan dan dijalankan saat ini) untuk menghindari TF kehilangan jejaknya secara acak.
- Periksa apakah perangkat
ONLINE
atauOFFLINE
.
Jika perangkat adalah:
OFFLINE
: Perangkat akan dialihkan ke status TradefedCONNECTED_OFFLINE
, yang belum memungkinkan perangkat menjalankan pengujian. Jika nantinya perangkat online maka akan melalui siklusONLINE
. Jika kami menerima acaradeviceDisconnect
, perangkat tersebut akan dihapus begitu saja dari daftar.ONLINE
(seperti yang terlihat oleh adb): Perangkat akan dimasukkan ke 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 membuat daftar perangkat melalui: tf> list devices
Penting untuk diingat bahwa saat perangkat dialokasikan untuk pengujian, sebagian besar hal di atas tidak akan terjadi dan Tradefed akan menentukan status perangkat secara internal. Jadi ada kemungkinan suatu perangkat hilang dari adb devices
saat masih terdaftar di Tradefed. Hal ini dapat terjadi ketika pengujian me-reboot perangkat misalnya.
Perangkat virtual terhubung dengan adb connect
Saat perangkat virtual jarak jauh dibuat, Tradefed menyambungkannya menggunakan adb connect
. Hal 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 ketika peristiwa deviceConnected terjadi
Ketika deviceConnected
terjadi, ddmlib
membuat IDevice referensi baru untuk melacak perangkat yang baru terhubung.
Tradefed menggunakan referensi tersebut dan menggabungkannya dalam implementasi antarmuka perangkat ITestDevice miliknya sendiri untuk menyediakan layanan yang lebih canggih. Namun IDevice yang mendasarinya selalu berasal dari ddmlib
.
Artinya jika perangkat baru tersambung, ITestDevice baru dibuat dan dikaitkan dengan IDevice. Ketika hal ini terjadi selama pemanggilan dan ITestDevice sedang digunakan, IDevice yang mendasarinya masih diganti sehingga pengujian dapat dilanjutkan dengan referensi yang tepat. Hal ini dilakukan dengan mulus setiap kali perangkat terputus/disambungkan kembali (misalnya, saat reboot).