किसी नए डिवाइस को कनेक्ट करने पर, एसिंक्रोनस इवेंट की एक सीरीज़ ट्रिगर होती है. इनके बारे में अभी तक ज़्यादा जानकारी नहीं है, लेकिन इन्हें समझना ज़रूरी है.
फ़िज़िकल तौर पर कनेक्ट किया गया
Tradefed, ddmlib लाइब्रेरी (Java adb लाइब्रेरी) का इस्तेमाल करता है, ताकि adb और डिवाइसों के साथ बुनियादी इंटरैक्शन किया जा सके. इस समाधान का हिस्सा IDeviceChangeListener इंटरफ़ेस है. इसकी मदद से, डिवाइस से जुड़े नए इवेंट की जानकारी मिलती है. जैसे:
deviceConnected: जबadbको कोई नया डिवाइस दिखता हैdeviceDisconnected: जब कोई डिवाइस,adbको डेटा भेजना बंद कर देता हैdeviceChanged: जब डिवाइस की स्थिति में कोई बड़ा बदलाव होता है, जैसे कि डिवाइस ऑफ़लाइन हो गया है या डिवाइस ऑनलाइन हो गया है
डिवाइस कनेक्ट है, ऑनलाइन है या ऑफ़लाइन है, यह तय करने के लिए adb लेवल पर ये इवेंट काफ़ी हैं. हालांकि, टेस्ट हार्नेस के लिए हमें इससे ज़्यादा बेहतर स्थिति की ज़रूरत होती है, ताकि यह पक्का किया जा सके कि डिवाइस, टेस्ट शुरू करने के लिए पूरी तरह से तैयार है. साथ ही, यह नई स्थिति में कनेक्ट किए गए डिवाइस की वजह से होने वाली संभावित गड़बड़ियों से प्रभावित नहीं होना चाहिए.
Tradefed में इवेंट का क्रम इस तरह होता है:
- डिवाइस को
deviceConnectedके तौर पर पहचाना गया है और यहadbसे सामान्य इवेंट के लिए उपलब्ध है एक इंटरनल Tradefed इवेंट बनाया जाता है. इससे ये काम किए जा सकेंगे:
- देखें कि डिवाइस पहले से मौजूद है या नहीं. Tradefed, कुछ डिवाइसों (खास तौर पर, फ़िलहाल असाइन किए गए और टेस्ट चलाने वाले डिवाइसों) का इंटरनल रेफ़रंस रखता है, ताकि TF उन्हें रैंडम तरीके से ट्रैक न करे.
- देखें कि डिवाइस
ONLINEयाOFFLINEहै या नहीं.
अगर डिवाइस है:
OFFLINE: डिवाइस को TradefedCONNECTED_OFFLINEस्टेट पर स्विच कर दिया जाएगा. इस स्टेट में, डिवाइस पर अब तक टेस्ट नहीं किए जा सकते. अगर डिवाइस बाद में ऑनलाइन होता है, तोONLINEकी प्रोसेस शुरू हो जाएगी. अगर हमेंdeviceDisconnectइवेंट मिलता है, तो डिवाइस को सूची से हटा दिया जाएगा.ONLINE(adb के मुताबिक): डिवाइस कोCONNECTED_ONLINEस्थिति में रखा जाएगा. साथ ही, यह देखा जाएगा कि टेस्ट के लिए डिवाइस उपलब्ध है या नहीं:checking_availability.
अगर
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 को बदल दिया जाता है, ताकि टेस्टिंग सही रेफ़रंस पर की जा सके. जब भी कोई डिवाइस डिसकनेक्ट/रीकनेक्ट होता है, तब यह प्रोसेस अपने-आप होती है. उदाहरण के लिए, रीबूट के दौरान.