किसी नए डिवाइस को कनेक्ट करने पर, एसिंक्रोनस इवेंट की एक सीरीज़ ट्रिगर होती है. इनके बारे में अभी तक ज़्यादा जानकारी नहीं है, लेकिन इन्हें समझना ज़रूरी है.
फ़िज़िकल तौर पर कनेक्ट किया गया
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 को बदल दिया जाता है, ताकि टेस्टिंग सही रेफ़रंस पर की जा सके. जब भी कोई डिवाइस डिसकनेक्ट/रीकनेक्ट होता है, तब यह प्रोसेस अपने-आप होती है. उदाहरण के लिए, रीबूट के दौरान.