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 (ör. aşağıdakiler) 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'e raporlama yapmadığında
  • deviceChanged: Cihaz çevrimdışı veya çevrimiçi olduğunda 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 koşum takımı için, bir cihazın testleri çalıştırmaya gerçekten 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 kaybetmesini önlemek için bazı cihazlara (özellikle şu anda ayrılmış ve testleri çalıştıran cihazlar) dahili referans tutar.
    • Cihazın ONLINE veya OFFLINE olup olmadığını kontrol edin.
  3. Cihaz:

    • 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 şekilde 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ğlı 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österilmesine neden olur ve fiziksel olarak bağlı cihazlarla aynı sırayı izler.

Bir 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ünün kendi uygulamasında sarmalar. ITestDevice Ancak temel alınan IDevice her zaman ddmlib tarafından sağlanan cihazdır.

Bu nedenle, yeni bir cihaz bağlandığında yeni bir ITestDevice oluşturulur ve IDevice ile ilişkilendirilir. 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 (ör. yeniden başlatma sırasında) sorunsuz bir şekilde yapılır.