Tradefed'de cihaz algılama

Yeni bir cihaz bağlantısı, henüz belirgin olmayan ancak anlaşılması gereken bir dizi eşzamansız etkinliği tetikler.

Fiziksel olarak bağlı

Tradefed, ddmlib ve cihazlarla temel etkileşimi sağlamak için ddmlib kitaplığını (bir Java adb kitaplığı) kullanır.adb Bu çözümün bir parçası da yeni cihaz etkinliklerinin alınmasına olanak tanıyan IDeviceChangeListener arayüzüdür. Örneğin:

  • deviceConnected: adb tarafından yeni bir cihaz görüldüğünde
  • deviceDisconnected: Bir cihaz artık adb'e raporlama yapmadığında
  • deviceChanged: Cihaz çevrimdışı veya cihaz çevrimiçi gibi önemli bir cihaz durumu oluştuğunda

Bu etkinlikler, bir cihazın bağlı, çevrimiçi veya çevrimdışı olup olmadığına karar vermek için adb düzeyinde yeterlidir. Ancak test düzeneği için, bir cihazın testleri gerçekten çalıştırmaya hazır olduğundan emin olmak amacıyla bundan daha güçlü bir duruma ihtiyacımız var. Bu durum, yeni bağlanan bir cihazla birlikte gelebilecek olası durum kararsızlığından etkilenmemelidir.

Tradefed'deki etkinlik sırası şöyledir:

  1. Cihaz, deviceConnected olarak tanınıyor ve adb tarihinden itibaren normal etkinliklere açık
  2. Aşağıdaki işlemleri yapacak bir dahili Tradefed etkinliği oluşturulur:

    • Cihazın zaten biliniyor olup olmadığını kontrol edin. Tradefed, TF'nin cihazları rastgele takip etmesini önlemek için bazı cihazlara (özellikle şu anda ayrılmış ve test çalıştıran cihazlar) dahili referans tutar.
    • Cihazın ONLINE veya OFFLINE olup olmadığını kontrol edin.
  3. Cihaz şu ise:

    • OFFLINE: Cihaz, Tradefed CONNECTED_OFFLINE durumuna geçirilir. Bu durumda cihazın henüz test çalıştırmasına izin verilmez. Cihaz daha sonra internete bağlanırsa ONLINE döngüsünden geçer. deviceDisconnect etkinliği aldığımızda cihaz listeden kaldırılır.

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

  4. availability kontrolü başarılı olursa cihaz, test tahsisi için kullanılabilir olarak işaretlenir ve testleri çalıştırabilir. Aksi takdirde cihaz, tahsis için unavailable olarak işaretlenir ve herhangi bir test alamaz.

Bu durumların tümü, cihazlar şu yollarla listelenirken Tradefed konsoluna yansıtılır: tf> list devices

Cihaz şu anda bir test için ayrılmışsa yukarıdakilerin çoğunun gerçekleşmeyeceğini ve Tradefed'in cihaz durumunu dahili olarak belirleyeceğini unutmayın. Bu nedenle, bir cihazın adb devices'dan kaybolup Tradefed tarafından listelenmeye devam etmesi mümkündür. Bu durum, örneğin bir test cihazı yeniden başlattığında meydana gelebilir.

adb connect ile bağlanan sanal cihaz

Uzak bir sanal cihaz oluşturulduğunda Tradefed, adb connect kullanarak cihaza bağlanır. Bu işlem genellikle cihazın adb devices bölümünde <some ip>:<port number> olarak görünmesini sağlar ve fiziksel olarak bağlı cihazlarla aynı sırayı izler.

deviceConnected etkinliği gerçekleştiğinde cihaz izleme

deviceConnected gerçekleştiğinde ddmlib, yeni bağlanan cihazı izlemek için yeni bir referans IDevice oluşturur.

Tradefed, daha gelişmiş bir hizmet sunmak için bu referansı kullanır ve cihaz arayüzü ITestDevice'ın kendi uygulamasında sarmalar. Ancak temel IDevice her zaman ddmlib tarafından sağlanan cihazdır.

Bu, yeni bir cihaz bağlandığında yeni bir ITestDevice oluşturulup IDevice ile ilişkilendirildiği anlamına gelir. Bu durum bir çağırma sırasında meydana geldiğinde ve ITestDevice kullanılıyorsa temel alınan IDevice yine de değiştirilir. Böylece test, uygun referans üzerinde devam edebilir. Bu işlem, bir cihaz her bağlantısı kesildiğinde/yeniden bağlandığında (örneğin, yeniden başlatma sırasında) sorunsuz bir şekilde yapılır.