Tradefed में डिवाइस की पहचान करना

एक नया डिवाइस कनेक्शन कई एसिंक्रोनस इवेंट ट्रिगर करता है, जिन्हें अभी तक समझना मुश्किल है.

फ़िज़िकल तौर पर कनेक्ट होना

Tradefed, adb और डिवाइसों के साथ बुनियादी इंटरैक्शन देने के लिए, ddmlib लाइब्रेरी (Java adb लाइब्रेरी) का इस्तेमाल करता है. IDeviceChangeListener इंटरफ़ेस, इस समाधान का एक हिस्सा है. इसकी मदद से, डिवाइस से जुड़े नए इवेंट किए जा सकते हैं, जैसे कि:

  • deviceConnected: जब adb को कोई नया डिवाइस दिखता है
  • deviceDisconnected: जब कोई डिवाइस adb को रिपोर्ट नहीं कर रहा है
  • deviceChanged: जब डिवाइस की कोई मुख्य स्थिति होती है, जैसे कि डिवाइस ऑफ़लाइन या डिवाइस ऑनलाइन

adb लेवल पर, ये इवेंट यह तय करने के लिए काफ़ी होते हैं कि कोई डिवाइस कनेक्ट है, ऑनलाइन है या ऑफ़लाइन है. हालांकि, टेस्ट हार्नेस के लिए, हमें इससे बेहतर स्थिति की ज़रूरत है, ताकि यह पक्का किया जा सके कि डिवाइस, टेस्ट चलाने के लिए सचमुच तैयार है. साथ ही, नए कनेक्ट किए गए डिवाइस की वजह से, इस पर किसी तरह का असर नहीं पड़ना चाहिए.

Tradefed में इवेंट का क्रम इस तरह है:

  1. डिवाइस को deviceConnected के तौर पर पहचाना गया है और वह adb से सामान्य इवेंट के लिए उपलब्ध है
  2. एक इंटरनल Tradefed इवेंट बनाया जाता है, जो:

    • देखें कि डिवाइस पहले से मौजूद है या नहीं; Tradefed कुछ डिवाइसों (खास तौर पर, उन डिवाइसों के लिए जिन्हें फ़िलहाल टेस्ट के लिए असाइन किया गया है और जिन पर टेस्ट चल रहे हैं) का इंटरनल रेफ़रंस रखता है, ताकि TF को उनका ट्रैक रखने में समस्या न हो.
    • देखें कि डिवाइस ONLINE है या OFFLINE.
  3. अगर डिवाइस:

    • OFFLINE: डिवाइस को Tradefed CONNECTED_OFFLINE स्टेटस पर स्विच कर दिया जाएगा. इस स्टेटस में, डिवाइस पर टेस्ट नहीं चलाए जा सकते. अगर डिवाइस बाद में ऑनलाइन होता है, तो उसे ONLINE साइकल से गुज़रना होगा. अगर हमें deviceDisconnect इवेंट मिलता है, तो डिवाइस को सूची से हटा दिया जाएगा.

    • ONLINE (adb के हिसाब से): डिवाइस को CONNECTED_ONLINE स्थिति में रखा जाएगा और टेस्ट के लिए डिवाइस उपलब्ध है या नहीं, इसकी जांच की जाएगी: checking_availability.

  4. अगर availability की जांच पूरी हो जाती है, तो डिवाइस को टेस्ट के लिए उपलब्ध के तौर पर मार्क कर दिया जाएगा. इसके बाद, उस पर टेस्ट चलाए जा सकेंगे. अगर ऐसा नहीं है, तो असाइन करने के लिए डिवाइस को unavailable के तौर पर मार्क किया जाएगा और उसे कोई टेस्ट नहीं दिया जाएगा.

डिवाइसों की लिस्टिंग करते समय, ये सभी स्थितियां Tradefed console में दिखती हैं: tf> list devices

यह ध्यान रखना ज़रूरी है कि जब डिवाइस को किसी टेस्ट के लिए ऐलोकेट किया गया हो, तो ऊपर बताई गई ज़्यादातर स्थितियां नहीं होंगी. साथ ही, Tradefed डिवाइस की स्थिति को अंदरूनी तौर पर तय करेगा. इसलिए, हो सकता है कि कोई डिवाइस adb devices से हट जाए, लेकिन Tradefed में उसकी लिस्टिंग बनी रहे. उदाहरण के लिए, ऐसा तब हो सकता है, जब टेस्ट के ज़रिए डिवाइस को फिर से चालू किया जा रहा हो.

adb Connect से कनेक्ट किया गया वर्चुअल डिवाइस

जब कोई रिमोट वर्चुअल डिवाइस बनाया जाता है, तो Tradefed adb connect का इस्तेमाल करके उससे कनेक्ट होता है. आम तौर पर, इससे adb devices में <some ip>:<port number> के तौर पर दिखने वाले डिवाइस को ट्रिगर किया जाएगा. साथ ही, यह उसी क्रम में चलेगा जिस क्रम में फ़िज़िकली कनेक्ट किए गए डिवाइस चलते हैं.

device Connected इवेंट के होने पर डिवाइस को ट्रैक करना

deviceConnected के होने पर, ddmlib कनेक्ट किए गए नए डिवाइस को ट्रैक करने के लिए, एक नई पहचान IDevice बनाता है.

Tradefed उस रेफ़रंस का इस्तेमाल करता है और ज़्यादा बेहतर सेवा देने के लिए, उसे डिवाइस इंटरफ़ेस ITestDevice के अपने लागू किए गए वर्शन में रैप करता है. हालांकि, ddmlib से आने वाला IDevice हमेशा मुख्य डिवाइस होता है.

इसका मतलब है कि अगर कोई नया डिवाइस कनेक्ट किया जाता है, तो एक नया ITestDevice बन जाता है और उसे IDevice से जोड़ दिया जाता है. जब किसी कॉल के दौरान ऐसा होता है और ITestDevice का इस्तेमाल किया जा रहा होता है, तब भी IDevice को बदल दिया जाता है, ताकि सही रेफ़रंस पर टेस्टिंग की जा सके. यह प्रोसेस, डिवाइस के डिसकनेक्ट/फिर से कनेक्ट होने पर हर बार आसानी से पूरी हो जाती है. उदाहरण के लिए, डिवाइस को फिर से चालू करने पर.