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

किसी नए डिवाइस को कनेक्ट करने पर, एसिंक्रोनस इवेंट की एक सीरीज़ ट्रिगर होती है. इनके बारे में अभी तक ज़्यादा जानकारी नहीं है, लेकिन इन्हें समझना ज़रूरी है.

फ़िज़िकल तौर पर कनेक्ट किया गया

Tradefed, ddmlib लाइब्रेरी (Java adb लाइब्रेरी) का इस्तेमाल करता है, ताकि 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 कंसोल में दिखती हैं: tf> list devices

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

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

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

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

जब deviceConnected होता है, तो ddmlib एक नया रेफ़रंस IDevice बनाता है, ताकि नए डिवाइस को ट्रैक किया जा सके.

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

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