Tradefed'de cihaz algılama

Yeni bir cihaz bağlantısı, henüz anlamaya değer olmayan bir dizi eşzamansız etkinliği tetikler.

Fiziksel olarak bağlı

Tradefed, adb ve cihazlarla temel etkileşimi sağlamak için ddmlib kitaplığını (Java adb kitaplığı) kullanır. Bu çözümün bir parçası, aşağıdakiler gibi yeni cihaz etkinliklerinin 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'a raporlamadığında
  • deviceChanged: Temel bir cihaz durumu gerçekleştiğinde (ör. çevrimdışı cihaz veya internete bağlı cihaz)

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

Tradefed'deki etkinlik sırası şu şekildedir:

  1. Cihaz deviceConnected olarak tanındı ve adb tarihinden itibaren düzenli etkinliklere açık
  2. Aşağıdakileri yapacak dahili bir Tradefed etkinliği oluşturulur:

    • Cihazın zaten bilinip bilinmediğini kontrol edin. Tradefed, TF'nin takibini rastgele kaybetmesini önlemek için bazı cihazlara (özellikle de ayrılmış ve çalışan testler) dahili referans sağlar.
    • Cihazın ONLINE veya OFFLINE olup olmadığını kontrol edin.
  3. Cihaz:

    • OFFLINE: Cihaz, Tradefed CONNECTED_OFFLINE durumuna geçirilir. Bu durumda cihaz henüz test çalıştıramaz. Cihaz daha sonra internete bağlanırsa ONLINE döngüsü uygulanır. deviceDisconnect etkinliği alırsak cihaz listeden kaldırılır.

    • ONLINE (adb tarafından görüldüğü şekliyle): Cihaz CONNECTED_ONLINE durumuna geçirilir ve test ayırma için müsaitliği kontrol edilir: checking_availability.

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

Cihazlar aşağıdaki yöntemlerle listelendiğinde bu durumların tümü Tradefed konsoluna yansıtılır: tf> list devices

Cihaz bir teste ayrıldığında yukarıdakilerin çoğunun gerçekleşmeyeceğini ve Tradefed'in cihaz durumunu dahili olarak belirleyeceğini unutmayın. Bu nedenle, bir cihazın Tradefed tarafından listelenmeye devam ederken adb devices'ten kaybolması mümkündür. Örneğin, bir test cihazı yeniden başlattığında bu durumla karşılaşabilirsiniz.

adb connect ile bağlı sanal cihaz

Bir uzak sanal cihaz oluşturulduğunda Tradefed bu cihaza adb connect kullanarak bağlanır. Bu işlem genellikle cihazın adb devices'te <some ip>:<port number> olarak gösterilmesini tetikler 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 IDevice referansı oluşturur.

Tradefed, bu referansı kullanır ve daha gelişmiş hizmet sunmak için kendi cihaz arayüzü ITestDevice uygulamasına sarmalar. Ancak temel IDevice her zaman ddmlib kaynağından gelir.

Yani yeni bir cihaz bağlanırsa yeni bir ITestDevice oluşturulur ve IDevice ile ilişkilendirilir. Bu durum bir çağrı sırasında ve ITestDevice kullanılırken meydana gelirse testin doğru referansla devam edebilmesi için temel IDevice yine de değiştirilir. Bu işlem, 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.