Tradefed'de cihaz tespiti

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ık adb 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:

  1. Cihaz, deviceConnected olarak tanınıyor ve adb gelen düzenli etkinliklere açık
  2. 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 veya OFFLINE olup olmadığını kontrol edin.
  3. Cihaz şuysa:

    • OFFLINE : Cihaz, henüz testleri çalıştırmasına izin vermeyen Tradefed CONNECTED_OFFLINE durumuna geçirilecek. Cihaz daha sonra çevrimiçi olursa ONLINE döngüsünden geçecektir. deviceDisconnect olayı alırsak, cihaz listeden kaldırılacaktır.

    • ONLINE (adb tarafından görüldüğü gibi): Cihaz CONNECTED_ONLINE durumuna getirilecek ve test tahsisi için kullanılabilirliği kontrol edilecektir: checking_availability .

  4. 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çin unavailable 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.