Tradefed'de cihaz algılama

Yeni bir cihaz bağlantısı, anlaşılması kolay olmasa da anlaşılmaya değer bir dizi eşzamansız etkinlik 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 yeni bir cihaz gördüğünde
  • deviceDisconnected: Bir cihaz artık adb'a raporlamadığında
  • deviceChanged: Cihazın önemli bir durumu olduğunda (ör. cihaz çevrimdışı veya cihaz çevrimiçi)

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 ortaya çıkabilecek olası durum kararsızlığından etkilenmemelidir.

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

  1. Cihaz, deviceConnected olarak tanınıyor ve adb'ten gelen normal etkinliklere açık
  2. Aşağıdakileri yapacak dahili bir Tradefed etkinliği oluşturulur:

    • Cihazın daha önce bilinip bilinmediğini kontrol edin. Tradefed, TF'nin cihazları rastgele kaybetmesini önlemek için bazı cihazlara (özellikle de şu anda ayrılmış ve test çalıştıran cihazlara) 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 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üğü gibi): 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 şu yöntemlerle listelenirken 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

Uzaktan sanal cihaz oluşturulduğunda Tradefed, adb connect kullanarak bu cihaza 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 gelen cihazdır.

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ğ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.