Yeni bir cihaz bağlantısı, açık olmayan ancak anlaşılmaya değer bir dizi eşzamansız olayı tetikler.
Fiziksel olarak bağlı
Tradefed, adb
ve cihazlarla temel etkileşimi sağlamak için ddmlib
kitaplığını (bir Java adb
kitaplığı) kullanır. Bu çözümün bir parçası, aşağıdakiler gibi yeni cihaz olaylarının alınmasına olanak tanıyan IDeviceChangeListener arayüzüdür :
-
deviceConnected
:adb
tarafından yeni bir cihaz görüldüğünde -
deviceDisconnected
: Bir cihaz artıkadb
rapor vermediğinde -
deviceChanged
: Önemli bir cihaz durumu oluştuğunda (cihazın çevrimdışı olması veya cihazın çevrimiçi olması gibi)
Bu olaylar adb
düzeyinde bir cihazın bağlı, çevrimiçi veya çevrimdışı olup olmadığına karar vermek için yeterlidir. Ancak test donanımında, cihazın testleri çalıştırmaya gerçekten hazır olduğundan emin olmak için bundan daha güçlü bir duruma ihtiyacımız var; yeni bağlanan bir cihazla gelebilecek olası durum dalgalanmalarından etkilenmemelidir.
Tradefed'deki olayların sırası şöyle:
- Cihaz,
deviceConnected
olarak tanınıyor veadb
gelen düzenli etkinliklere açık Aşağıdakileri gerçekleştirecek dahili bir Tradefed etkinliği oluşturulur:
- Cihazın zaten bilinip bilinmediğini kontrol edin; Tradefed, TF'nin rastgele bir şekilde izini kaybetmesini önlemek için bazı cihazlara (özellikle mevcut tahsis edilmiş ve testleri çalıştıran bir cihaza) dahili referans tutar.
- Cihazın
ONLINE
veyaOFFLINE
olup olmadığını kontrol edin.
Cihaz şuysa:
OFFLINE
: Cihaz, henüz testleri çalıştırmasına izin vermeyen TradefedCONNECTED_OFFLINE
durumuna geçirilecek. Cihaz daha sonra çevrimiçi olursaONLINE
döngüsünden geçecektir.deviceDisconnect
olayı alırsak, cihaz listeden kaldırılacaktır.ONLINE
(adb tarafından görüldüğü gibi): CihazCONNECTED_ONLINE
durumuna getirilecek ve test tahsisi için kullanılabilirliği kontrol edilecektir:checking_availability
.
availability
kontrolü başarılı olursa cihaz, test tahsisi için kullanılabilir olarak işaretlenir; testleri çalıştırabilecektir. Aksi takdirde cihaz, tahsis içinunavailable
olarak işaretlenecek ve herhangi bir test alamayacaktır.
Bu durumların tümü, cihazlar şu şekilde listelenirken Tradefed konsoluna yansıtılır: tf> list devices
Cihaz şu anda bir test için tahsis edildiğinde yukarıdakilerin çoğunun gerçekleşmeyeceğini ve Tradefed'in cihazın durumunu dahili olarak belirleyeceğini unutmamak önemlidir. Yani bir cihazın Tradefed tarafından listelenmeye devam ederken adb devices
kaybolması mümkündür. Bu, örneğin bir test cihazı yeniden başlatırken meydana gelebilir.
Adb connect ile bağlanan sanal cihaz
Uzak bir sanal cihaz oluşturulduğunda Tradefed, adb connect
kullanarak ona bağlanır. Bu genellikle aygıtın adb devices
<some ip>:<port number>
olarak görünmesini tetikler ve fiziksel olarak bağlı aygıtlarla aynı sırayı izler.
DeviceConnected olayı oluştuğunda cihaz takibi
deviceConnected
meydana geldiğinde, ddmlib
yeni bağlanan cihazı izlemek için yeni bir referans IDevice oluşturur.
Tradefed bu referansı kullanır ve daha gelişmiş hizmet sağlamak için bunu kendi ITestDevice cihaz arayüzü uygulamasına sarar. Ancak temeldeki IDevice her zaman ddmlib
gelendir.
Bu, yeni bir cihaz bağlanırsa yeni bir ITestDevice oluşturulacağı ve IDevice ile ilişkilendirileceği anlamına gelir. Bu durum bir çağrı sırasında meydana geldiğinde ve ITestDevice kullanıldığında, testin doğru referans üzerinden ilerleyebilmesi için temeldeki IDDevice yine de değiştirilir. Bu, bir cihazın bağlantısı her kesildiğinde/yeniden bağlandığında (örneğin, yeniden başlatma sırasında) sorunsuz bir şekilde gerçekleştirilir.